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