@etherisc/gif-next 0.0.2-f1fe735-758 → 0.0.2-f2273b3-211
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 +59 -9
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1379 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1434 -0
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +542 -0
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.json +10 -0
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
- package/artifacts/contracts/{shared → authorization}/IAccessAdmin.sol/IAccessAdmin.json +211 -270
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +350 -0
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
- package/artifacts/contracts/{registry → authorization}/IServiceAuthorization.sol/IServiceAuthorization.json +29 -10
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +253 -0
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1322 -0
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +589 -0
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +144 -544
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +396 -265
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +147 -109
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +201 -261
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +244 -63
- 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 +1475 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +589 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2040 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +589 -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 +1479 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1195 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1655 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2426 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +589 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +851 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +161 -73
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +116 -126
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +190 -211
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1462 -241
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +661 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1044 -316
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +135 -330
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +97 -111
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +650 -529
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +48 -7
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +192 -0
- 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/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +959 -0
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +569 -0
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +43 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +141 -126
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +69 -11
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +127 -398
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +153 -190
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +122 -88
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1252 -0
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +589 -0
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +331 -204
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +143 -97
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +206 -29
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +132 -379
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +464 -312
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +124 -662
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +456 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +653 -532
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +163 -97
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +134 -184
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +91 -93
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1161 -0
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +589 -0
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +415 -234
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +140 -114
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +94 -9
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +308 -16
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +365 -104
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +136 -83
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +260 -237
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +57 -4
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +459 -309
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +293 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +141 -99
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +230 -312
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +120 -122
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +258 -536
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +637 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +724 -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 -55
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +72 -152
- 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 +585 -112
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +449 -422
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +109 -292
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +94 -80
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1849 -0
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +48 -7
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1333 -0
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +82 -16
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +5 -5
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +76 -265
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +576 -516
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +137 -113
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +57 -111
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +541 -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 +89 -88
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +547 -224
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +127 -123
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
- 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 +16 -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 +148 -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 +55 -2
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +112 -351
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
- 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 +4 -0
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -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 +122 -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 +57 -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 +137 -139
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +130 -16
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +85 -105
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +216 -375
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +48 -7
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +126 -95
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -63
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +183 -164
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +103 -85
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +181 -135
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +61 -8
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
- 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 +4 -4
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +17 -12
- 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 +55 -2
- 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 +4 -4
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +4 -4
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +118 -5
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +181 -14
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -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 +2 -2
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +71 -2
- 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 +66 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +618 -0
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
- package/contracts/accounting/AccountingService.sol +262 -0
- package/contracts/accounting/AccountingServiceManager.sol +38 -0
- package/contracts/accounting/IAccountingService.sol +45 -0
- package/contracts/{shared → authorization}/AccessAdmin.sol +310 -380
- package/contracts/authorization/AccessManagerCloneable.sol +149 -0
- package/contracts/authorization/Authorization.sol +337 -0
- package/contracts/authorization/IAccess.sol +49 -0
- package/contracts/{shared → authorization}/IAccessAdmin.sol +37 -62
- package/contracts/authorization/IAuthorization.sol +74 -0
- package/contracts/{registry → authorization}/IServiceAuthorization.sol +8 -6
- package/contracts/{registry → authorization}/ServiceAuthorization.sol +41 -25
- package/contracts/distribution/BasicDistribution.sol +141 -0
- package/contracts/distribution/BasicDistributionAuthorization.sol +60 -0
- package/contracts/distribution/Distribution.sol +153 -125
- package/contracts/distribution/DistributionService.sol +172 -111
- package/contracts/distribution/DistributionServiceManager.sol +8 -11
- package/contracts/distribution/IDistributionComponent.sol +26 -40
- package/contracts/distribution/IDistributionService.sol +42 -22
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +90 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
- package/contracts/examples/fire/FireProduct.sol +438 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +57 -0
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +106 -0
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +377 -0
- package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
- package/contracts/instance/BundleSet.sol +130 -0
- package/contracts/instance/IInstance.sol +27 -44
- package/contracts/instance/IInstanceService.sol +16 -41
- package/contracts/instance/Instance.sol +103 -119
- package/contracts/instance/InstanceAdmin.sol +346 -240
- package/contracts/instance/InstanceAuthorizationV3.sol +213 -0
- package/contracts/instance/InstanceReader.sol +293 -48
- package/contracts/instance/InstanceService.sol +145 -180
- package/contracts/instance/InstanceServiceManager.sol +8 -13
- package/contracts/instance/InstanceStore.sol +29 -3
- package/contracts/instance/RiskSet.sol +118 -0
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +11 -4
- package/contracts/instance/base/ObjectSet.sol +77 -0
- package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +14 -15
- package/contracts/instance/module/IDistribution.sol +2 -2
- package/contracts/instance/module/IPolicy.sol +26 -25
- package/contracts/instance/module/IRisk.sol +3 -0
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/BasicOracle.sol +47 -0
- package/contracts/oracle/BasicOracleAuthorization.sol +37 -0
- package/contracts/oracle/IOracle.sol +16 -0
- package/contracts/oracle/IOracleComponent.sol +2 -1
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +64 -53
- package/contracts/oracle/OracleService.sol +113 -81
- package/contracts/oracle/OracleServiceManager.sol +8 -11
- package/contracts/pool/BasicPool.sol +175 -0
- package/contracts/pool/BasicPoolAuthorization.sol +76 -0
- package/contracts/pool/BundleService.sol +204 -105
- package/contracts/pool/BundleServiceManager.sol +8 -11
- package/contracts/pool/IBundleService.sol +31 -22
- package/contracts/pool/IPoolComponent.sol +20 -70
- package/contracts/pool/IPoolService.sol +90 -75
- package/contracts/pool/Pool.sol +209 -163
- package/contracts/pool/PoolLib.sol +216 -0
- package/contracts/pool/PoolService.sol +546 -241
- package/contracts/pool/PoolServiceManager.sol +6 -9
- package/contracts/product/ApplicationService.sol +83 -78
- package/contracts/product/ApplicationServiceManager.sol +6 -6
- package/contracts/product/BasicProduct.sol +51 -0
- package/contracts/product/BasicProductAuthorization.sol +56 -0
- package/contracts/product/ClaimService.sol +365 -175
- package/contracts/product/ClaimServiceManager.sol +6 -6
- package/contracts/product/IApplicationService.sol +6 -2
- package/contracts/product/IClaimService.sol +44 -8
- package/contracts/product/IPolicyService.sol +53 -36
- package/contracts/product/IPricingService.sol +10 -10
- package/contracts/product/IProductComponent.sol +29 -9
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +476 -269
- package/contracts/product/PolicyServiceLib.sol +65 -0
- package/contracts/product/PolicyServiceManager.sol +6 -9
- package/contracts/product/PricingService.sol +66 -62
- package/contracts/product/PricingServiceManager.sol +6 -9
- package/contracts/product/Product.sol +233 -132
- package/contracts/product/RiskService.sol +145 -0
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +72 -40
- package/contracts/registry/IRegistry.sol +74 -32
- package/contracts/registry/IRegistryService.sol +3 -10
- package/contracts/registry/IRelease.sol +26 -0
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +368 -220
- package/contracts/registry/RegistryAdmin.sol +238 -219
- package/contracts/registry/RegistryService.sol +41 -66
- package/contracts/registry/RegistryServiceManager.sol +5 -5
- package/contracts/registry/ReleaseAdmin.sol +245 -0
- package/contracts/registry/ReleaseLifecycle.sol +8 -3
- package/contracts/registry/ReleaseRegistry.sol +511 -0
- package/contracts/registry/ServiceAuthorizationV3.sol +107 -60
- package/contracts/registry/TokenRegistry.sol +8 -10
- package/contracts/shared/Component.sol +74 -128
- package/contracts/shared/ComponentService.sol +456 -384
- package/contracts/shared/ComponentServiceManager.sol +10 -7
- package/contracts/shared/ComponentVerifyingService.sol +29 -18
- package/contracts/shared/ContractLib.sol +253 -0
- package/contracts/shared/IComponent.sol +8 -17
- package/contracts/shared/IComponentService.sol +49 -39
- package/contracts/shared/IInstanceLinkedComponent.sol +10 -26
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IRegisterable.sol +23 -1
- package/contracts/shared/IService.sol +4 -6
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
- package/contracts/shared/InstanceLinkedComponent.sol +96 -43
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
- package/contracts/shared/NftOwnable.sol +31 -11
- package/contracts/shared/PolicyHolder.sol +17 -57
- package/contracts/shared/Registerable.sol +55 -21
- package/contracts/shared/RegistryLinked.sol +9 -14
- package/contracts/shared/Service.sol +18 -36
- package/contracts/shared/TokenHandler.sol +309 -26
- package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
- package/contracts/staking/IStaking.sol +9 -13
- package/contracts/staking/IStakingService.sol +24 -9
- package/contracts/staking/StakeManagerLib.sol +85 -43
- package/contracts/staking/Staking.sol +96 -79
- package/contracts/staking/StakingManager.sol +10 -12
- package/contracts/staking/StakingReader.sol +21 -33
- package/contracts/staking/StakingService.sol +79 -37
- package/contracts/staking/StakingServiceManager.sol +8 -7
- package/contracts/staking/StakingStore.sol +12 -22
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +27 -5
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/ClaimId.sol +6 -1
- 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 +89 -27
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/Referral.sol +1 -0
- package/contracts/type/RiskId.sol +35 -4
- package/contracts/type/RoleId.sol +75 -94
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/Selector.sol +5 -0
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +10 -5
- package/contracts/type/UFixed.sol +40 -121
- package/contracts/type/Version.sol +18 -6
- package/contracts/{shared → upgradeability}/ProxyManager.sol +71 -38
- package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
- package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
- package/package.json +6 -5
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -709
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -228
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -187
- 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/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/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +0 -4
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1177
- package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +0 -4
- package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +0 -190
- package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.json +0 -1559
- package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +0 -1193
- package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +0 -1747
- package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +0 -1760
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +0 -1838
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +0 -1856
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
- package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +0 -4
- package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +0 -1562
- package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +0 -4
- package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +0 -1600
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.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/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
- package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +0 -306
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -10
- package/contracts/instance/BundleManager.sol +0 -126
- package/contracts/instance/InstanceAuthorizationsLib.sol +0 -377
- package/contracts/instance/base/ObjectManager.sol +0 -80
- package/contracts/instance/module/IAccess.sol +0 -46
- package/contracts/product/ProductService.sol +0 -124
- package/contracts/product/ProductServiceManager.sol +0 -42
- package/contracts/registry/ReleaseManager.sol +0 -503
- package/contracts/shared/AccessManagerCustom.sol +0 -741
- package/contracts/shared/AccessManagerExtended.sol +0 -481
- package/contracts/shared/AccessManagerExtendedInitializeable.sol +0 -13
- package/contracts/shared/AccessManagerExtendedWithDisable.sol +0 -137
- package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +0 -14
- package/contracts/shared/IAccessManagerExtended.sol +0 -74
- package/contracts/shared/IAccessManagerExtendedWithDisable.sol +0 -18
- package/contracts/shared/InitializableCustom.sol +0 -177
- /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
| @@ -3,42 +3,76 @@ pragma solidity ^0.8.20; | |
| 3 3 |  | 
| 4 4 | 
             
            import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
         | 
| 5 5 | 
             
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            import { | 
| 6 | 
            +
            import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
         | 
| 7 | 
            +
            import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
         | 
| 8 8 |  | 
| 9 9 | 
             
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 10 | 
            -
            import {VersionPart} from "../type/Version.sol";
         | 
| 11 | 
            -
            import {ObjectType, PROTOCOL, REGISTRY,  | 
| 10 | 
            +
            import {VersionPart, VersionPartLib} from "../type/Version.sol";
         | 
| 11 | 
            +
            import {ObjectType, ObjectTypeLib, PROTOCOL, REGISTRY, SERVICE, INSTANCE, STAKE, STAKING, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../type/ObjectType.sol";
         | 
| 12 12 |  | 
| 13 13 | 
             
            import {ChainNft} from "./ChainNft.sol";
         | 
| 14 14 | 
             
            import {IRegistry} from "./IRegistry.sol";
         | 
| 15 | 
            +
            import {IRelease} from "./IRelease.sol";
         | 
| 15 16 | 
             
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 16 | 
            -
            import { | 
| 17 | 
            +
            import {IStaking} from "../staking/IStaking.sol";
         | 
| 18 | 
            +
            import {ReleaseRegistry} from "./ReleaseRegistry.sol";
         | 
| 17 19 | 
             
            import {TokenRegistry} from "./TokenRegistry.sol";
         | 
| 18 20 | 
             
            import {RegistryAdmin} from "./RegistryAdmin.sol";
         | 
| 19 21 |  | 
| 20 | 
            -
             | 
| 22 | 
            +
            /// @dev IMPORTANT
         | 
| 21 23 | 
             
            // Each NFT minted by registry is accosiated with:
         | 
| 22 24 | 
             
            // 1) NFT owner
         | 
| 23 25 | 
             
            // 2) registred contract OR object stored in registered (parent) contract
         | 
| 24 | 
            -
            //  | 
| 25 | 
            -
            // 1) IService address by  | 
| 26 | 
            -
            // 2)  | 
| 27 | 
            -
            // 3)  | 
| 28 | 
            -
            // 4)  | 
| 29 | 
            -
             | 
| 26 | 
            +
            // Five registration flows:
         | 
| 27 | 
            +
            // 1) registerService() -> registers IService address by ReleaseRegistry (ReleaseRegistry is set at deployment time)
         | 
| 28 | 
            +
            // 2) register() -> registers IRegisterable address by IService (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
         | 
| 29 | 
            +
            // 3)            -> registers object by IService (POLICY, BUNDLE, STAKE)
         | 
| 30 | 
            +
            // 4) registerWithCustomType() -> registers IRegisterable address with custom type by IService
         | 
| 31 | 
            +
            // 5) registerRegistry() -> registers IRegistry address (from different chain) by GifAdmin. Works ONLY on mainnet. 
         | 
| 32 | 
            +
            //                          Note: getters by address MUST not be used with this address (will return 0 or data related to different object or even revert)
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            /// @dev Chain Registry contract implementing IRegistry.
         | 
| 35 | 
            +
            /// IRegistry for method details.
         | 
| 30 36 | 
             
            contract Registry is
         | 
| 31 | 
            -
                 | 
| 37 | 
            +
                Initializable,
         | 
| 38 | 
            +
                AccessManaged,
         | 
| 32 39 | 
             
                IRegistry
         | 
| 33 40 | 
             
            {
         | 
| 34 | 
            -
                 | 
| 41 | 
            +
                /// @dev Protocol NFT ID
         | 
| 42 | 
            +
                NftId public immutable PROTOCOL_NFT_ID;
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                /// @dev Gobal registry NFT ID
         | 
| 45 | 
            +
                NftId public immutable GLOBAL_REGISTRY_NFT_ID;
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                /// @dev Gobal registry address on mainnet.
         | 
| 48 | 
            +
                address public immutable GLOBAL_REGISTRY_ADDRESS;
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                /// @dev Registry NFT ID
         | 
| 51 | 
            +
                NftId public immutable REGISTRY_NFT_ID;
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                /// @dev Deployer address that authorizes the initializer of this contract.
         | 
| 54 | 
            +
                address public immutable DEPLOYER;
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                /// @dev Registry admin contract for this registry.
         | 
| 57 | 
            +
                RegistryAdmin public immutable ADMIN;
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                /// @dev Chain NFT contract that keeps track of the ownership of all registered objects.
         | 
| 60 | 
            +
                ChainNft public immutable CHAIN_NFT;
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                address public constant NFT_LOCK_ADDRESS = address(0x1);
         | 
| 35 63 | 
             
                uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
         | 
| 36 64 | 
             
                uint256 public constant STAKING_TOKEN_SEQUENCE_ID = 3;
         | 
| 37 65 | 
             
                string public constant EMPTY_URI = "";
         | 
| 38 66 |  | 
| 67 | 
            +
                /// @dev keep track of different registries on different chains
         | 
| 68 | 
            +
                mapping(uint256 chainId => NftId registryNftId) private _registryNftIdByChainId;
         | 
| 69 | 
            +
                uint256[] private _chainId;
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                /// @dev keep track of object info and address reverse lookup
         | 
| 39 72 | 
             
                mapping(NftId nftId => ObjectInfo info) private _info;
         | 
| 40 73 | 
             
                mapping(address object => NftId nftId) private _nftIdByAddress;
         | 
| 41 74 |  | 
| 75 | 
            +
                /// @dev keep track of service addresses by version and domain
         | 
| 42 76 | 
             
                mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
         | 
| 43 77 |  | 
| 44 78 | 
             
                mapping(ObjectType objectType => bool) private _coreTypes;
         | 
| @@ -49,143 +83,194 @@ contract Registry is | |
| 49 83 | 
             
                mapping(ObjectType objectType => mapping(
         | 
| 50 84 | 
             
                        ObjectType parentType => bool)) private _coreObjectCombinations;
         | 
| 51 85 |  | 
| 52 | 
            -
                 | 
| 53 | 
            -
                ChainNft public immutable _chainNft;
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                NftId public immutable _protocolNftId;
         | 
| 56 | 
            -
                NftId public immutable _registryNftId;
         | 
| 57 | 
            -
                NftId public _stakingNftId;
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                address public _tokenRegistryAddress;
         | 
| 60 | 
            -
                address public _stakingAddress;
         | 
| 61 | 
            -
                ReleaseManager public _releaseManager;
         | 
| 62 | 
            -
             | 
| 63 | 
            -
                // TODO 
         | 
| 64 | 
            -
                // 1). Registry and ReleaseManager must be treated as whole single entity. 
         | 
| 65 | 
            -
                //     But current limitations of EVM does not allow it -> require it to be splitted
         | 
| 66 | 
            -
                // 2). Keep onlyReleaseManager modifier
         | 
| 67 | 
            -
                // 3). Delete onlyRegistryService in favor of restricted, introduce aditional "domain role", REGISTRY_SERVICE_ROLE
         | 
| 68 | 
            -
                // 4). (For GlobalRegistry ONLY) make registerChainRegistry() restricted to GIF_ADMIN_ROLE
         | 
| 69 | 
            -
                modifier onlyRegistryService() {
         | 
| 70 | 
            -
                    if(!_releaseManager.isActiveRegistryService(msg.sender)) {
         | 
| 71 | 
            -
                        revert ErrorRegistryCallerNotRegistryService();
         | 
| 72 | 
            -
                    }
         | 
| 73 | 
            -
                    _;
         | 
| 74 | 
            -
                }
         | 
| 86 | 
            +
                NftId private _stakingNftId;
         | 
| 75 87 |  | 
| 88 | 
            +
                ReleaseRegistry private _releaseRegistry;
         | 
| 89 | 
            +
                address private _tokenRegistryAddress;
         | 
| 90 | 
            +
                address private _stakingAddress;
         | 
| 76 91 |  | 
| 77 | 
            -
                modifier  | 
| 78 | 
            -
                    if(msg.sender !=  | 
| 79 | 
            -
                        revert  | 
| 92 | 
            +
                modifier onlyDeployer() {
         | 
| 93 | 
            +
                    if (msg.sender != DEPLOYER) {
         | 
| 94 | 
            +
                        revert ErrorRegistryCallerNotDeployer();
         | 
| 80 95 | 
             
                    }
         | 
| 81 96 | 
             
                    _;
         | 
| 82 97 | 
             
                }
         | 
| 83 98 |  | 
| 84 | 
            -
             | 
| 85 | 
            -
                constructor( | 
| 86 | 
            -
             | 
| 99 | 
            +
                // TODO when create2 strategy is added to ignition:
         | 
| 100 | 
            +
                // 1. move globalRegistry arg out from constructor into initialize()
         | 
| 101 | 
            +
                // 2. add testRegistry_deployChainRegistryAtGlobalRegistryAddress
         | 
| 102 | 
            +
                /// @dev Creates the registry contract and populates it with the protocol and registry objects.
         | 
| 103 | 
            +
                /// Internally deploys the ChainNft contract.
         | 
| 104 | 
            +
                constructor(RegistryAdmin admin, address globalRegistry)
         | 
| 105 | 
            +
                    AccessManaged(admin.authority())
         | 
| 87 106 | 
             
                {
         | 
| 88 | 
            -
                     | 
| 107 | 
            +
                    DEPLOYER = msg.sender;
         | 
| 108 | 
            +
                    ADMIN = admin;
         | 
| 109 | 
            +
                    GLOBAL_REGISTRY_ADDRESS = _getGlobalRegistryAddress(globalRegistry);
         | 
| 110 | 
            +
             | 
| 89 111 | 
             
                    // deploy NFT 
         | 
| 90 | 
            -
                     | 
| 112 | 
            +
                    CHAIN_NFT = new ChainNft(address(this));
         | 
| 113 | 
            +
                    GLOBAL_REGISTRY_NFT_ID = NftIdLib.toNftId(
         | 
| 114 | 
            +
                        CHAIN_NFT.GLOBAL_REGISTRY_ID());
         | 
| 91 115 |  | 
| 92 116 | 
             
                    // initial registry setup
         | 
| 93 | 
            -
                     | 
| 94 | 
            -
                     | 
| 117 | 
            +
                    PROTOCOL_NFT_ID = _registerProtocol();
         | 
| 118 | 
            +
                    REGISTRY_NFT_ID = _registerRegistry();
         | 
| 95 119 |  | 
| 96 120 | 
             
                    // set object types and object parent relations
         | 
| 97 121 | 
             
                    _setupValidCoreTypesAndCombinations();
         | 
| 98 122 | 
             
                }
         | 
| 99 123 |  | 
| 100 124 |  | 
| 101 | 
            -
                /// @dev  | 
| 102 | 
            -
                /// MUST be called by release  | 
| 125 | 
            +
                /// @dev Wires release registry, token registry and staking contract to this registry.
         | 
| 126 | 
            +
                /// MUST be called by release registry.
         | 
| 103 127 | 
             
                function initialize(
         | 
| 104 | 
            -
                    address  | 
| 128 | 
            +
                    address releaseRegistry,
         | 
| 105 129 | 
             
                    address tokenRegistry,
         | 
| 106 130 | 
             
                    address staking
         | 
| 107 131 | 
             
                )
         | 
| 108 132 | 
             
                    external
         | 
| 109 133 | 
             
                    initializer()
         | 
| 134 | 
            +
                    onlyDeployer()
         | 
| 110 135 | 
             
                {
         | 
| 111 | 
            -
                     | 
| 136 | 
            +
                    // store links to supporting contracts
         | 
| 137 | 
            +
                    _releaseRegistry = ReleaseRegistry(releaseRegistry);
         | 
| 112 138 | 
             
                    _tokenRegistryAddress = tokenRegistry;
         | 
| 113 139 | 
             
                    _stakingAddress = staking;
         | 
| 114 140 |  | 
| 141 | 
            +
                    // register staking contract
         | 
| 115 142 | 
             
                    _stakingNftId = _registerStaking();
         | 
| 116 143 | 
             
                }
         | 
| 117 144 |  | 
| 145 | 
            +
                /// @inheritdoc IRegistry
         | 
| 146 | 
            +
                function registerRegistry(
         | 
| 147 | 
            +
                    NftId nftId,
         | 
| 148 | 
            +
                    uint256 chainId, 
         | 
| 149 | 
            +
                    address registryAddress
         | 
| 150 | 
            +
                )
         | 
| 151 | 
            +
                    external
         | 
| 152 | 
            +
                    restricted()
         | 
| 153 | 
            +
                {
         | 
| 154 | 
            +
                    // registration of chain registries only allowed on mainnet
         | 
| 155 | 
            +
                    if (block.chainid != 1) {
         | 
| 156 | 
            +
                        revert ErrorRegistryNotOnMainnet(block.chainid);
         | 
| 157 | 
            +
                    }
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                    // registry chain id is not zero
         | 
| 160 | 
            +
                    if(chainId == 0) {
         | 
| 161 | 
            +
                        revert ErrorRegistryChainRegistryChainIdZero(nftId);
         | 
| 162 | 
            +
                    }
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                    // registry address is not zero
         | 
| 165 | 
            +
                    if (registryAddress == address(0)) {
         | 
| 166 | 
            +
                        revert ErrorRegistryChainRegistryAddressZero(nftId, chainId);
         | 
| 167 | 
            +
                    }
         | 
| 168 | 
            +
             | 
| 169 | 
            +
                    // registry nft id matches registry chain id
         | 
| 170 | 
            +
                    uint256 expectedRegistryId = CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID, chainId);
         | 
| 171 | 
            +
                    if (nftId != NftIdLib.toNftId(expectedRegistryId)) {
         | 
| 172 | 
            +
                        revert ErrorRegistryChainRegistryNftIdInvalid(nftId, chainId);
         | 
| 173 | 
            +
                    }
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                    emit LogChainRegistryRegistration(nftId, chainId, registryAddress);
         | 
| 176 | 
            +
             | 
| 177 | 
            +
                    _registerRegistryForNft(
         | 
| 178 | 
            +
                        chainId,
         | 
| 179 | 
            +
                        ObjectInfo({
         | 
| 180 | 
            +
                            nftId: nftId,
         | 
| 181 | 
            +
                            parentNftId: REGISTRY_NFT_ID,
         | 
| 182 | 
            +
                            objectType: REGISTRY(),
         | 
| 183 | 
            +
                            isInterceptor: false,
         | 
| 184 | 
            +
                            objectAddress: registryAddress,
         | 
| 185 | 
            +
                            initialOwner: NFT_LOCK_ADDRESS,
         | 
| 186 | 
            +
                            data: ""  
         | 
| 187 | 
            +
                        }),
         | 
| 188 | 
            +
                        false); // do not update address lookup for objects on a different chain
         | 
| 189 | 
            +
                }
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                // TODO limit service owner to registry admin?
         | 
| 192 | 
            +
                /// @inheritdoc IRegistry
         | 
| 118 193 | 
             
                function registerService(
         | 
| 119 194 | 
             
                    ObjectInfo memory info, 
         | 
| 120 195 | 
             
                    VersionPart version, 
         | 
| 121 196 | 
             
                    ObjectType domain
         | 
| 122 197 | 
             
                )
         | 
| 123 198 | 
             
                    external
         | 
| 124 | 
            -
                     | 
| 199 | 
            +
                    restricted()
         | 
| 125 200 | 
             
                    returns(NftId nftId)
         | 
| 126 201 | 
             
                {
         | 
| 202 | 
            +
                    // service address is defined
         | 
| 127 203 | 
             
                    address service = info.objectAddress;
         | 
| 128 | 
            -
                    /* must be guaranteed by release manager
         | 
| 129 204 | 
             
                    if(service == address(0)) {
         | 
| 130 | 
            -
                        revert();
         | 
| 205 | 
            +
                        revert ErrorRegistryServiceAddressZero();
         | 
| 131 206 | 
             
                    }
         | 
| 132 207 |  | 
| 208 | 
            +
                    // version is defined
         | 
| 133 209 | 
             
                    if(version.eqz()) {
         | 
| 134 | 
            -
                        revert();
         | 
| 210 | 
            +
                        revert ErrorRegistryServiceVersionZero(service);
         | 
| 211 | 
            +
                    }
         | 
| 212 | 
            +
                    // service domain is defined
         | 
| 213 | 
            +
                    if(domain.eqz()) {
         | 
| 214 | 
            +
                        revert ErrorRegistryServiceDomainZero(service, version);
         | 
| 135 215 | 
             
                    }
         | 
| 136 216 |  | 
| 217 | 
            +
                    // service has proper type
         | 
| 137 218 | 
             
                    if(info.objectType != SERVICE()) {
         | 
| 138 | 
            -
                        revert();
         | 
| 219 | 
            +
                        revert ErrorRegistryNotService(service, info.objectType);
         | 
| 139 220 | 
             
                    }
         | 
| 140 | 
            -
                    if(info.parentType != REGISTRY()) {
         | 
| 141 | 
            -
                        revert();
         | 
| 142 | 
            -
                    }        
         | 
| 143 | 
            -
                    info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
         | 
| 144 | 
            -
                    */
         | 
| 145 221 |  | 
| 146 | 
            -
                     | 
| 147 | 
            -
             | 
| 222 | 
            +
                    // service parent has registry type
         | 
| 223 | 
            +
                    if(info.parentNftId != REGISTRY_NFT_ID) {
         | 
| 224 | 
            +
                        revert ErrorRegistryServiceParentNotRegistry(service, version, info.parentNftId);
         | 
| 148 225 | 
             
                    }
         | 
| 149 226 |  | 
| 150 | 
            -
                     | 
| 151 | 
            -
             | 
| 227 | 
            +
                    // service has not already been registered
         | 
| 228 | 
            +
                    if(_service[version][domain] != address(0)) {
         | 
| 229 | 
            +
                        revert ErrorRegistryServiceDomainAlreadyRegistered(service, version, domain);
         | 
| 152 230 | 
             
                    }
         | 
| 153 | 
            -
                    
         | 
| 154 | 
            -
                    _service[version][domain] = service;
         | 
| 155 231 |  | 
| 156 | 
            -
                     | 
| 232 | 
            +
                    _service[version][domain] = service;
         | 
| 157 233 |  | 
| 158 234 | 
             
                    emit LogServiceRegistration(version, domain);
         | 
| 235 | 
            +
             | 
| 236 | 
            +
                    nftId = _register(info);
         | 
| 159 237 | 
             
                }
         | 
| 160 238 |  | 
| 239 | 
            +
             | 
| 240 | 
            +
                /// @inheritdoc IRegistry
         | 
| 161 241 | 
             
                function register(ObjectInfo memory info)
         | 
| 162 242 | 
             
                    external
         | 
| 163 | 
            -
                     | 
| 243 | 
            +
                    restricted()
         | 
| 164 244 | 
             
                    returns(NftId nftId)
         | 
| 165 245 | 
             
                {
         | 
| 246 | 
            +
                    address objectAddress = info.objectAddress;
         | 
| 166 247 | 
             
                    ObjectType objectType = info.objectType;
         | 
| 248 | 
            +
             | 
| 249 | 
            +
                    // this indidirectly enforces that the parent is registered
         | 
| 250 | 
            +
                    // parentType would be zero for a non-registered parent which is never a valid type combination
         | 
| 167 251 | 
             
                    ObjectType parentType = _info[info.parentNftId].objectType;
         | 
| 168 252 |  | 
| 169 | 
            -
                    //  | 
| 170 | 
            -
                    if( | 
| 171 | 
            -
                    {
         | 
| 253 | 
            +
                    // check type combinations for core objects
         | 
| 254 | 
            +
                    if(objectAddress == address(0)) {
         | 
| 172 255 | 
             
                        if(_coreObjectCombinations[objectType][parentType] == false) {
         | 
| 173 | 
            -
                            revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
         | 
| 256 | 
            +
                            revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
         | 
| 174 257 | 
             
                        }
         | 
| 175 258 | 
             
                    }
         | 
| 176 | 
            -
                     | 
| 177 | 
            -
                    {
         | 
| 259 | 
            +
                    // check type combinations for contract objects
         | 
| 260 | 
            +
                    else {
         | 
| 178 261 | 
             
                        if(_coreContractCombinations[objectType][parentType] == false) {
         | 
| 179 | 
            -
                            revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
         | 
| 262 | 
            +
                            revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
         | 
| 180 263 | 
             
                        }
         | 
| 181 264 | 
             
                    }
         | 
| 182 265 |  | 
| 183 266 | 
             
                    nftId = _register(info);
         | 
| 184 267 | 
             
                }
         | 
| 185 268 |  | 
| 269 | 
            +
             | 
| 270 | 
            +
                /// @inheritdoc IRegistry
         | 
| 186 271 | 
             
                function registerWithCustomType(ObjectInfo memory info)
         | 
| 187 272 | 
             
                    external
         | 
| 188 | 
            -
                     | 
| 273 | 
            +
                    restricted()
         | 
| 189 274 | 
             
                    returns(NftId nftId)
         | 
| 190 275 | 
             
                {
         | 
| 191 276 | 
             
                    ObjectType objectType = info.objectType;
         | 
| @@ -196,64 +281,98 @@ contract Registry is | |
| 196 281 | 
             
                    }
         | 
| 197 282 |  | 
| 198 283 | 
             
                    if(
         | 
| 284 | 
            +
                        objectType == ObjectTypeLib.zero() ||
         | 
| 285 | 
            +
                        parentType == ObjectTypeLib.zero() ||
         | 
| 199 286 | 
             
                        parentType == PROTOCOL() ||
         | 
| 200 | 
            -
                        parentType == REGISTRY() ||
         | 
| 201 287 | 
             
                        parentType == SERVICE()
         | 
| 202 288 | 
             
                    ) {
         | 
| 203 | 
            -
                        revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
         | 
| 289 | 
            +
                        revert ErrorRegistryTypesCombinationInvalid(info.objectAddress, objectType, parentType);
         | 
| 204 290 | 
             
                    }
         | 
| 205 291 |  | 
| 206 | 
            -
                    _register(info);
         | 
| 292 | 
            +
                    nftId = _register(info);
         | 
| 207 293 | 
             
                }
         | 
| 208 294 |  | 
| 209 295 |  | 
| 210 296 | 
             
                /// @dev earliest GIF major version 
         | 
| 211 297 | 
             
                function getInitialVersion() external view returns (VersionPart) {
         | 
| 212 | 
            -
                    return  | 
| 298 | 
            +
                    return VersionPartLib.toVersionPart(_releaseRegistry.INITIAL_GIF_VERSION());
         | 
| 213 299 | 
             
                }
         | 
| 214 300 |  | 
| 215 301 | 
             
                /// @dev next GIF release version to be released
         | 
| 216 302 | 
             
                function getNextVersion() external view returns (VersionPart) {
         | 
| 217 | 
            -
                    return  | 
| 303 | 
            +
                    return _releaseRegistry.getNextVersion();
         | 
| 218 304 | 
             
                }
         | 
| 219 305 |  | 
| 220 306 | 
             
                /// @dev latest active GIF release version 
         | 
| 221 307 | 
             
                function getLatestVersion() external view returns (VersionPart) { 
         | 
| 222 | 
            -
                    return  | 
| 308 | 
            +
                    return _releaseRegistry.getLatestVersion();
         | 
| 309 | 
            +
                }
         | 
| 310 | 
            +
             | 
| 311 | 
            +
                function getReleaseInfo(VersionPart release) external view returns (IRelease.ReleaseInfo memory) {
         | 
| 312 | 
            +
                    return _releaseRegistry.getReleaseInfo(release);
         | 
| 313 | 
            +
                }
         | 
| 314 | 
            +
             | 
| 315 | 
            +
                function chainIds() public view returns (uint256) {
         | 
| 316 | 
            +
                    return _chainId.length;
         | 
| 317 | 
            +
                }
         | 
| 318 | 
            +
             | 
| 319 | 
            +
                function getChainId(uint256 idx) public view returns (uint256) {
         | 
| 320 | 
            +
                    return _chainId[idx];
         | 
| 223 321 | 
             
                }
         | 
| 224 322 |  | 
| 225 | 
            -
                function  | 
| 226 | 
            -
                    return  | 
| 323 | 
            +
                function getRegistryNftId(uint256 chainId) public view returns (NftId nftId) {
         | 
| 324 | 
            +
                    return _registryNftIdByChainId[chainId];
         | 
| 227 325 | 
             
                }
         | 
| 228 326 |  | 
| 229 327 | 
             
                function getObjectCount() external view returns (uint256) {
         | 
| 230 | 
            -
                    return  | 
| 328 | 
            +
                    return CHAIN_NFT.totalSupply();
         | 
| 231 329 | 
             
                }
         | 
| 232 330 |  | 
| 233 331 | 
             
                function getNftId() external view returns (NftId nftId) {
         | 
| 234 | 
            -
                    return  | 
| 332 | 
            +
                    return REGISTRY_NFT_ID;
         | 
| 235 333 | 
             
                }
         | 
| 236 334 |  | 
| 237 335 | 
             
                function getProtocolNftId() external view returns (NftId nftId) {
         | 
| 238 | 
            -
                    return  | 
| 336 | 
            +
                    return PROTOCOL_NFT_ID;
         | 
| 239 337 | 
             
                }
         | 
| 240 338 |  | 
| 241 | 
            -
                function  | 
| 339 | 
            +
                function getNftIdForAddress(address object) external view returns (NftId id) {
         | 
| 242 340 | 
             
                    return _nftIdByAddress[object];
         | 
| 243 341 | 
             
                }
         | 
| 244 342 |  | 
| 245 343 | 
             
                function ownerOf(NftId nftId) public view returns (address) {
         | 
| 246 | 
            -
                    return  | 
| 344 | 
            +
                    return CHAIN_NFT.ownerOf(nftId.toInt());
         | 
| 345 | 
            +
                }
         | 
| 346 | 
            +
             | 
| 347 | 
            +
                function isOwnerOf(NftId nftId, address expectedOwner) public view returns (bool) {
         | 
| 348 | 
            +
                    return CHAIN_NFT.ownerOf(nftId.toInt()) == expectedOwner;
         | 
| 247 349 | 
             
                }
         | 
| 248 350 |  | 
| 249 351 | 
             
                function ownerOf(address contractAddress) public view returns (address) {
         | 
| 250 | 
            -
                    return  | 
| 352 | 
            +
                    return CHAIN_NFT.ownerOf(_nftIdByAddress[contractAddress].toInt());
         | 
| 251 353 | 
             
                }
         | 
| 252 354 |  | 
| 253 355 | 
             
                function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
         | 
| 254 356 | 
             
                    return _info[nftId];
         | 
| 255 357 | 
             
                }
         | 
| 256 358 |  | 
| 359 | 
            +
                function getParentNftId(NftId nftId) external view returns (NftId parentNftId) {
         | 
| 360 | 
            +
                    return _info[nftId].parentNftId;
         | 
| 361 | 
            +
                }
         | 
| 362 | 
            +
             | 
| 363 | 
            +
                function isObjectType(address contractAddress, ObjectType expectedObjectType) external view returns (bool) {
         | 
| 364 | 
            +
                    NftId nftId = _nftIdByAddress[contractAddress];
         | 
| 365 | 
            +
                    return isObjectType(nftId, expectedObjectType);
         | 
| 366 | 
            +
                }
         | 
| 367 | 
            +
             | 
| 368 | 
            +
                function isObjectType(NftId nftId, ObjectType expectedObjectType) public view returns (bool) {
         | 
| 369 | 
            +
                    return _info[nftId].objectType == expectedObjectType;
         | 
| 370 | 
            +
                }
         | 
| 371 | 
            +
             | 
| 372 | 
            +
                function getObjectAddress(NftId nftId) external view returns (address) {
         | 
| 373 | 
            +
                    return _info[nftId].objectAddress;
         | 
| 374 | 
            +
                }
         | 
| 375 | 
            +
             | 
| 257 376 | 
             
                function getObjectInfo(address object) external view returns (ObjectInfo memory) {
         | 
| 258 377 | 
             
                    return _info[_nftIdByAddress[object]];
         | 
| 259 378 | 
             
                }
         | 
| @@ -277,12 +396,10 @@ contract Registry is | |
| 277 396 |  | 
| 278 397 | 
             
                function isActiveRelease(VersionPart version) external view returns (bool)
         | 
| 279 398 | 
             
                {
         | 
| 280 | 
            -
                    return  | 
| 399 | 
            +
                    return _releaseRegistry.isActiveRelease(version);
         | 
| 281 400 | 
             
                }
         | 
| 282 401 |  | 
| 283 402 | 
             
                function getStakingAddress() external view returns (address staking) {
         | 
| 284 | 
            -
                    //return getObjectInfo(_stakingNftId).objectAddress;
         | 
| 285 | 
            -
                    //return _info[_stakingNftId].objectAddress;
         | 
| 286 403 | 
             
                    return _stakingAddress;
         | 
| 287 404 | 
             
                }
         | 
| 288 405 |  | 
| @@ -298,24 +415,20 @@ contract Registry is | |
| 298 415 | 
             
                    service =  _service[releaseVersion][serviceDomain]; 
         | 
| 299 416 | 
             
                }
         | 
| 300 417 |  | 
| 301 | 
            -
                function  | 
| 302 | 
            -
                    return address( | 
| 303 | 
            -
                }
         | 
| 304 | 
            -
             | 
| 305 | 
            -
                function getReleaseManagerAddress() external view returns (address) {
         | 
| 306 | 
            -
                    return address(_releaseManager);
         | 
| 418 | 
            +
                function getReleaseRegistryAddress() external view returns (address) {
         | 
| 419 | 
            +
                    return address(_releaseRegistry);
         | 
| 307 420 | 
             
                }
         | 
| 308 421 |  | 
| 309 422 | 
             
                function getChainNftAddress() external view override returns (address) {
         | 
| 310 | 
            -
                    return address( | 
| 423 | 
            +
                    return address(CHAIN_NFT);
         | 
| 311 424 | 
             
                }
         | 
| 312 425 |  | 
| 313 426 | 
             
                function getRegistryAdminAddress() external view returns (address) {
         | 
| 314 | 
            -
                    return address( | 
| 427 | 
            +
                    return address(ADMIN);
         | 
| 315 428 | 
             
                }
         | 
| 316 429 |  | 
| 317 430 | 
             
                function getAuthority() external view returns (address) {
         | 
| 318 | 
            -
                    return  | 
| 431 | 
            +
                    return ADMIN.authority();
         | 
| 319 432 | 
             
                }
         | 
| 320 433 |  | 
| 321 434 | 
             
                function getOwner() public view returns (address owner) {
         | 
| @@ -335,30 +448,37 @@ contract Registry is | |
| 335 448 | 
             
                // Internals
         | 
| 336 449 |  | 
| 337 450 | 
             
                /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
         | 
| 338 | 
            -
                // TODO registration of precompile addresses
         | 
| 339 451 | 
             
                function _register(ObjectInfo memory info)
         | 
| 340 452 | 
             
                    internal
         | 
| 341 453 | 
             
                    returns(NftId nftId)
         | 
| 342 454 | 
             
                {
         | 
| 343 | 
            -
                    ObjectType objectType = info.objectType;
         | 
| 455 | 
            +
                    ObjectType objectType = info.objectType; // do not care here, never PROTOCOL(), REGISTRY()
         | 
| 344 456 | 
             
                    bool isInterceptor = info.isInterceptor;
         | 
| 345 | 
            -
                    address objectAddress = info.objectAddress;
         | 
| 346 | 
            -
                    address owner = info.initialOwner;
         | 
| 457 | 
            +
                    address objectAddress = info.objectAddress; // do not care here, can be 0
         | 
| 458 | 
            +
                    address owner = info.initialOwner; // do not care here, can be 0, can be equal info.objectAddress
         | 
| 347 459 |  | 
| 348 | 
            -
                    NftId parentNftId = info.parentNftId;
         | 
| 460 | 
            +
                    NftId parentNftId = info.parentNftId; // do not care here, can not be 0
         | 
| 349 461 | 
             
                    ObjectInfo memory parentInfo = _info[parentNftId];
         | 
| 350 | 
            -
                     | 
| 351 | 
            -
                    address parentAddress = parentInfo.objectAddress;
         | 
| 462 | 
            +
                    address parentAddress = parentInfo.objectAddress; // can be 0
         | 
| 352 463 |  | 
| 353 464 | 
             
                    // parent is contract -> need to check? -> check before minting
         | 
| 354 465 | 
             
                    // special case: staking: to protocol possible as well
         | 
| 355 | 
            -
                    // special case: global registry nft as parent when not on mainnet -> global registry address is 0
         | 
| 356 | 
            -
                    // special case: when parentNftId ==  | 
| 357 | 
            -
                    // special case: when parentNftId ==  | 
| 358 | 
            -
                     | 
| 466 | 
            +
                    // NO LONGER TRUE: special case: global registry nft as parent when not on mainnet -> global registry address is 0
         | 
| 467 | 
            +
                    // special case: when parentNftId == CHAIN_NFT.mint(), check for zero parent address before mint
         | 
| 468 | 
            +
                    // special case: when parentNftId == CHAIN_NFT.mint() && objectAddress == initialOwner
         | 
| 469 | 
            +
                    // Parent can have 0 address in case of STAKE for PROTOCOL / CUSTOM_TYPE for POLICY
         | 
| 470 | 
            +
                    // But it MUST be registered -> parentType != 0 && parentNftId != 0
         | 
| 471 | 
            +
                    /*if(objectType != STAKE()) {
         | 
| 359 472 | 
             
                        if(parentAddress == address(0)) {
         | 
| 360 473 | 
             
                            revert ErrorRegistryParentAddressZero();
         | 
| 361 474 | 
             
                        }
         | 
| 475 | 
            +
                    }*/
         | 
| 476 | 
            +
                
         | 
| 477 | 
            +
                    // global registry is never parent when not on mainnet
         | 
| 478 | 
            +
                    if(block.chainid != 1) {
         | 
| 479 | 
            +
                        if(parentNftId == GLOBAL_REGISTRY_NFT_ID) {
         | 
| 480 | 
            +
                            revert ErrorRegistryGlobalRegistryAsParent(objectAddress, objectType);
         | 
| 481 | 
            +
                        }
         | 
| 362 482 | 
             
                    }
         | 
| 363 483 |  | 
| 364 484 | 
             
                    address interceptorAddress = _getInterceptor(
         | 
| @@ -368,23 +488,17 @@ contract Registry is | |
| 368 488 | 
             
                        parentInfo.isInterceptor, 
         | 
| 369 489 | 
             
                        parentAddress);
         | 
| 370 490 |  | 
| 371 | 
            -
                    uint256 tokenId =  | 
| 491 | 
            +
                    uint256 tokenId = CHAIN_NFT.getNextTokenId();
         | 
| 372 492 | 
             
                    nftId = NftIdLib.toNftId(tokenId);
         | 
| 373 493 | 
             
                    info.nftId = nftId;
         | 
| 374 | 
            -
                    _info[nftId] = info;
         | 
| 375 494 |  | 
| 376 | 
            -
                     | 
| 377 | 
            -
             | 
| 378 | 
            -
                            revert ErrorRegistryContractAlreadyRegistered(objectAddress);
         | 
| 379 | 
            -
                        }
         | 
| 380 | 
            -
             | 
| 381 | 
            -
                        _nftIdByAddress[objectAddress] = nftId;
         | 
| 382 | 
            -
                    }
         | 
| 495 | 
            +
                    _info[nftId] = info;
         | 
| 496 | 
            +
                    _setAddressForNftId(nftId, objectAddress);
         | 
| 383 497 |  | 
| 384 498 | 
             
                    emit LogRegistration(nftId, parentNftId, objectType, isInterceptor, objectAddress, owner);
         | 
| 385 499 |  | 
| 386 500 | 
             
                    // calls nft receiver(1) and interceptor(2)
         | 
| 387 | 
            -
                    uint256 mintedTokenId =  | 
| 501 | 
            +
                    uint256 mintedTokenId = CHAIN_NFT.mint(
         | 
| 388 502 | 
             
                        owner,
         | 
| 389 503 | 
             
                        interceptorAddress,
         | 
| 390 504 | 
             
                        EMPTY_URI);
         | 
| @@ -433,111 +547,155 @@ contract Registry is | |
| 433 547 | 
             
                    private
         | 
| 434 548 | 
             
                    returns (NftId protocolNftId)
         | 
| 435 549 | 
             
                {
         | 
| 436 | 
            -
                    uint256 protocolId =  | 
| 550 | 
            +
                    uint256 protocolId = CHAIN_NFT.PROTOCOL_NFT_ID();
         | 
| 437 551 | 
             
                    protocolNftId = NftIdLib.toNftId(protocolId);
         | 
| 438 552 |  | 
| 439 | 
            -
                     | 
| 440 | 
            -
                         | 
| 441 | 
            -
             | 
| 442 | 
            -
             | 
| 443 | 
            -
             | 
| 444 | 
            -
             | 
| 445 | 
            -
             | 
| 446 | 
            -
             | 
| 447 | 
            -
             | 
| 448 | 
            -
             | 
| 449 | 
            -
                    _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
         | 
| 553 | 
            +
                    _registerForNft(
         | 
| 554 | 
            +
                        ObjectInfo({
         | 
| 555 | 
            +
                            nftId: protocolNftId,
         | 
| 556 | 
            +
                            parentNftId: NftIdLib.zero(),
         | 
| 557 | 
            +
                            objectType: PROTOCOL(),
         | 
| 558 | 
            +
                            isInterceptor: false, 
         | 
| 559 | 
            +
                            objectAddress: address(0),
         | 
| 560 | 
            +
                            initialOwner: NFT_LOCK_ADDRESS,
         | 
| 561 | 
            +
                            data: ""}),
         | 
| 562 | 
            +
                        true);
         | 
| 450 563 | 
             
                }
         | 
| 451 564 |  | 
| 452 | 
            -
                /// @dev registry | 
| 453 | 
            -
                /// might also register the global registry when not on mainnet
         | 
| 565 | 
            +
                /// @dev register this registry
         | 
| 454 566 | 
             
                function _registerRegistry() 
         | 
| 455 | 
            -
                     | 
| 567 | 
            +
                    internal 
         | 
| 568 | 
            +
                    virtual
         | 
| 456 569 | 
             
                    returns (NftId registryNftId)
         | 
| 457 570 | 
             
                {
         | 
| 458 | 
            -
                     | 
| 459 | 
            -
                    registryNftId =  | 
| 460 | 
            -
             | 
| 461 | 
            -
             | 
| 462 | 
            -
                     | 
| 463 | 
            -
             | 
| 464 | 
            -
                         | 
| 465 | 
            -
             | 
| 571 | 
            +
                    // initial assignment
         | 
| 572 | 
            +
                    registryNftId = GLOBAL_REGISTRY_NFT_ID;
         | 
| 573 | 
            +
             | 
| 574 | 
            +
                    // register global registry
         | 
| 575 | 
            +
                    _registerRegistryForNft(
         | 
| 576 | 
            +
                        1, // mainnet chain id
         | 
| 577 | 
            +
                        ObjectInfo({
         | 
| 578 | 
            +
                            nftId: GLOBAL_REGISTRY_NFT_ID,
         | 
| 579 | 
            +
                            parentNftId: PROTOCOL_NFT_ID,
         | 
| 580 | 
            +
                            objectType: REGISTRY(),
         | 
| 581 | 
            +
                            isInterceptor: false,
         | 
| 582 | 
            +
                            objectAddress: GLOBAL_REGISTRY_ADDRESS, 
         | 
| 583 | 
            +
                            initialOwner: NFT_LOCK_ADDRESS,
         | 
| 584 | 
            +
                            data: ""}),
         | 
| 585 | 
            +
                        block.chainid == 1);// update address lookup for global registry only on mainnet
         | 
| 586 | 
            +
             | 
| 587 | 
            +
                    // if not on mainnet: register this registry with global registry as parent
         | 
| 588 | 
            +
                    if (block.chainid != 1) {
         | 
| 589 | 
            +
             | 
| 590 | 
            +
                        // modify registry nft id to local registry when not on mainnet
         | 
| 591 | 
            +
                        registryNftId = NftIdLib.toNftId(
         | 
| 592 | 
            +
                            CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID));
         | 
| 593 | 
            +
             | 
| 594 | 
            +
                        _registerRegistryForNft(
         | 
| 595 | 
            +
                            block.chainid, 
         | 
| 596 | 
            +
                            ObjectInfo({
         | 
| 597 | 
            +
                                nftId: registryNftId,
         | 
| 598 | 
            +
                                parentNftId: GLOBAL_REGISTRY_NFT_ID,
         | 
| 599 | 
            +
                                objectType: REGISTRY(),
         | 
| 600 | 
            +
                                isInterceptor: false,
         | 
| 601 | 
            +
                                objectAddress: address(this),
         | 
| 602 | 
            +
                                initialOwner: NFT_LOCK_ADDRESS,
         | 
| 603 | 
            +
                                data: ""}),
         | 
| 604 | 
            +
                            true);
         | 
| 466 605 | 
             
                    }
         | 
| 467 | 
            -
             | 
| 468 | 
            -
             | 
| 469 | 
            -
             | 
| 606 | 
            +
                }
         | 
| 607 | 
            +
             | 
| 608 | 
            +
                /// @dev staking registration
         | 
| 609 | 
            +
                function _registerRegistryForNft(
         | 
| 610 | 
            +
                    uint256 chainId,
         | 
| 611 | 
            +
                    ObjectInfo memory info,
         | 
| 612 | 
            +
                    bool updateAddressLookup
         | 
| 613 | 
            +
                )
         | 
| 614 | 
            +
                    private
         | 
| 615 | 
            +
                {
         | 
| 616 | 
            +
                    if (!_registryNftIdByChainId[chainId].eqz()) {
         | 
| 617 | 
            +
                        revert ErrorRegistryChainRegistryAlreadyRegistered(info.nftId, chainId);
         | 
| 470 618 | 
             
                    }
         | 
| 471 619 |  | 
| 472 | 
            -
                     | 
| 473 | 
            -
             | 
| 474 | 
            -
             | 
| 475 | 
            -
                        objectType: REGISTRY(),
         | 
| 476 | 
            -
                        isInterceptor: false,
         | 
| 477 | 
            -
                        objectAddress: address(this), 
         | 
| 478 | 
            -
                        initialOwner: NFT_LOCK_ADDRESS,
         | 
| 479 | 
            -
                        data: "" 
         | 
| 480 | 
            -
                    });
         | 
| 620 | 
            +
                    // update registry lookup variables
         | 
| 621 | 
            +
                    _registryNftIdByChainId[chainId] = info.nftId;
         | 
| 622 | 
            +
                    _chainId.push(chainId);
         | 
| 481 623 |  | 
| 482 | 
            -
                     | 
| 483 | 
            -
                     | 
| 624 | 
            +
                    // register the registry info
         | 
| 625 | 
            +
                    _registerForNft(
         | 
| 626 | 
            +
                        info,
         | 
| 627 | 
            +
                        updateAddressLookup); 
         | 
| 484 628 | 
             
                }
         | 
| 485 629 |  | 
| 486 | 
            -
                /// @dev  | 
| 487 | 
            -
                function _registerGlobalRegistry() 
         | 
| 488 | 
            -
                    private
         | 
| 489 | 
            -
                {
         | 
| 490 | 
            -
                    uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
         | 
| 491 | 
            -
                    NftId globalRegistryNftId = NftIdLib.toNftId(globalRegistryId);
         | 
| 492 | 
            -
             | 
| 493 | 
            -
                    _info[globalRegistryNftId] = ObjectInfo({
         | 
| 494 | 
            -
                        nftId: globalRegistryNftId,
         | 
| 495 | 
            -
                        parentNftId: NftIdLib.toNftId(_chainNft.PROTOCOL_NFT_ID()),
         | 
| 496 | 
            -
                        objectType: REGISTRY(),
         | 
| 497 | 
            -
                        isInterceptor: false,
         | 
| 498 | 
            -
                        objectAddress: address(0),
         | 
| 499 | 
            -
                        initialOwner: NFT_LOCK_ADDRESS,
         | 
| 500 | 
            -
                        data: ""
         | 
| 501 | 
            -
                    });
         | 
| 502 | 
            -
             | 
| 503 | 
            -
                    _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
         | 
| 504 | 
            -
                }
         | 
| 505 | 
            -
                // depends on _registryNftId and _stakingAddress
         | 
| 630 | 
            +
                /// @dev staking registration
         | 
| 506 631 | 
             
                function _registerStaking()
         | 
| 507 632 | 
             
                    private
         | 
| 508 633 | 
             
                    returns (NftId stakingNftId)
         | 
| 509 634 | 
             
                {
         | 
| 510 635 | 
             
                    address stakingOwner = IRegisterable(_stakingAddress).getOwner();
         | 
| 511 | 
            -
                    uint256 stakingId =  | 
| 636 | 
            +
                    uint256 stakingId = CHAIN_NFT.calculateTokenId(STAKING_TOKEN_SEQUENCE_ID);
         | 
| 512 637 | 
             
                    stakingNftId = NftIdLib.toNftId(stakingId);
         | 
| 513 638 |  | 
| 514 | 
            -
                     | 
| 515 | 
            -
                         | 
| 516 | 
            -
             | 
| 517 | 
            -
             | 
| 518 | 
            -
             | 
| 519 | 
            -
             | 
| 520 | 
            -
             | 
| 521 | 
            -
             | 
| 522 | 
            -
             | 
| 639 | 
            +
                    _registerForNft( 
         | 
| 640 | 
            +
                        ObjectInfo({
         | 
| 641 | 
            +
                            nftId: stakingNftId,
         | 
| 642 | 
            +
                            parentNftId: REGISTRY_NFT_ID,
         | 
| 643 | 
            +
                            objectType: STAKING(),
         | 
| 644 | 
            +
                            isInterceptor: false,
         | 
| 645 | 
            +
                            objectAddress: _stakingAddress, 
         | 
| 646 | 
            +
                            initialOwner: stakingOwner,
         | 
| 647 | 
            +
                            data: ""}),
         | 
| 648 | 
            +
                        true); 
         | 
| 649 | 
            +
             | 
| 650 | 
            +
                    IStaking(_stakingAddress).initializeTokenHandler();
         | 
| 651 | 
            +
                }
         | 
| 652 | 
            +
             | 
| 653 | 
            +
                /// @dev Register the provided object info for the specified NFT ID.
         | 
| 654 | 
            +
                function _registerForNft(
         | 
| 655 | 
            +
                    ObjectInfo memory info, 
         | 
| 656 | 
            +
                    bool updateAddressLookup
         | 
| 657 | 
            +
                )
         | 
| 658 | 
            +
                    internal
         | 
| 659 | 
            +
                {
         | 
| 660 | 
            +
                    _info[info.nftId] = info;
         | 
| 661 | 
            +
             | 
| 662 | 
            +
                    if (updateAddressLookup) {
         | 
| 663 | 
            +
                        _setAddressForNftId(info.nftId, info.objectAddress);
         | 
| 664 | 
            +
                    }
         | 
| 523 665 |  | 
| 524 | 
            -
                     | 
| 525 | 
            -
                     | 
| 526 | 
            -
             | 
| 666 | 
            +
                    // calls nft receiver
         | 
| 667 | 
            +
                    CHAIN_NFT.mint(info.initialOwner, info.nftId.toInt());
         | 
| 668 | 
            +
                }
         | 
| 669 | 
            +
             | 
| 670 | 
            +
                function _setAddressForNftId(NftId nftId, address objectAddress)
         | 
| 671 | 
            +
                    internal
         | 
| 672 | 
            +
                {
         | 
| 673 | 
            +
                    if (objectAddress != address(0)) {
         | 
| 674 | 
            +
                        if (_nftIdByAddress[objectAddress].gtz()) { 
         | 
| 675 | 
            +
                            revert ErrorRegistryContractAlreadyRegistered(objectAddress);
         | 
| 676 | 
            +
                        }
         | 
| 677 | 
            +
             | 
| 678 | 
            +
                        _nftIdByAddress[objectAddress] = nftId;
         | 
| 679 | 
            +
                    }
         | 
| 680 | 
            +
                }
         | 
| 681 | 
            +
             | 
| 682 | 
            +
                function _getGlobalRegistryAddress(address globalRegistry) internal view returns (address) {
         | 
| 683 | 
            +
                    if (block.chainid == 1) {
         | 
| 684 | 
            +
                        return address(this);
         | 
| 685 | 
            +
                    } else {
         | 
| 686 | 
            +
                        return globalRegistry;
         | 
| 687 | 
            +
                    }
         | 
| 527 688 | 
             
                }
         | 
| 528 689 |  | 
| 529 690 | 
             
                /// @dev defines which object - parent types relations are allowed to register
         | 
| 530 | 
            -
                 | 
| 531 | 
            -
                //  | 
| 532 | 
            -
                // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
         | 
| 533 | 
            -
                // 3) DO NOT use REGISTRY as object type
         | 
| 534 | 
            -
                // 2) DO NOT use PROTOCOL and "ObjectTypeLib.zero"
         | 
| 691 | 
            +
                /// EACH object type MUST have only one parent type across ALL mappings
         | 
| 692 | 
            +
                // the only EXCEPTION is STAKE, can have any number of parent types
         | 
| 535 693 | 
             
                function _setupValidCoreTypesAndCombinations() 
         | 
| 536 | 
            -
                    private | 
| 694 | 
            +
                    private
         | 
| 537 695 | 
             
                {
         | 
| 696 | 
            +
                    _coreTypes[PROTOCOL()] = true;
         | 
| 538 697 | 
             
                    _coreTypes[REGISTRY()] = true;
         | 
| 539 698 | 
             
                    _coreTypes[SERVICE()] = true;
         | 
| 540 | 
            -
                    _coreTypes[TOKEN()] = true;
         | 
| 541 699 | 
             
                    _coreTypes[INSTANCE()] = true;
         | 
| 542 700 | 
             
                    _coreTypes[PRODUCT()] = true;
         | 
| 543 701 | 
             
                    _coreTypes[POOL()] = true;
         | 
| @@ -549,30 +707,20 @@ contract Registry is | |
| 549 707 | 
             
                    _coreTypes[STAKING()] = true;
         | 
| 550 708 | 
             
                    _coreTypes[STAKE()] = true;
         | 
| 551 709 |  | 
| 552 | 
            -
                     | 
| 553 | 
            -
                    if(registryId == _chainNft.GLOBAL_REGISTRY_ID()) {
         | 
| 554 | 
            -
                        // we are global registry
         | 
| 555 | 
            -
                        // object is registry from different chain
         | 
| 556 | 
            -
                        // parent is global registry, this contract
         | 
| 557 | 
            -
                        _coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
         | 
| 558 | 
            -
                        //_coreObjectCombinations[REGISTRY()][REGISTRY()] = true;
         | 
| 559 | 
            -
                    } else {
         | 
| 560 | 
            -
                        // we are not global registry
         | 
| 561 | 
            -
                        // object is local registry, this contract
         | 
| 562 | 
            -
                        // parent is global registry, object with 0 address or registry from mainnet???
         | 
| 563 | 
            -
                    }
         | 
| 564 | 
            -
                    _coreContractCombinations[STAKING()][REGISTRY()] = true; // only for chain staking contract
         | 
| 565 | 
            -
                    _coreContractCombinations[TOKEN()][REGISTRY()] = true;
         | 
| 566 | 
            -
                    //_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
         | 
| 710 | 
            +
                    // types combinations allowed to use with register() function ONLY
         | 
| 567 711 | 
             
                    _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
         | 
| 568 712 |  | 
| 713 | 
            +
                    // components with instance parent
         | 
| 569 714 | 
             
                    _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
         | 
| 570 | 
            -
                    _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
         | 
| 571 | 
            -
                    _coreContractCombinations[ORACLE()][INSTANCE()] = true;
         | 
| 572 | 
            -
                    _coreContractCombinations[POOL()][INSTANCE()] = true;
         | 
| 573 715 |  | 
| 574 | 
            -
                     | 
| 716 | 
            +
                    // components with product parent
         | 
| 717 | 
            +
                    _coreContractCombinations[DISTRIBUTION()][PRODUCT()] = true;
         | 
| 718 | 
            +
                    _coreContractCombinations[ORACLE()][PRODUCT()] = true;
         | 
| 719 | 
            +
                    _coreContractCombinations[POOL()][PRODUCT()] = true;
         | 
| 720 | 
            +
             | 
| 721 | 
            +
                    // objects with component parents
         | 
| 575 722 | 
             
                    _coreObjectCombinations[POLICY()][PRODUCT()] = true;
         | 
| 723 | 
            +
                    _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
         | 
| 576 724 | 
             
                    _coreObjectCombinations[BUNDLE()][POOL()] = true;
         | 
| 577 725 |  | 
| 578 726 | 
             
                    // staking
         |