@etherisc/gif-next 0.0.2-f08d150-296 → 0.0.2-f2b0fa2-473
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 +176 -11
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +168 -28
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +610 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +121 -28
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +74 -181
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +447 -60
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +519 -70
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1119 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +234 -1749
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/{base/ServiceBase.sol/ServiceBase.json → IInstanceService.sol/IInstanceService.json} +182 -61
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2415 -1152
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1257 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +703 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +424 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +224 -43
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +51 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +45 -127
- 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 +55 -245
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
- package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +381 -77
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +235 -50
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +325 -51
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +190 -51
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +380 -139
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1261 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +504 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +175 -54
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +199 -83
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +52 -13
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/BaseComponent.sol +20 -22
- package/contracts/components/Distribution.sol +166 -0
- package/contracts/components/IBaseComponent.sol +8 -3
- package/contracts/components/IDistributionComponent.sol +43 -0
- package/contracts/components/IPoolComponent.sol +14 -9
- package/contracts/components/IProductComponent.sol +25 -9
- package/contracts/components/Pool.sol +115 -30
- package/contracts/components/Product.sol +212 -32
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/AccessManagedSimple.sol +114 -0
- package/contracts/instance/AccessManagerSimple.sol +682 -0
- package/contracts/instance/IAccessManagerSimple.sol +391 -0
- package/contracts/instance/IInstance.sol +17 -41
- package/contracts/instance/IInstanceService.sol +17 -0
- package/contracts/instance/Instance.sol +420 -52
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceReader.sol +280 -0
- package/contracts/instance/InstanceService.sol +102 -0
- package/contracts/instance/InstanceServiceManager.sol +56 -0
- package/contracts/instance/base/ComponentServiceBase.sol +15 -8
- package/contracts/instance/base/IInstanceBase.sol +11 -2
- package/contracts/instance/base/IKeyValueStore.sol +13 -13
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +53 -37
- package/contracts/instance/base/Lifecycle.sol +16 -11
- package/contracts/instance/module/IAccess.sol +38 -0
- package/contracts/instance/module/IBundle.sol +19 -0
- package/contracts/instance/module/IDistribution.sol +39 -0
- package/contracts/instance/module/IPolicy.sol +45 -0
- package/contracts/instance/module/IRisk.sol +11 -0
- package/contracts/instance/module/ISetup.sol +43 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ComponentOwnerService.sol +244 -97
- package/contracts/instance/service/IComponentOwnerService.sol +1 -3
- package/contracts/instance/service/IDistributionService.sol +12 -0
- package/contracts/instance/service/IPoolService.sol +8 -1
- package/contracts/instance/service/IProductService.sol +56 -7
- package/contracts/registry/ChainNft.sol +80 -37
- package/contracts/registry/IRegistry.sol +28 -28
- package/contracts/registry/IRegistryService.sol +35 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +315 -273
- package/contracts/registry/RegistryService.sol +439 -0
- package/contracts/registry/RegistryServiceManager.sol +64 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +8 -15
- package/contracts/{instance/base → shared}/IService.sol +3 -3
- package/contracts/shared/IVersionable.sol +55 -11
- package/contracts/shared/NftOwnable.sol +136 -0
- package/contracts/shared/ProxyManager.sol +94 -0
- package/contracts/shared/Registerable.sol +62 -59
- package/contracts/shared/RegisterableUpgradable.sol +16 -0
- package/contracts/shared/Service.sol +54 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +113 -55
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestRoleId.sol +1 -1
- package/contracts/test/TestService.sol +5 -13
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +10 -5
- package/contracts/types/Key32.sol +8 -3
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +51 -14
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +54 -10
- package/contracts/types/StateId.sol +1 -1
- package/contracts/types/Timestamp.sol +7 -3
- package/contracts/types/UFixed.sol +128 -12
- package/contracts/types/Version.sol +9 -0
- package/package.json +4 -3
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -296
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -296
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -471
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -673
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
- package/contracts/experiment/statemachine/README.md +0 -112
- package/contracts/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/base/InstanceBase.sol +0 -80
- package/contracts/instance/base/ModuleBase.sol +0 -52
- package/contracts/instance/base/ServiceBase.sol +0 -37
- package/contracts/instance/module/access/Access.sol +0 -149
- package/contracts/instance/module/access/IAccess.sol +0 -53
- package/contracts/instance/module/bundle/BundleModule.sol +0 -136
- package/contracts/instance/module/bundle/IBundle.sol +0 -58
- package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
- package/contracts/instance/module/compensation/ICompensation.sol +0 -10
- package/contracts/instance/module/component/ComponentModule.sol +0 -95
- package/contracts/instance/module/component/IComponent.sol +0 -53
- package/contracts/instance/module/policy/IPolicy.sol +0 -60
- package/contracts/instance/module/policy/PolicyModule.sol +0 -76
- package/contracts/instance/module/pool/IPoolModule.sol +0 -41
- package/contracts/instance/module/pool/PoolModule.sol +0 -87
- package/contracts/instance/module/risk/IRisk.sol +0 -10
- package/contracts/instance/module/risk/RiskModule.sol +0 -8
- package/contracts/instance/module/treasury/ITreasury.sol +0 -103
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
- package/contracts/instance/service/PoolService.sol +0 -123
- package/contracts/instance/service/ProductService.sol +0 -354
- package/contracts/registry/IChainNft.sol +0 -21
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/shared/IOwnable.sol +0 -6
- package/contracts/test/TestPool.sol +0 -22
- package/contracts/test/TestProduct.sol +0 -44
@@ -0,0 +1,439 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
|
6
|
+
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
|
7
|
+
import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
|
8
|
+
|
9
|
+
import {IRegistry} from "./IRegistry.sol";
|
10
|
+
import {IInstance} from "../instance/IInstance.sol";
|
11
|
+
|
12
|
+
import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
13
|
+
// import {IComponent, IComponentModule} from "../../contracts/instance/module/component/IComponent.sol";
|
14
|
+
// import {IPool} from "../../contracts/instance/module/pool/IPoolModule.sol";
|
15
|
+
import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
|
16
|
+
import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
|
17
|
+
import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
|
18
|
+
import {IDistributionComponent} from "../../contracts/components/IDistributionComponent.sol";
|
19
|
+
|
20
|
+
import {IVersionable} from "../../contracts/shared/IVersionable.sol";
|
21
|
+
import {Versionable} from "../../contracts/shared/Versionable.sol";
|
22
|
+
import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
|
23
|
+
|
24
|
+
import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
|
25
|
+
import {ObjectType, REGISTRY, TOKEN, SERVICE, PRODUCT, ORACLE, POOL, TOKEN, INSTANCE, DISTRIBUTION, POLICY, BUNDLE} from "../../contracts/types/ObjectType.sol";
|
26
|
+
import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
|
27
|
+
import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
|
28
|
+
import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
|
29
|
+
import {Version, VersionPart, VersionLib} from "../../contracts/types/Version.sol";
|
30
|
+
|
31
|
+
import {Service} from "../shared/Service.sol";
|
32
|
+
import {IService} from "../shared/IService.sol";
|
33
|
+
import {IRegistryService} from "./IRegistryService.sol";
|
34
|
+
import {Registry} from "./Registry.sol";
|
35
|
+
import {ChainNft} from "./ChainNft.sol";
|
36
|
+
|
37
|
+
contract RegistryService is
|
38
|
+
AccessManagedUpgradeable,
|
39
|
+
Service,
|
40
|
+
IRegistryService
|
41
|
+
{
|
42
|
+
using NftIdLib for NftId;
|
43
|
+
|
44
|
+
error SelfRegistration();
|
45
|
+
error NotRegistryOwner();
|
46
|
+
|
47
|
+
error NotToken();
|
48
|
+
error NotService();
|
49
|
+
error NotInstance();
|
50
|
+
error NotProduct();
|
51
|
+
error NotPool();
|
52
|
+
error NotDistribution();
|
53
|
+
|
54
|
+
error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
|
55
|
+
error NotRegisterableOwner(address expectedOwner);
|
56
|
+
error RegisterableOwnerIsZero();
|
57
|
+
error RegisterableOwnerIsRegistered();
|
58
|
+
error InvalidInitialOwner(address initialOwner);
|
59
|
+
error InvalidAddress(address registerableAddress);
|
60
|
+
|
61
|
+
|
62
|
+
// Initial value for constant variable has to be compile-time constant
|
63
|
+
// TODO define types as constants?
|
64
|
+
//ObjectType public constant SERVICE_TYPE = REGISTRY();
|
65
|
+
string public constant NAME = "RegistryService";
|
66
|
+
|
67
|
+
// TODO update to real hash when registry is stable
|
68
|
+
bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
|
69
|
+
|
70
|
+
address public constant NFT_LOCK_ADDRESS = address(0x1);
|
71
|
+
|
72
|
+
/// @dev
|
73
|
+
// msg.sender - ONLY registry owner
|
74
|
+
// CAN NOT register itself
|
75
|
+
// CAN NOT register IRegisterable address
|
76
|
+
// CAN register ONLY valid object-parent types combinations for TOKEN
|
77
|
+
// IMPORTANT: MUST NOT call untrusted contract inbetween calls to registry/instance (trusted contracts)
|
78
|
+
// motivation: registry/instance state may change during external call
|
79
|
+
// TODO it may be usefull to have transferable token nft in order to delist token, make it invalid for new beginings
|
80
|
+
// TODO: MUST prohibit registration of precompiles addresses
|
81
|
+
function registerToken(address tokenAddress)
|
82
|
+
external
|
83
|
+
returns(NftId nftId)
|
84
|
+
{
|
85
|
+
if(msg.sender == tokenAddress) {
|
86
|
+
revert SelfRegistration();
|
87
|
+
}
|
88
|
+
|
89
|
+
// MUST not revert if no ERC165 support
|
90
|
+
if(tokenAddress.code.length == 0 ||
|
91
|
+
ERC165Checker.supportsInterface(tokenAddress, type(IRegisterable).interfaceId)) {
|
92
|
+
revert NotToken();
|
93
|
+
}
|
94
|
+
|
95
|
+
NftId registryNftId = _registry.getNftId(address(_registry));
|
96
|
+
|
97
|
+
if(msg.sender != _registry.ownerOf(registryNftId)) {
|
98
|
+
revert NotRegistryOwner();
|
99
|
+
}
|
100
|
+
|
101
|
+
IRegistry.ObjectInfo memory info = IRegistry.ObjectInfo(
|
102
|
+
zeroNftId(), // any value
|
103
|
+
registryNftId, // parent nft id
|
104
|
+
TOKEN(),
|
105
|
+
false, // isInterceptor
|
106
|
+
tokenAddress,
|
107
|
+
NFT_LOCK_ADDRESS,
|
108
|
+
"" // any value
|
109
|
+
);
|
110
|
+
|
111
|
+
nftId = _registry.register(info);
|
112
|
+
}
|
113
|
+
|
114
|
+
/// @dev
|
115
|
+
// msg.sender - ONLY registry owner
|
116
|
+
// CAN NOT register itself
|
117
|
+
// CAN register ONLY valid object-parent types combinations for SERVICE
|
118
|
+
// CAN register ONLY IRegisterable address he owns
|
119
|
+
// IMPORTANT: MUST NOT check owner before calling external contract
|
120
|
+
function registerService(IService service)
|
121
|
+
external
|
122
|
+
// TODO restrict access - registryService.registerService must use accessmanager for checking permissions as
|
123
|
+
// services are not always owned by registry owner - actually only registry service is owned by registry owner
|
124
|
+
|
125
|
+
returns(
|
126
|
+
IRegistry.ObjectInfo memory info,
|
127
|
+
bytes memory data
|
128
|
+
)
|
129
|
+
{
|
130
|
+
|
131
|
+
// CAN revert if no ERC165 support -> will revert with empty message
|
132
|
+
if(!service.supportsInterface(type(IService).interfaceId)) {
|
133
|
+
revert NotService();
|
134
|
+
}
|
135
|
+
|
136
|
+
(
|
137
|
+
info,
|
138
|
+
data
|
139
|
+
) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
140
|
+
|
141
|
+
info.nftId = _registry.register(info);
|
142
|
+
service.linkToRegisteredNftId();
|
143
|
+
return (
|
144
|
+
info,
|
145
|
+
data
|
146
|
+
);
|
147
|
+
}
|
148
|
+
|
149
|
+
// If msg.sender is approved service:
|
150
|
+
// 1) add owner arg (service MUST pass it's msg.sender as owner)
|
151
|
+
// 2) check service allowance
|
152
|
+
// 3) comment self registrstion check
|
153
|
+
//function registerInstance(IRegisterable instance, address owner)
|
154
|
+
function registerInstance(IRegisterable instance)
|
155
|
+
external
|
156
|
+
returns(
|
157
|
+
IRegistry.ObjectInfo memory info,
|
158
|
+
bytes memory data
|
159
|
+
)
|
160
|
+
{
|
161
|
+
if(!instance.supportsInterface(type(IInstance).interfaceId)) {
|
162
|
+
revert NotInstance();
|
163
|
+
}
|
164
|
+
|
165
|
+
(
|
166
|
+
info,
|
167
|
+
data
|
168
|
+
) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
|
169
|
+
|
170
|
+
info.nftId = _registry.register(info);
|
171
|
+
instance.linkToRegisteredNftId(); // asume safe
|
172
|
+
|
173
|
+
return (
|
174
|
+
info,
|
175
|
+
data
|
176
|
+
);
|
177
|
+
}
|
178
|
+
|
179
|
+
function registerProduct(IBaseComponent product, address owner)
|
180
|
+
external
|
181
|
+
restricted
|
182
|
+
returns(
|
183
|
+
IRegistry.ObjectInfo memory info,
|
184
|
+
bytes memory data
|
185
|
+
)
|
186
|
+
{
|
187
|
+
// CAN revert if no ERC165 support -> will revert with empty message
|
188
|
+
if(!product.supportsInterface(type(IProductComponent).interfaceId)) {
|
189
|
+
revert NotProduct();
|
190
|
+
}
|
191
|
+
|
192
|
+
(
|
193
|
+
info,
|
194
|
+
data
|
195
|
+
) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
|
196
|
+
|
197
|
+
NftId serviceNftId = _registry.getNftId(msg.sender);
|
198
|
+
|
199
|
+
info.nftId = _registry.register(info);
|
200
|
+
// TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
|
201
|
+
product.linkToRegisteredNftId();
|
202
|
+
|
203
|
+
return (
|
204
|
+
info,
|
205
|
+
data
|
206
|
+
);
|
207
|
+
}
|
208
|
+
|
209
|
+
function registerPool(IBaseComponent pool, address owner)
|
210
|
+
external
|
211
|
+
restricted
|
212
|
+
returns(
|
213
|
+
IRegistry.ObjectInfo memory info,
|
214
|
+
bytes memory data
|
215
|
+
)
|
216
|
+
{
|
217
|
+
if(!pool.supportsInterface(type(IPoolComponent).interfaceId)) {
|
218
|
+
revert NotPool();
|
219
|
+
}
|
220
|
+
|
221
|
+
(
|
222
|
+
info,
|
223
|
+
data
|
224
|
+
) = _getAndVerifyContractInfo(pool, POOL(), owner);
|
225
|
+
|
226
|
+
NftId serviceNftId = _registry.getNftId(msg.sender);
|
227
|
+
|
228
|
+
info.nftId = _registry.register(info);
|
229
|
+
pool.linkToRegisteredNftId();
|
230
|
+
|
231
|
+
return (
|
232
|
+
info,
|
233
|
+
data
|
234
|
+
);
|
235
|
+
}
|
236
|
+
|
237
|
+
function registerDistribution(IBaseComponent distribution, address owner)
|
238
|
+
external
|
239
|
+
restricted
|
240
|
+
returns(
|
241
|
+
IRegistry.ObjectInfo memory info,
|
242
|
+
bytes memory data
|
243
|
+
)
|
244
|
+
{
|
245
|
+
if(!distribution.supportsInterface(type(IDistributionComponent).interfaceId)) {
|
246
|
+
revert NotDistribution();
|
247
|
+
}
|
248
|
+
|
249
|
+
(
|
250
|
+
info,
|
251
|
+
data
|
252
|
+
) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
|
253
|
+
|
254
|
+
NftId serviceNftId = _registry.getNftId(msg.sender);
|
255
|
+
|
256
|
+
info.nftId = _registry.register(info);
|
257
|
+
distribution.linkToRegisteredNftId();
|
258
|
+
|
259
|
+
return (
|
260
|
+
info,
|
261
|
+
data
|
262
|
+
);
|
263
|
+
}
|
264
|
+
|
265
|
+
function registerPolicy(IRegistry.ObjectInfo memory info)
|
266
|
+
external
|
267
|
+
restricted
|
268
|
+
returns(NftId nftId)
|
269
|
+
{
|
270
|
+
NftId senderNftId = _registry.getNftId(msg.sender);
|
271
|
+
|
272
|
+
_verifyObjectInfo(info, POLICY());
|
273
|
+
|
274
|
+
nftId = _registry.register(info);
|
275
|
+
}
|
276
|
+
|
277
|
+
function registerBundle(IRegistry.ObjectInfo memory info)
|
278
|
+
external
|
279
|
+
restricted
|
280
|
+
returns(NftId nftId)
|
281
|
+
{
|
282
|
+
|
283
|
+
NftId senderNftId = _registry.getNftId(msg.sender);
|
284
|
+
|
285
|
+
_verifyObjectInfo(info, BUNDLE());
|
286
|
+
|
287
|
+
nftId = _registry.register(info);
|
288
|
+
}
|
289
|
+
|
290
|
+
|
291
|
+
// From IService
|
292
|
+
function getName() public pure override(IService, Service) returns(string memory) {
|
293
|
+
return NAME;
|
294
|
+
}
|
295
|
+
//function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
|
296
|
+
// return SERVICE_TYPE;
|
297
|
+
//}
|
298
|
+
|
299
|
+
|
300
|
+
// from Versionable
|
301
|
+
|
302
|
+
/// @dev top level initializer
|
303
|
+
// 1) registry is non upgradeable -> don't need a proxy and uses constructor !
|
304
|
+
// 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
|
305
|
+
// 3) deploy registry -> pass registry service address as constructor argument
|
306
|
+
// registry is getting instantiated and locked to registry service address forever
|
307
|
+
function _initialize(
|
308
|
+
address owner,
|
309
|
+
bytes memory data
|
310
|
+
)
|
311
|
+
internal
|
312
|
+
initializer
|
313
|
+
virtual override
|
314
|
+
{
|
315
|
+
(
|
316
|
+
address initialAuthority,
|
317
|
+
bytes memory registryByteCodeWithInitCode
|
318
|
+
) = abi.decode(data, (address, bytes));
|
319
|
+
|
320
|
+
__AccessManaged_init(initialAuthority);
|
321
|
+
|
322
|
+
bytes memory encodedConstructorArguments = abi.encode(
|
323
|
+
owner,
|
324
|
+
getMajorVersion());
|
325
|
+
|
326
|
+
bytes memory registryCreationCode = ContractDeployerLib.getCreationCode(
|
327
|
+
registryByteCodeWithInitCode,
|
328
|
+
encodedConstructorArguments);
|
329
|
+
|
330
|
+
IRegistry registry = IRegistry(ContractDeployerLib.deploy(
|
331
|
+
registryCreationCode,
|
332
|
+
REGISTRY_CREATION_CODE_HASH));
|
333
|
+
|
334
|
+
NftId registryNftId = registry.getNftId(address(registry));
|
335
|
+
|
336
|
+
_initializeService(address(registry), owner);
|
337
|
+
|
338
|
+
// TODO why do registry service proxy need to keep its nftId??? -> no registryServiceNftId checks in implementation
|
339
|
+
// if they are -> use registry address to obtain owner of registry service nft (works the same with any registerable and(or) implementation)
|
340
|
+
linkToRegisteredNftId();
|
341
|
+
_registerInterface(type(IRegistryService).interfaceId);
|
342
|
+
}
|
343
|
+
|
344
|
+
// parent check done in registry because of approve()
|
345
|
+
function _getAndVerifyContractInfo(
|
346
|
+
IRegisterable registerable,
|
347
|
+
ObjectType expectedType, // assume can be valid only
|
348
|
+
address expectedOwner // assume can be 0
|
349
|
+
)
|
350
|
+
internal
|
351
|
+
view
|
352
|
+
returns(
|
353
|
+
IRegistry.ObjectInfo memory info,
|
354
|
+
bytes memory data
|
355
|
+
)
|
356
|
+
{
|
357
|
+
(
|
358
|
+
info,
|
359
|
+
data
|
360
|
+
) = registerable.getInitialInfo();
|
361
|
+
info.objectAddress = address(registerable);
|
362
|
+
|
363
|
+
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
364
|
+
revert UnexpectedRegisterableType(expectedType, info.objectType);
|
365
|
+
}
|
366
|
+
|
367
|
+
address owner = info.initialOwner;
|
368
|
+
|
369
|
+
if(owner != expectedOwner) { // registerable owner protection
|
370
|
+
revert NotRegisterableOwner(expectedOwner);
|
371
|
+
}
|
372
|
+
|
373
|
+
if(owner == address(registerable)) {
|
374
|
+
revert SelfRegistration();
|
375
|
+
}
|
376
|
+
|
377
|
+
if(owner == address(0)) {
|
378
|
+
revert RegisterableOwnerIsZero();
|
379
|
+
}
|
380
|
+
|
381
|
+
if(getRegistry().isRegistered(owner)) {
|
382
|
+
revert RegisterableOwnerIsRegistered();
|
383
|
+
}
|
384
|
+
|
385
|
+
/*NftId parentNftId = info.parentNftId;
|
386
|
+
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
|
387
|
+
|
388
|
+
if(parentInfo.objectType != parentType) { // parent registration + type
|
389
|
+
revert InvalidParent(parentNftId);
|
390
|
+
}*/
|
391
|
+
|
392
|
+
return(
|
393
|
+
info,
|
394
|
+
data
|
395
|
+
);
|
396
|
+
}
|
397
|
+
|
398
|
+
// parent checks done in registry because of approve()
|
399
|
+
function _verifyObjectInfo(
|
400
|
+
IRegistry.ObjectInfo memory info,
|
401
|
+
ObjectType objectType
|
402
|
+
)
|
403
|
+
internal
|
404
|
+
view
|
405
|
+
{
|
406
|
+
if(info.objectAddress > address(0)) {
|
407
|
+
revert InvalidAddress(info.objectAddress);
|
408
|
+
}
|
409
|
+
|
410
|
+
if(
|
411
|
+
getRegistry().isRegistered(info.initialOwner) ||
|
412
|
+
info.initialOwner == address(0)) {
|
413
|
+
// TODO non registered address can register object(e.g. POLICY()) and then transfer associated nft to registered contract
|
414
|
+
// what are motivations to do so?
|
415
|
+
// at least registered contract can not register objects by itself, SERVICE,
|
416
|
+
revert InvalidInitialOwner(info.initialOwner);
|
417
|
+
}
|
418
|
+
|
419
|
+
// can catch all 3 if check that initialOwner is not registered
|
420
|
+
/*if(info.initialOwner == msg.sender) {
|
421
|
+
revert InitialOwnerIsParent();
|
422
|
+
}
|
423
|
+
|
424
|
+
if(info.initialOwner == address(this)) {
|
425
|
+
revert InitialOwnerIsService();
|
426
|
+
}
|
427
|
+
|
428
|
+
if(info.initialOwner == address(getRegistry())) {
|
429
|
+
revert InitialOwnerIsRegistry();
|
430
|
+
}*/
|
431
|
+
|
432
|
+
/*NftId parentNftId = info.parentNftId;
|
433
|
+
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
|
434
|
+
|
435
|
+
if(parentInfo.objectType != parentType) { // parent registration + type
|
436
|
+
revert InvalidParent(parentNftId);
|
437
|
+
}*/
|
438
|
+
}
|
439
|
+
}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
// SPDX-License-Identifier: UNLICENSED
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
|
5
|
+
|
6
|
+
import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
7
|
+
|
8
|
+
import {Registry} from "./Registry.sol";
|
9
|
+
import {IVersionable} from "../shared/IVersionable.sol";
|
10
|
+
import {ProxyManager} from "../shared/ProxyManager.sol";
|
11
|
+
import {RegistryService} from "./RegistryService.sol";
|
12
|
+
|
13
|
+
|
14
|
+
contract RegistryServiceManager is
|
15
|
+
ProxyManager
|
16
|
+
{
|
17
|
+
bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
|
18
|
+
|
19
|
+
RegistryService private _registryService;
|
20
|
+
|
21
|
+
AccessManager private _accessManager;
|
22
|
+
|
23
|
+
/// @dev initializes proxy manager with registry service implementation and deploys registry
|
24
|
+
constructor(
|
25
|
+
address accessManager
|
26
|
+
)
|
27
|
+
ProxyManager()
|
28
|
+
{
|
29
|
+
_accessManager = AccessManager(accessManager);
|
30
|
+
|
31
|
+
bytes memory initializationData = abi.encode(accessManager, type(Registry).creationCode);
|
32
|
+
|
33
|
+
IVersionable versionable = deploy(
|
34
|
+
address(new RegistryService()),
|
35
|
+
initializationData);
|
36
|
+
|
37
|
+
_registryService = RegistryService(address(versionable));
|
38
|
+
|
39
|
+
// link ownership of registry service manager ot nft owner of registry service
|
40
|
+
_linkToNftOwnable(
|
41
|
+
address(_registryService.getRegistry()),
|
42
|
+
address(_registryService));
|
43
|
+
|
44
|
+
// implies that after this constructor call only upgrade functionality is available
|
45
|
+
_isDeployed = true;
|
46
|
+
}
|
47
|
+
|
48
|
+
//--- view functions ----------------------------------------------------//
|
49
|
+
function getRegistryService()
|
50
|
+
external
|
51
|
+
view
|
52
|
+
returns (RegistryService registryService)
|
53
|
+
{
|
54
|
+
return _registryService;
|
55
|
+
}
|
56
|
+
|
57
|
+
function getAccessManager()
|
58
|
+
external
|
59
|
+
view
|
60
|
+
returns (AccessManager)
|
61
|
+
{
|
62
|
+
return _accessManager;
|
63
|
+
}
|
64
|
+
}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
library ContractDeployerLib {
|
5
|
+
|
6
|
+
event LogContractDeployed(address contractAddress);
|
7
|
+
|
8
|
+
error ErrorCreationCodeHashMismatch(bytes32 expectedHash, bytes32 actualHash);
|
9
|
+
|
10
|
+
/// @dev deploys a new contract using the provided creation code
|
11
|
+
function deploy(
|
12
|
+
bytes memory creationCode,
|
13
|
+
bytes32 expectedCreationCodeHash
|
14
|
+
)
|
15
|
+
public
|
16
|
+
returns (address contractAdress)
|
17
|
+
{
|
18
|
+
// check against expected hash, if provided
|
19
|
+
if (expectedCreationCodeHash != bytes32(0)) {
|
20
|
+
bytes32 creationCodeHash = getHash(creationCode);
|
21
|
+
if (creationCodeHash != expectedCreationCodeHash) {
|
22
|
+
revert ErrorCreationCodeHashMismatch(expectedCreationCodeHash, creationCodeHash);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
// solhint-disable no-inline-assembly
|
27
|
+
assembly {
|
28
|
+
contractAdress := create(0, add(creationCode, 0x20), mload(creationCode))
|
29
|
+
|
30
|
+
if iszero(extcodesize(contractAdress)) {
|
31
|
+
revert(0, 0)
|
32
|
+
}
|
33
|
+
}
|
34
|
+
// solhint enable
|
35
|
+
|
36
|
+
emit LogContractDeployed(contractAdress);
|
37
|
+
}
|
38
|
+
|
39
|
+
/// @dev gets the creation code for the new contract
|
40
|
+
// for terminology see eg https://www.rareskills.io/post/ethereum-contract-creation-code
|
41
|
+
function getCreationCode(
|
42
|
+
bytes memory byteCodeWithInitCode, // what you get with type(<Contract>).creationCode
|
43
|
+
bytes memory encodedConstructorArguments // what you get with
|
44
|
+
)
|
45
|
+
public
|
46
|
+
pure
|
47
|
+
returns (bytes memory creationCode)
|
48
|
+
{
|
49
|
+
return abi.encodePacked(byteCodeWithInitCode, encodedConstructorArguments);
|
50
|
+
}
|
51
|
+
|
52
|
+
|
53
|
+
function matchesWithHash(
|
54
|
+
bytes memory creationCode,
|
55
|
+
bytes32 expectedHash
|
56
|
+
)
|
57
|
+
public
|
58
|
+
pure
|
59
|
+
returns (bool isMatching)
|
60
|
+
{
|
61
|
+
return getHash(creationCode) == expectedHash;
|
62
|
+
}
|
63
|
+
|
64
|
+
|
65
|
+
function getHash(bytes memory creationCode)
|
66
|
+
public
|
67
|
+
pure
|
68
|
+
returns (bytes32 hash)
|
69
|
+
{
|
70
|
+
return keccak256(creationCode);
|
71
|
+
}
|
72
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
5
|
+
import {NftId} from "../types/NftId.sol";
|
6
|
+
|
7
|
+
interface INftOwnable {
|
8
|
+
error ErrorNotOwner(address account);
|
9
|
+
|
10
|
+
error ErrorAlreadyLinked(address registry, NftId nftId);
|
11
|
+
error ErrorRegistryAlreadyInitialized(address registry);
|
12
|
+
error ErrorRegistryNotInitialized();
|
13
|
+
error ErrorRegistryAddressZero();
|
14
|
+
error ErrorNotRegistry(address registryAddress);
|
15
|
+
error ErrorContractNotRegistered(address contractAddress);
|
16
|
+
|
17
|
+
function linkToRegisteredNftId() external;
|
18
|
+
|
19
|
+
function getRegistry() external view returns (IRegistry);
|
20
|
+
function getNftId() external view returns (NftId);
|
21
|
+
function getOwner() external view returns (address);
|
22
|
+
}
|
@@ -1,24 +1,17 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
5
|
|
6
|
+
import {INftOwnable} from "./INftOwnable.sol";
|
6
7
|
import {IRegistry} from "../registry/IRegistry.sol";
|
7
8
|
import {NftId} from "../types/NftId.sol";
|
8
9
|
import {ObjectType} from "../types/ObjectType.sol";
|
9
10
|
|
10
|
-
|
11
|
+
interface IRegisterable is IERC165, INftOwnable {
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
function getType() external pure returns (ObjectType objectType);
|
18
|
-
|
19
|
-
function getNftId() external view returns (NftId nftId);
|
20
|
-
|
21
|
-
function getParentNftId() external view returns (NftId nftId);
|
22
|
-
|
23
|
-
function getData() external view returns (bytes memory data);
|
24
|
-
}
|
13
|
+
function getInitialInfo()
|
14
|
+
external
|
15
|
+
view
|
16
|
+
returns (IRegistry.ObjectInfo memory, bytes memory data);
|
17
|
+
}
|
@@ -1,10 +1,10 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {VersionPart} from "
|
4
|
+
import {VersionPart} from "../types/Version.sol";
|
5
5
|
|
6
|
-
import {IRegisterable} from "
|
7
|
-
import {IVersionable} from "
|
6
|
+
import {IRegisterable} from "./IRegisterable.sol";
|
7
|
+
import {IVersionable} from "./IVersionable.sol";
|
8
8
|
|
9
9
|
interface IService is
|
10
10
|
IRegisterable,
|