@etherisc/gif-next 0.0.2-cbce707-667 → 0.0.2-cbfb727-329
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 +71 -14
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1376 -0
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +780 -0
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +1000 -0
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +840 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +454 -554
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +314 -178
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +452 -3054
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +612 -181
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -256
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +452 -364
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +285 -121
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → base/Cloneable.sol/Cloneable.json} +91 -2
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +44 -14
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +38 -13
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- 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/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IProductService.sol/IProductService.json → pool/IBundleService.sol/IBundleService.json} +338 -354
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1095 -0
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
- package/artifacts/contracts/pool/Pool.sol/Pool.json +1407 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1376 -0
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → product/IApplicationService.sol/IApplicationService.json} +231 -204
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +743 -0
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +651 -0
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IPricingService.sol/IPricingService.json} +237 -288
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +861 -0
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/IDistributionService.sol/IDistributionService.json → product/IProductService.sol/IProductService.json} +162 -166
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
- package/artifacts/contracts/product/Product.sol/Product.json +1198 -0
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +227 -224
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +231 -226
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +245 -334
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +228 -315
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +283 -151
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +132 -57
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/shared/Component.sol/Component.json +873 -0
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/shared/{RegisterableUpgradable.sol/RegisterableUpgradable.json → ComponentService.sol/ComponentService.json} +311 -122
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +636 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -34
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +84 -178
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +109 -29
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +285 -65
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -53
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +185 -165
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → staking/IStakingService.sol/IStakingService.json} +224 -187
- package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +628 -0
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -0
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +39 -8
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
- package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
- package/contracts/distribution/Distribution.sol +285 -0
- package/contracts/distribution/DistributionService.sol +348 -0
- package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +15 -17
- package/contracts/distribution/IDistributionComponent.sol +71 -0
- package/contracts/distribution/IDistributionService.sol +87 -0
- package/contracts/instance/BundleManager.sol +126 -0
- package/contracts/instance/IInstance.sol +62 -24
- package/contracts/instance/IInstanceService.sol +56 -13
- package/contracts/instance/Instance.sol +151 -365
- package/contracts/instance/InstanceAccessManager.sol +431 -178
- package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
- package/contracts/instance/InstanceReader.sol +109 -47
- package/contracts/instance/InstanceService.sol +250 -124
- package/contracts/instance/InstanceServiceManager.sol +11 -13
- package/contracts/instance/InstanceStore.sol +211 -0
- package/contracts/instance/base/Cloneable.sol +51 -0
- package/contracts/instance/base/IKeyValueStore.sol +5 -5
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +22 -42
- package/contracts/instance/base/Lifecycle.sol +27 -7
- package/contracts/instance/base/ObjectManager.sol +82 -0
- package/contracts/instance/module/IAccess.sol +37 -21
- package/contracts/instance/module/IBundle.sol +11 -8
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +7 -4
- package/contracts/instance/module/IPolicy.sol +47 -15
- package/contracts/instance/module/IRisk.sol +1 -1
- package/contracts/instance/module/ISetup.sol +11 -22
- package/contracts/instance/module/ITreasury.sol +2 -2
- package/contracts/pool/BundleService.sol +382 -0
- package/contracts/pool/BundleServiceManager.sol +51 -0
- package/contracts/pool/IBundleService.sol +118 -0
- package/contracts/pool/IPoolComponent.sol +114 -0
- package/contracts/pool/IPoolService.sol +114 -0
- package/contracts/pool/Pool.sol +302 -0
- package/contracts/pool/PoolService.sol +403 -0
- package/contracts/{instance/service → pool}/PoolServiceManager.sol +15 -17
- package/contracts/product/ApplicationService.sol +186 -0
- package/contracts/product/ApplicationServiceManager.sol +35 -0
- package/contracts/product/ClaimService.sol +437 -0
- package/contracts/product/ClaimServiceManager.sol +35 -0
- package/contracts/product/IApplicationService.sol +62 -0
- package/contracts/product/IClaimService.sol +90 -0
- package/contracts/product/IPolicyService.sol +80 -0
- package/contracts/product/IPricingService.sol +37 -0
- package/contracts/product/IProductComponent.sol +41 -0
- package/contracts/product/IProductService.sol +40 -0
- package/contracts/product/PolicyService.sol +376 -0
- package/contracts/product/PolicyServiceManager.sol +54 -0
- package/contracts/product/PricingService.sol +275 -0
- package/contracts/product/PricingServiceManager.sol +51 -0
- package/contracts/product/Product.sol +375 -0
- package/contracts/product/ProductService.sol +210 -0
- package/contracts/product/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +9 -1
- package/contracts/registry/IRegistry.sol +43 -36
- package/contracts/registry/IRegistryService.sol +49 -16
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +234 -256
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +126 -240
- package/contracts/registry/RegistryServiceManager.sol +21 -41
- package/contracts/registry/ReleaseManager.sol +324 -0
- package/contracts/registry/TokenRegistry.sol +22 -17
- package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/shared/Component.sol +271 -0
- package/contracts/shared/ComponentService.sol +150 -0
- package/contracts/shared/ERC165.sol +14 -12
- package/contracts/shared/IComponent.sol +90 -0
- package/contracts/shared/INftOwnable.sol +12 -11
- package/contracts/shared/IPolicyHolder.sol +40 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +11 -0
- package/contracts/shared/IService.sol +7 -4
- package/contracts/shared/IVersionable.sol +5 -48
- package/contracts/shared/NftOwnable.sol +65 -83
- package/contracts/shared/PolicyHolder.sol +94 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +26 -41
- package/contracts/shared/RegistryLinked.sol +43 -0
- package/contracts/shared/Service.sol +42 -24
- package/contracts/shared/TokenHandler.sol +14 -6
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/staking/IStakingService.sol +102 -0
- package/contracts/staking/StakeingServiceManager.sol +37 -0
- package/contracts/staking/StakingService.sol +166 -0
- package/contracts/type/Amount.sol +109 -0
- package/contracts/{types → type}/Blocknumber.sol +1 -0
- package/contracts/type/ClaimId.sol +75 -0
- package/contracts/{types → type}/DistributorType.sol +2 -2
- package/contracts/{types → type}/Fee.sol +17 -8
- package/contracts/{types → type}/NftId.sol +8 -0
- package/contracts/type/NftIdSet.sol +62 -0
- package/contracts/{types → type}/ObjectType.sol +16 -7
- package/contracts/type/PayoutId.sol +82 -0
- package/contracts/{types → type}/Referral.sol +4 -0
- package/contracts/{types → type}/RoleId.sol +26 -18
- package/contracts/type/Seconds.sol +54 -0
- package/contracts/{types → type}/StateId.sol +7 -2
- package/contracts/{types → type}/Timestamp.sol +18 -13
- package/contracts/{types → type}/UFixed.sol +1 -0
- package/contracts/{types → type}/Version.sol +1 -0
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -670
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -204
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -249
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -157
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
- package/artifacts/contracts/components/Pool.sol/Pool.json +0 -873
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
- package/artifacts/contracts/components/Product.sol/Product.json +0 -775
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -657
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -436
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -796
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -448
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -305
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
- package/artifacts/contracts/test/TestService.sol/TestService.json +0 -600
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -286
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
- package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +0 -10
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -123
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
- package/contracts/components/BaseComponent.sol +0 -91
- package/contracts/components/Distribution.sol +0 -166
- package/contracts/components/IBaseComponent.sol +0 -25
- package/contracts/components/IDistributionComponent.sol +0 -46
- package/contracts/components/IPoolComponent.sol +0 -62
- package/contracts/components/IProductComponent.sol +0 -35
- package/contracts/components/Pool.sol +0 -247
- package/contracts/components/Product.sol +0 -297
- package/contracts/experiment/cloning/Cloner.sol +0 -47
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
- package/contracts/instance/AccessManagedSimple.sol +0 -115
- package/contracts/instance/AccessManagerSimple.sol +0 -692
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/base/ComponentServiceBase.sol +0 -41
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/service/ComponentOwnerService.sol +0 -317
- package/contracts/instance/service/DistributionService.sol +0 -105
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/instance/service/IDistributionService.sol +0 -12
- package/contracts/instance/service/IPoolService.sol +0 -37
- package/contracts/instance/service/IProductService.sol +0 -107
- package/contracts/instance/service/PoolService.sol +0 -211
- package/contracts/shared/ContractDeployerLib.sol +0 -72
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
- package/contracts/test/TestFee.sol +0 -25
- package/contracts/test/TestRegisterable.sol +0 -18
- package/contracts/test/TestRoleId.sol +0 -14
- package/contracts/test/TestService.sol +0 -24
- package/contracts/test/TestToken.sol +0 -26
- package/contracts/test/TestVersion.sol +0 -44
- package/contracts/test/TestVersionable.sol +0 -17
- package/contracts/test/Usdc.sol +0 -26
- package/contracts/types/ChainId.sol +0 -38
- package/contracts/types/NftIdSet.sol +0 -60
- package/contracts/types/NumberId.sol +0 -52
- /package/contracts/{types → type}/AddressSet.sol +0 -0
- /package/contracts/{types → type}/Key32.sol +0 -0
- /package/contracts/{types → type}/RiskId.sol +0 -0
@@ -0,0 +1,324 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
5
|
+
|
6
|
+
import {NftId} from "../type/NftId.sol";
|
7
|
+
import {RoleId} from "../type/RoleId.sol";
|
8
|
+
import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../type/ObjectType.sol";
|
9
|
+
import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
|
10
|
+
import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
|
11
|
+
|
12
|
+
import {IService} from "../shared/IService.sol";
|
13
|
+
|
14
|
+
import {IRegistry} from "./IRegistry.sol";
|
15
|
+
import {Registry} from "./Registry.sol";
|
16
|
+
import {IRegistryService} from "./IRegistryService.sol";
|
17
|
+
import {RegistryAccessManager} from "./RegistryAccessManager.sol";
|
18
|
+
|
19
|
+
|
20
|
+
contract ReleaseManager is AccessManaged
|
21
|
+
{
|
22
|
+
using ObjectTypeLib for ObjectType;
|
23
|
+
|
24
|
+
event LogReleaseCreation(VersionPart version);
|
25
|
+
event LogReleaseActivation(VersionPart version);
|
26
|
+
|
27
|
+
// createNextRelease
|
28
|
+
error NotRegistryService();
|
29
|
+
error UnexpectedServiceAuthority(address expected, address found);
|
30
|
+
|
31
|
+
// registerService
|
32
|
+
error NotService();
|
33
|
+
|
34
|
+
// activateNextRelease
|
35
|
+
error ReleaseNotCreated();
|
36
|
+
error ReleaseRegistrationNotFinished();
|
37
|
+
|
38
|
+
// _getAndVerifyContractInfo
|
39
|
+
error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
|
40
|
+
error NotRegisterableOwner(address notOwner);
|
41
|
+
error SelfRegistration();
|
42
|
+
error RegisterableOwnerIsRegistered();
|
43
|
+
|
44
|
+
// _verifyService
|
45
|
+
error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
|
46
|
+
error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
|
47
|
+
|
48
|
+
// _verifyAndStoreConfig
|
49
|
+
error ConfigMissing();
|
50
|
+
error ConfigServiceDomainInvalid(uint configArrayIndex, ObjectType domain);
|
51
|
+
error ConfigSelectorZero(uint configArrayIndex);
|
52
|
+
error SelectorAlreadyExists(VersionPart releaseVersion, ObjectType serviceDomain);
|
53
|
+
|
54
|
+
|
55
|
+
RegistryAccessManager private immutable _accessManager;
|
56
|
+
IRegistry private immutable _registry;
|
57
|
+
|
58
|
+
VersionPart immutable _initial;// first active major version
|
59
|
+
VersionPart _latest;// latest active major version
|
60
|
+
VersionPart _next;// major version to create and activate
|
61
|
+
|
62
|
+
mapping(VersionPart majorVersion => IRegistry.ReleaseInfo info) _release;
|
63
|
+
|
64
|
+
mapping(VersionPart majorVersion => mapping(ObjectType serviceDomain => bytes4[])) _selectors; // registry service function selector assigned to domain
|
65
|
+
|
66
|
+
uint _awaitingRegistration; // "services left to register" counter
|
67
|
+
|
68
|
+
mapping(address registryService => bool isActive) _active;
|
69
|
+
|
70
|
+
mapping(VersionPart majorVersion => bool isValid) _valid; // TODO refactor to use _active only
|
71
|
+
|
72
|
+
constructor(
|
73
|
+
RegistryAccessManager accessManager,
|
74
|
+
VersionPart initialVersion)
|
75
|
+
AccessManaged(accessManager.authority())
|
76
|
+
{
|
77
|
+
require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
|
78
|
+
|
79
|
+
_accessManager = accessManager;
|
80
|
+
|
81
|
+
_initial = initialVersion;
|
82
|
+
_next = initialVersion;
|
83
|
+
|
84
|
+
_registry = new Registry();
|
85
|
+
}
|
86
|
+
|
87
|
+
/// @dev skips previous release if was not activated
|
88
|
+
function createNextRelease()
|
89
|
+
external
|
90
|
+
restricted // GIF_ADMIN_ROLE
|
91
|
+
{
|
92
|
+
// allow to register new registry service for next version
|
93
|
+
VersionPartLib.toVersionPart(_next.toInt() + 1);
|
94
|
+
// disallow registration of regular services for next version while registry service is not registered
|
95
|
+
_awaitingRegistration = 0;
|
96
|
+
|
97
|
+
emit LogReleaseCreation(_next);
|
98
|
+
}
|
99
|
+
|
100
|
+
function activateNextRelease()
|
101
|
+
external
|
102
|
+
restricted // GIF_ADMIN_ROLE
|
103
|
+
{
|
104
|
+
VersionPart version = _next;
|
105
|
+
address service = _registry.getServiceAddress(REGISTRY(), version);
|
106
|
+
|
107
|
+
// release was created
|
108
|
+
if(service == address(0)) {
|
109
|
+
revert ReleaseNotCreated();
|
110
|
+
}
|
111
|
+
|
112
|
+
// release fully deployed
|
113
|
+
if(_awaitingRegistration > 0) {
|
114
|
+
revert ReleaseRegistrationNotFinished();
|
115
|
+
}
|
116
|
+
|
117
|
+
//setTargetClosed(service, false);
|
118
|
+
|
119
|
+
_latest = version;
|
120
|
+
|
121
|
+
_active[service] = true;
|
122
|
+
_valid[version] = true;
|
123
|
+
|
124
|
+
emit LogReleaseActivation(version);
|
125
|
+
}
|
126
|
+
|
127
|
+
// TODO deploy proxy and initialize with given implementation instead of using given proxy?
|
128
|
+
// IMPORTANT: MUST never be possible to create with access/release manager, token registry
|
129
|
+
// callable once per release after release creation, can not register regular services while registry service is not registered
|
130
|
+
function registerRegistryService(IRegistryService service)
|
131
|
+
external
|
132
|
+
restricted // GIF_MANAGER_ROLE
|
133
|
+
returns(NftId nftId)
|
134
|
+
{
|
135
|
+
if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
|
136
|
+
revert NotRegistryService();
|
137
|
+
}
|
138
|
+
|
139
|
+
// TODO unreliable! MUST guarantee the same authority -> how?
|
140
|
+
address serviceAuthority = service.authority();
|
141
|
+
if(serviceAuthority != authority()) {
|
142
|
+
revert UnexpectedServiceAuthority(
|
143
|
+
authority(),
|
144
|
+
serviceAuthority);
|
145
|
+
}
|
146
|
+
|
147
|
+
IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
148
|
+
|
149
|
+
VersionPart majorVersion = _next;
|
150
|
+
ObjectType domain = REGISTRY();
|
151
|
+
_verifyService(service, majorVersion, domain);
|
152
|
+
_createRelease(service.getFunctionConfigs());
|
153
|
+
|
154
|
+
nftId = _registry.registerService(info, majorVersion, domain);
|
155
|
+
|
156
|
+
// external call
|
157
|
+
service.linkToRegisteredNftId();
|
158
|
+
}
|
159
|
+
|
160
|
+
// TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
|
161
|
+
// TODO removing service from release? -> set _active to false forever, but keep all other records?
|
162
|
+
function registerService(IService service)
|
163
|
+
external
|
164
|
+
restricted // GIF_MANAGER_ROLE
|
165
|
+
returns(NftId nftId)
|
166
|
+
{
|
167
|
+
if(!service.supportsInterface(type(IService).interfaceId)) {
|
168
|
+
revert NotService();
|
169
|
+
}
|
170
|
+
|
171
|
+
IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
172
|
+
VersionPart majorVersion = getNextVersion();
|
173
|
+
ObjectType domain = _release[majorVersion].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
|
174
|
+
_verifyService(service, majorVersion, domain);
|
175
|
+
|
176
|
+
// setup and grant unique role if service does registrations
|
177
|
+
bytes4[] memory selectors = _selectors[majorVersion][domain];
|
178
|
+
address registryService = _registry.getServiceAddress(REGISTRY(), majorVersion);
|
179
|
+
if(selectors.length > 0) {
|
180
|
+
_accessManager.setAndGrantUniqueRole(
|
181
|
+
address(service),
|
182
|
+
registryService,
|
183
|
+
selectors);
|
184
|
+
}
|
185
|
+
|
186
|
+
_awaitingRegistration--;
|
187
|
+
|
188
|
+
nftId = _registry.registerService(info, majorVersion, domain);
|
189
|
+
|
190
|
+
// external call
|
191
|
+
service.linkToRegisteredNftId();
|
192
|
+
}
|
193
|
+
|
194
|
+
//--- view functions ----------------------------------------------------//
|
195
|
+
|
196
|
+
function isActiveRegistryService(address service) external view returns(bool)
|
197
|
+
{
|
198
|
+
return _active[service];
|
199
|
+
}
|
200
|
+
|
201
|
+
function isValidRelease(VersionPart version) external view returns(bool)
|
202
|
+
{
|
203
|
+
return _valid[version];
|
204
|
+
}
|
205
|
+
|
206
|
+
function getRegistry() external view returns(address)
|
207
|
+
{
|
208
|
+
return (address(_registry));
|
209
|
+
}
|
210
|
+
|
211
|
+
function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
|
212
|
+
{
|
213
|
+
return _release[version];
|
214
|
+
}
|
215
|
+
|
216
|
+
function getNextVersion() public view returns(VersionPart)
|
217
|
+
{
|
218
|
+
return _next;
|
219
|
+
}
|
220
|
+
|
221
|
+
function getLatestVersion() external view returns(VersionPart) {
|
222
|
+
return _latest;
|
223
|
+
}
|
224
|
+
|
225
|
+
function getInitialVersion() external view returns(VersionPart) {
|
226
|
+
return _initial;
|
227
|
+
}
|
228
|
+
|
229
|
+
//--- private functions ----------------------------------------------------//
|
230
|
+
|
231
|
+
function _getAndVerifyContractInfo(
|
232
|
+
IService service,
|
233
|
+
ObjectType expectedType,
|
234
|
+
address expectedOwner // assume always valid, can not be 0
|
235
|
+
)
|
236
|
+
internal
|
237
|
+
// view
|
238
|
+
returns(
|
239
|
+
IRegistry.ObjectInfo memory info
|
240
|
+
)
|
241
|
+
{
|
242
|
+
info = service.getInitialInfo();
|
243
|
+
info.objectAddress = address(service);
|
244
|
+
info.isInterceptor = false; // service is never interceptor, at least now
|
245
|
+
|
246
|
+
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
247
|
+
revert UnexpectedRegisterableType(expectedType, info.objectType);
|
248
|
+
}
|
249
|
+
|
250
|
+
address owner = info.initialOwner;
|
251
|
+
|
252
|
+
if(owner != expectedOwner) { // registerable owner protection
|
253
|
+
revert NotRegisterableOwner(expectedOwner);
|
254
|
+
}
|
255
|
+
|
256
|
+
if(owner == address(service)) {
|
257
|
+
revert SelfRegistration();
|
258
|
+
}
|
259
|
+
|
260
|
+
if(_registry.isRegistered(owner)) {
|
261
|
+
revert RegisterableOwnerIsRegistered();
|
262
|
+
}
|
263
|
+
}
|
264
|
+
|
265
|
+
function _verifyService(
|
266
|
+
IService service,
|
267
|
+
VersionPart expectedVersion,
|
268
|
+
ObjectType expectedDomain
|
269
|
+
)
|
270
|
+
internal
|
271
|
+
view
|
272
|
+
returns(ObjectType)
|
273
|
+
{
|
274
|
+
Version version = service.getVersion();
|
275
|
+
VersionPart majorVersion = version.toMajorPart();
|
276
|
+
if(majorVersion != expectedVersion) {
|
277
|
+
revert UnexpectedServiceVersion(expectedVersion, majorVersion);
|
278
|
+
}
|
279
|
+
|
280
|
+
if(service.getDomain() != expectedDomain) {
|
281
|
+
revert UnexpectedServiceDomain(expectedDomain, service.getDomain());
|
282
|
+
}
|
283
|
+
|
284
|
+
return expectedDomain;
|
285
|
+
}
|
286
|
+
|
287
|
+
// TODO check if registry supports types specified in the config array
|
288
|
+
function _createRelease(IRegistryService.FunctionConfig[] memory config)
|
289
|
+
internal
|
290
|
+
{
|
291
|
+
VersionPart version = getNextVersion();
|
292
|
+
|
293
|
+
if(config.length == 0) {
|
294
|
+
revert ConfigMissing();
|
295
|
+
}
|
296
|
+
// always in release
|
297
|
+
_release[version].domains.push(REGISTRY());
|
298
|
+
for(uint idx = 0; idx < config.length; idx++)
|
299
|
+
{
|
300
|
+
ObjectType domain = config[idx].serviceDomain;
|
301
|
+
// not "registry service" / zero domain
|
302
|
+
if(
|
303
|
+
domain == REGISTRY() ||
|
304
|
+
domain.eqz()
|
305
|
+
) { revert ConfigServiceDomainInvalid(idx, domain); }
|
306
|
+
|
307
|
+
bytes4[] memory selectors = config[idx].selectors;
|
308
|
+
|
309
|
+
// TODO can be zero -> e.g. duplicate domain, first with zero selector, second with non zero selector -> need to check _release[version].domains.contains(domain) instead
|
310
|
+
// no overwrite
|
311
|
+
if(_selectors[version][domain].length > 0) {
|
312
|
+
revert SelectorAlreadyExists(version, domain);
|
313
|
+
}
|
314
|
+
|
315
|
+
_selectors[version][domain] = selectors;
|
316
|
+
_release[version].domains.push(domain);
|
317
|
+
}
|
318
|
+
// TODO set when activated?
|
319
|
+
_release[version].createdAt = TimestampLib.blockTimestamp();
|
320
|
+
//_release[version].updatedAt = TimestampLib.blockTimestamp();
|
321
|
+
|
322
|
+
_awaitingRegistration = config.length;
|
323
|
+
}
|
324
|
+
}
|
@@ -6,16 +6,14 @@ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165C
|
|
6
6
|
|
7
7
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
8
8
|
import {IRegistry} from "./IRegistry.sol";
|
9
|
-
import {
|
9
|
+
import {VersionPart} from "../type/Version.sol";
|
10
|
+
import {REGISTRY} from "../type/ObjectType.sol";
|
10
11
|
import {NftOwnable} from "../shared/NftOwnable.sol";
|
11
12
|
|
12
13
|
/// @title contract to register token per GIF major release.
|
13
14
|
contract TokenRegistry is
|
14
15
|
NftOwnable
|
15
16
|
{
|
16
|
-
|
17
|
-
string public constant REGISTRY_SERVICE_NAME = "RegistryService";
|
18
|
-
|
19
17
|
event LogRegistered(address token, string symbol, uint256 decimals);
|
20
18
|
event LogTokenStateSet(address token, VersionPart majorVersion, bool active);
|
21
19
|
|
@@ -28,20 +26,32 @@ contract TokenRegistry is
|
|
28
26
|
mapping(address token => bool registered) internal _registered;
|
29
27
|
mapping(address token => mapping(VersionPart majorVersion => bool isActive)) internal _active;
|
30
28
|
|
31
|
-
constructor(
|
32
|
-
|
33
|
-
|
29
|
+
constructor(
|
30
|
+
address registry
|
31
|
+
)
|
32
|
+
{
|
33
|
+
initialize(registry);
|
34
|
+
}
|
35
|
+
|
36
|
+
function initialize(address registry)
|
37
|
+
public
|
38
|
+
initializer()
|
39
|
+
{
|
40
|
+
initializeNftOwnable(msg.sender, registry);
|
41
|
+
}
|
34
42
|
|
35
43
|
|
36
44
|
/// @dev link ownership of token registry to nft owner of registry service
|
45
|
+
// TODO latter registry service will get new release, new address, new nft, TokenRegistry will not catch that -> use AccessManaged only for services
|
37
46
|
function linkToNftOwnable(address registryAddress)
|
38
47
|
external
|
39
48
|
onlyOwner
|
40
49
|
{
|
41
50
|
IRegistry registry = IRegistry(registryAddress);
|
42
|
-
|
51
|
+
// TODO use _latest instead of _initial -> but _latest is 0 before first release activation
|
52
|
+
address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getNextVersion());
|
43
53
|
|
44
|
-
_linkToNftOwnable(
|
54
|
+
_linkToNftOwnable(registryServiceAddress);
|
45
55
|
}
|
46
56
|
|
47
57
|
/// @dev token state is informative, registry have no clue about used tokens
|
@@ -59,7 +69,7 @@ contract TokenRegistry is
|
|
59
69
|
// verify valid major version
|
60
70
|
// ensure major version increments is one
|
61
71
|
uint256 version = majorVersion.toInt();
|
62
|
-
if (
|
72
|
+
if (!getRegistry().isValidRelease(majorVersion)) {
|
63
73
|
revert TokenMajorVersionInvalid(majorVersion);
|
64
74
|
}
|
65
75
|
|
@@ -80,7 +90,7 @@ contract TokenRegistry is
|
|
80
90
|
return _registered[token];
|
81
91
|
}
|
82
92
|
|
83
|
-
|
93
|
+
function isActive(address token, VersionPart majorVersion) external view returns (bool) {
|
84
94
|
return _active[token][majorVersion];
|
85
95
|
}
|
86
96
|
|
@@ -92,12 +102,7 @@ contract TokenRegistry is
|
|
92
102
|
revert NotContract(token);
|
93
103
|
}
|
94
104
|
|
95
|
-
// MUST
|
96
|
-
if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
|
97
|
-
revert NotToken(token);
|
98
|
-
}
|
99
|
-
|
100
|
-
// MUST have decimals > 0
|
105
|
+
// MUST have decimals > 0 (indicator that this is in fact an erc20 token)
|
101
106
|
IERC20Metadata erc20 = IERC20Metadata(token);
|
102
107
|
if(erc20.decimals() == 0) {
|
103
108
|
revert TokenDecimalsZero();
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
|
5
|
+
|
6
|
+
|
7
|
+
contract AccessManagerUpgradeableInitializeable is AccessManagerUpgradeable {
|
8
|
+
|
9
|
+
function initialize(address initialAdmin) initializer public {
|
10
|
+
__AccessManager_init(initialAdmin);
|
11
|
+
}
|
12
|
+
|
13
|
+
}
|
@@ -0,0 +1,271 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
|
5
|
+
import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
|
6
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
7
|
+
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
8
|
+
|
9
|
+
import {IComponent} from "./IComponent.sol";
|
10
|
+
import {IComponents} from "../instance/module/IComponents.sol";
|
11
|
+
import {IInstanceService} from "../instance/IInstanceService.sol";
|
12
|
+
import {IInstance} from "../instance/IInstance.sol";
|
13
|
+
import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
|
14
|
+
import {InstanceReader} from "../instance/InstanceReader.sol";
|
15
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
16
|
+
import {NftId} from "../type/NftId.sol";
|
17
|
+
import {ObjectType, INSTANCE, PRODUCT} from "../type/ObjectType.sol";
|
18
|
+
import {VersionPart} from "../type/Version.sol";
|
19
|
+
import {Registerable} from "../shared/Registerable.sol";
|
20
|
+
import {RoleId, RoleIdLib} from "../type/RoleId.sol";
|
21
|
+
import {IAccess} from "../instance/module/IAccess.sol";
|
22
|
+
import {TokenHandler} from "../shared/TokenHandler.sol";
|
23
|
+
import {VersionPart} from "../type/Version.sol";
|
24
|
+
|
25
|
+
// TODO discuss to inherit from oz accessmanaged
|
26
|
+
// then add (Distribution|Pool|Product)Upradeable that also intherit from Versionable
|
27
|
+
// same pattern as for Service which is also upgradeable
|
28
|
+
abstract contract Component is
|
29
|
+
Registerable,
|
30
|
+
IComponent,
|
31
|
+
AccessManagedUpgradeable
|
32
|
+
{
|
33
|
+
// keccak256(abi.encode(uint256(keccak256("gif-next.contracts.component.Component.sol")) - 1)) & ~bytes32(uint256(0xff));
|
34
|
+
bytes32 public constant COMPONENT_LOCATION_V1 = 0xffe8d4462baed26a47154f4b8f6db497d2f772496965791d25bd456e342b7f00;
|
35
|
+
|
36
|
+
struct ComponentStorage {
|
37
|
+
string _name; // unique (per instance) component name
|
38
|
+
IERC20Metadata _token; // token for this component
|
39
|
+
IInstance _instance; // instance for this component
|
40
|
+
address _wallet; // wallet for this component (default = component contract itself)
|
41
|
+
InstanceReader _instanceReader; // instance reader for this component
|
42
|
+
bool _isNftInterceptor; // declares if component is involved in nft transfers
|
43
|
+
NftId _productNftId; // only relevant for components that are linked to a aproduct
|
44
|
+
}
|
45
|
+
|
46
|
+
function _getComponentStorage() private pure returns (ComponentStorage storage $) {
|
47
|
+
assembly {
|
48
|
+
$.slot := COMPONENT_LOCATION_V1
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
modifier onlyChainNft() {
|
53
|
+
if(msg.sender != getRegistry().getChainNftAddress()) {
|
54
|
+
revert ErrorComponentNotChainNft(msg.sender);
|
55
|
+
}
|
56
|
+
_;
|
57
|
+
}
|
58
|
+
|
59
|
+
function initializeComponent(
|
60
|
+
address registry,
|
61
|
+
NftId instanceNftId,
|
62
|
+
string memory name,
|
63
|
+
address token,
|
64
|
+
ObjectType componentType,
|
65
|
+
bool isInterceptor,
|
66
|
+
address initialOwner,
|
67
|
+
bytes memory registryData // writeonly data that will saved in the object info record of the registry
|
68
|
+
)
|
69
|
+
public
|
70
|
+
virtual
|
71
|
+
onlyInitializing()
|
72
|
+
{
|
73
|
+
initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, registryData);
|
74
|
+
|
75
|
+
// set and check linked instance
|
76
|
+
ComponentStorage storage $ = _getComponentStorage();
|
77
|
+
$._instance = IInstance(
|
78
|
+
getRegistry().getObjectInfo(instanceNftId).objectAddress);
|
79
|
+
|
80
|
+
if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
|
81
|
+
revert ErrorComponentNotInstance(instanceNftId);
|
82
|
+
}
|
83
|
+
|
84
|
+
// initialize AccessManagedUpgradeable
|
85
|
+
__AccessManaged_init($._instance.authority());
|
86
|
+
|
87
|
+
// set component state
|
88
|
+
$._name = name;
|
89
|
+
$._isNftInterceptor = isInterceptor;
|
90
|
+
$._instanceReader = $._instance.getInstanceReader();
|
91
|
+
$._wallet = address(this);
|
92
|
+
$._token = IERC20Metadata(token);
|
93
|
+
|
94
|
+
registerInterface(type(IAccessManaged).interfaceId);
|
95
|
+
registerInterface(type(IComponent).interfaceId);
|
96
|
+
}
|
97
|
+
|
98
|
+
function lock() external onlyOwner {
|
99
|
+
IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
|
100
|
+
}
|
101
|
+
|
102
|
+
function unlock() external onlyOwner {
|
103
|
+
IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
|
104
|
+
}
|
105
|
+
|
106
|
+
function approveTokenHandler(uint256 spendingLimitAmount) external onlyOwner {
|
107
|
+
IComponents.ComponentInfo memory info = getComponentInfo();
|
108
|
+
|
109
|
+
if(info.wallet != address(this)) {
|
110
|
+
revert ErrorComponentWalletNotComponent();
|
111
|
+
}
|
112
|
+
|
113
|
+
info.token.approve(
|
114
|
+
address(info.tokenHandler),
|
115
|
+
spendingLimitAmount);
|
116
|
+
|
117
|
+
emit LogComponentTokenHandlerApproved(spendingLimitAmount);
|
118
|
+
}
|
119
|
+
|
120
|
+
function setWallet(address newWallet)
|
121
|
+
external
|
122
|
+
override
|
123
|
+
onlyOwner
|
124
|
+
{
|
125
|
+
ComponentStorage storage $ = _getComponentStorage();
|
126
|
+
|
127
|
+
address currentWallet = $._wallet;
|
128
|
+
uint256 currentBalance = $._token.balanceOf(currentWallet);
|
129
|
+
|
130
|
+
// checks
|
131
|
+
if (newWallet == address(0)) {
|
132
|
+
revert ErrorComponentWalletAddressZero();
|
133
|
+
}
|
134
|
+
|
135
|
+
if (newWallet == currentWallet) {
|
136
|
+
revert ErrorComponentWalletAddressIsSameAsCurrent();
|
137
|
+
}
|
138
|
+
|
139
|
+
if (currentBalance > 0) {
|
140
|
+
if (currentWallet == address(this)) {
|
141
|
+
// move tokens from component smart contract to external wallet
|
142
|
+
} else {
|
143
|
+
// move tokens from external wallet to component smart contract or another external wallet
|
144
|
+
uint256 allowance = $._token.allowance(currentWallet, address(this));
|
145
|
+
if (allowance < currentBalance) {
|
146
|
+
revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
|
147
|
+
}
|
148
|
+
}
|
149
|
+
}
|
150
|
+
|
151
|
+
// effects
|
152
|
+
$._wallet = newWallet;
|
153
|
+
emit LogComponentWalletAddressChanged(currentWallet, newWallet);
|
154
|
+
|
155
|
+
// interactions
|
156
|
+
if (currentBalance > 0) {
|
157
|
+
// transfer tokens from current wallet to new wallet
|
158
|
+
if (currentWallet == address(this)) {
|
159
|
+
// transferFrom requires self allowance too
|
160
|
+
$._token.approve(address(this), currentBalance);
|
161
|
+
}
|
162
|
+
|
163
|
+
SafeERC20.safeTransferFrom($._token, currentWallet, newWallet, currentBalance);
|
164
|
+
emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
function setProductNftId(NftId productNftId)
|
169
|
+
external
|
170
|
+
override
|
171
|
+
{
|
172
|
+
ComponentStorage storage $ = _getComponentStorage();
|
173
|
+
|
174
|
+
// verify caller is product service
|
175
|
+
if(msg.sender != _getServiceAddress(PRODUCT())) {
|
176
|
+
revert ErrorComponentNotProductService(msg.sender);
|
177
|
+
}
|
178
|
+
|
179
|
+
// verify component is not yet linked to a product
|
180
|
+
if($._productNftId.gtz()) {
|
181
|
+
revert ErrorComponentProductNftAlreadySet();
|
182
|
+
}
|
183
|
+
|
184
|
+
$._productNftId = productNftId;
|
185
|
+
}
|
186
|
+
|
187
|
+
function nftMint(address to, uint256 tokenId)
|
188
|
+
external
|
189
|
+
virtual
|
190
|
+
onlyChainNft
|
191
|
+
{}
|
192
|
+
|
193
|
+
/// @dev callback function for nft transfers
|
194
|
+
/// may only be called by chain nft contract.
|
195
|
+
/// do not override this function to implement business logic for handling transfers
|
196
|
+
/// override internal function _nftTransferFrom instead
|
197
|
+
function nftTransferFrom(address from, address to, uint256 tokenId)
|
198
|
+
external
|
199
|
+
virtual
|
200
|
+
onlyChainNft
|
201
|
+
{
|
202
|
+
_nftTransferFrom(from, to, tokenId);
|
203
|
+
}
|
204
|
+
|
205
|
+
function getWallet() public view override returns (address walletAddress)
|
206
|
+
{
|
207
|
+
return _getComponentStorage()._wallet;
|
208
|
+
}
|
209
|
+
|
210
|
+
function getToken() public view override returns (IERC20Metadata token) {
|
211
|
+
return _getComponentStorage()._token;
|
212
|
+
}
|
213
|
+
|
214
|
+
function getTokenHandler() public view returns (TokenHandler tokenHandler) {
|
215
|
+
return getComponentInfo().tokenHandler;
|
216
|
+
}
|
217
|
+
|
218
|
+
function isNftInterceptor() public view override returns(bool isInterceptor) {
|
219
|
+
return _getComponentStorage()._isNftInterceptor;
|
220
|
+
}
|
221
|
+
|
222
|
+
function getInstance() public view override returns (IInstance instance) {
|
223
|
+
return _getComponentStorage()._instance;
|
224
|
+
}
|
225
|
+
|
226
|
+
function getName() public view override returns(string memory name) {
|
227
|
+
return _getComponentStorage()._name;
|
228
|
+
}
|
229
|
+
|
230
|
+
function getProductNftId() public view override returns (NftId productNftId) {
|
231
|
+
return _getComponentStorage()._productNftId;
|
232
|
+
}
|
233
|
+
|
234
|
+
function getComponentInfo() public view returns (IComponents.ComponentInfo memory info) {
|
235
|
+
info = _getInstanceReader().getComponentInfo(getNftId());
|
236
|
+
|
237
|
+
// fallback to initial info (wallet is always != address(0))
|
238
|
+
if(info.wallet == address(0)) {
|
239
|
+
info = _getInitialInfo();
|
240
|
+
}
|
241
|
+
}
|
242
|
+
|
243
|
+
/// @dev defines initial component specification
|
244
|
+
/// overwrite this function according to your use case
|
245
|
+
function _getInitialInfo()
|
246
|
+
internal
|
247
|
+
view
|
248
|
+
virtual
|
249
|
+
returns (IComponents.ComponentInfo memory info)
|
250
|
+
{ }
|
251
|
+
|
252
|
+
|
253
|
+
/// @dev internal function for nft transfers.
|
254
|
+
/// handling logic that deals with nft transfers need to overwrite this function
|
255
|
+
function _nftTransferFrom(address from, address to, uint256 tokenId)
|
256
|
+
internal
|
257
|
+
virtual
|
258
|
+
{ }
|
259
|
+
|
260
|
+
/// @dev returns reader for linked instance
|
261
|
+
function _getInstanceReader() internal view returns (InstanceReader reader) {
|
262
|
+
return _getComponentStorage()._instanceReader;
|
263
|
+
}
|
264
|
+
|
265
|
+
/// @dev returns the service address for the specified domain
|
266
|
+
/// gets address via lookup from registry using the major version form the linked instance
|
267
|
+
function _getServiceAddress(ObjectType domain) internal view returns (address service) {
|
268
|
+
VersionPart majorVersion = _getComponentStorage()._instance.getMajorVersion();
|
269
|
+
return getRegistry().getServiceAddress(domain, majorVersion);
|
270
|
+
}
|
271
|
+
}
|