@etherisc/gif-next 0.0.2-e37834a-021 → 0.0.2-e3f4f82-063
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 +108 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +116 -2
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +204 -31
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +106 -3
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -25
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +2 -61
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -50
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +253 -68
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +272 -45
- 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 +1132 -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 +732 -1219
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2327 -1324
- 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 +1422 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +931 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +508 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +149 -2
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
- 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 +37 -245
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
- 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/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
- 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 +178 -41
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +212 -22
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +81 -4
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +80 -3
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +188 -3
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +120 -34
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +346 -24
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +460 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +269 -86
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +199 -112
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +297 -18
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +167 -166
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +447 -39
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +105 -48
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- 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/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +80 -3
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/IService.sol/IService.json} +76 -35
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +32 -6
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +21 -16
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +120 -6
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/IService.sol/IService.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +137 -39
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/Service.sol/Service.json} +106 -94
- 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 +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/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 +120 -6
- 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 +142 -14
- 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 +18 -2
- 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 +4 -4
- 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 +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/BaseComponent.sol +16 -4
- package/contracts/components/Distribution.sol +23 -15
- package/contracts/components/IBaseComponent.sol +9 -3
- package/contracts/components/IDistributionComponent.sol +2 -4
- package/contracts/components/IPoolComponent.sol +1 -3
- package/contracts/components/IProductComponent.sol +2 -4
- package/contracts/components/Pool.sol +33 -32
- package/contracts/components/Product.sol +52 -62
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/AccessManagedSimple.sol +115 -0
- package/contracts/instance/AccessManagerSimple.sol +692 -0
- package/contracts/instance/IAccessManagerSimple.sol +391 -0
- package/contracts/instance/IInstance.sol +47 -47
- package/contracts/instance/IInstanceService.sol +30 -0
- package/contracts/instance/Instance.sol +423 -65
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceReader.sol +315 -0
- package/contracts/instance/InstanceService.sol +198 -0
- package/contracts/instance/InstanceServiceManager.sol +57 -0
- package/contracts/instance/base/ComponentServiceBase.sol +93 -8
- package/contracts/instance/base/IKeyValueStore.sol +13 -14
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +49 -38
- package/contracts/instance/base/Lifecycle.sol +1 -1
- package/contracts/instance/module/IAccess.sol +38 -0
- package/contracts/instance/module/IBundle.sol +20 -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 +47 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ComponentOwnerService.sol +145 -100
- package/contracts/instance/service/DistributionService.sol +49 -15
- package/contracts/instance/service/DistributionServiceManager.sol +54 -0
- package/contracts/instance/service/IComponentOwnerService.sol +1 -1
- package/contracts/instance/service/IDistributionService.sol +1 -1
- package/contracts/instance/service/IPoolService.sol +7 -1
- package/contracts/instance/service/IProductService.sol +9 -6
- package/contracts/instance/service/PoolService.sol +101 -46
- package/contracts/instance/service/PoolServiceManager.sol +54 -0
- package/contracts/instance/service/ProductService.sol +170 -118
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +40 -25
- package/contracts/registry/IRegistry.sol +35 -27
- package/contracts/registry/IRegistryService.sol +36 -15
- package/contracts/registry/Registry.sol +137 -179
- package/contracts/registry/RegistryService.sol +149 -166
- package/contracts/registry/RegistryServiceManager.sol +38 -10
- package/contracts/registry/TokenRegistry.sol +111 -0
- package/contracts/shared/ERC165.sol +7 -3
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +3 -8
- package/contracts/{instance/base → shared}/IService.sol +3 -3
- package/contracts/shared/NftOwnable.sol +85 -38
- package/contracts/shared/ProxyManager.sol +3 -12
- package/contracts/shared/Registerable.sol +15 -42
- package/contracts/shared/RegisterableUpgradable.sol +16 -0
- package/contracts/shared/Service.sol +55 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +2 -2
- package/contracts/shared/Versionable.sol +3 -3
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestRoleId.sol +1 -1
- package/contracts/test/TestService.sol +3 -5
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +3 -3
- package/contracts/types/Key32.sol +8 -3
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +35 -14
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RoleId.sol +61 -9
- package/contracts/types/StateId.sol +5 -1
- package/contracts/types/Timestamp.sol +7 -3
- package/contracts/types/UFixed.sol +128 -12
- package/contracts/types/Version.sol +4 -1
- 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/IAccess.json +0 -10
- 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 -297
- 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 -297
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- 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 -117
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
- 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 -284
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
- 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 -164
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
- 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 -113
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
- 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 -638
- 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 -638
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
- 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/TestDistribution.sol/TestDistribution.dbg.json +0 -4
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -445
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -602
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -632
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
- package/contracts/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/base/InstanceBase.sol +0 -89
- package/contracts/instance/base/ModuleBase.sol +0 -57
- package/contracts/instance/base/ServiceBase.sol +0 -43
- 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 -134
- package/contracts/instance/module/bundle/IBundle.sol +0 -53
- package/contracts/instance/module/component/ComponentModule.sol +0 -71
- package/contracts/instance/module/component/IComponent.sol +0 -28
- package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
- package/contracts/instance/module/distribution/IDistribution.sol +0 -10
- package/contracts/instance/module/policy/IPolicy.sol +0 -63
- package/contracts/instance/module/policy/PolicyModule.sol +0 -91
- package/contracts/instance/module/pool/IPoolModule.sol +0 -41
- package/contracts/instance/module/pool/PoolModule.sol +0 -95
- package/contracts/instance/module/risk/IRisk.sol +0 -26
- package/contracts/instance/module/risk/RiskModule.sol +0 -62
- package/contracts/instance/module/treasury/ITreasury.sol +0 -84
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
- package/contracts/registry/IChainNft.sol +0 -22
- package/contracts/shared/IOwnable.sol +0 -6
- package/contracts/test/TestDistribution.sol +0 -22
- package/contracts/test/TestPool.sol +0 -27
- package/contracts/test/TestProduct.sol +0 -74
- package/contracts/types/ReferralId.sol +0 -48
@@ -0,0 +1,111 @@
|
|
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
|
+
|
7
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
8
|
+
import {IRegistry} from "./IRegistry.sol";
|
9
|
+
import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
|
10
|
+
import {NftOwnable} from "../shared/NftOwnable.sol";
|
11
|
+
|
12
|
+
/// @title contract to register token per GIF major release.
|
13
|
+
contract TokenRegistry is
|
14
|
+
NftOwnable
|
15
|
+
{
|
16
|
+
|
17
|
+
string public constant REGISTRY_SERVICE_NAME = "RegistryService";
|
18
|
+
|
19
|
+
event LogRegistered(address token, string symbol, uint256 decimals);
|
20
|
+
event LogTokenStateSet(address token, VersionPart majorVersion, bool active);
|
21
|
+
|
22
|
+
error NotContract(address account);
|
23
|
+
error NotToken(address account);
|
24
|
+
error TokenDecimalsZero();
|
25
|
+
error TokenMajorVersionInvalid(VersionPart majorVersion);
|
26
|
+
|
27
|
+
address [] internal _token;
|
28
|
+
mapping(address token => bool registered) internal _registered;
|
29
|
+
mapping(address token => mapping(VersionPart majorVersion => bool isActive)) internal _active;
|
30
|
+
|
31
|
+
constructor()
|
32
|
+
NftOwnable()
|
33
|
+
{ }
|
34
|
+
|
35
|
+
|
36
|
+
/// @dev link ownership of token registry to nft owner of registry service
|
37
|
+
function linkToNftOwnable(address registryAddress)
|
38
|
+
external
|
39
|
+
onlyOwner
|
40
|
+
{
|
41
|
+
IRegistry registry = IRegistry(registryAddress);
|
42
|
+
address registryServiceAddress = registry.getServiceAddress(REGISTRY_SERVICE_NAME, registry.getMajorVersion());
|
43
|
+
|
44
|
+
_linkToNftOwnable(registryAddress, registryServiceAddress);
|
45
|
+
}
|
46
|
+
|
47
|
+
/// @dev token state is informative, registry have no clue about used tokens
|
48
|
+
// component owner is responsible for token selection and operations
|
49
|
+
// service MUST deny registration of component with inactive token
|
50
|
+
function setActive(address token, VersionPart majorVersion, bool active)
|
51
|
+
external
|
52
|
+
onlyOwner
|
53
|
+
{
|
54
|
+
// verify that token is registered
|
55
|
+
if (!_registered[token]) {
|
56
|
+
_registerToken(token);
|
57
|
+
}
|
58
|
+
|
59
|
+
// verify valid major version
|
60
|
+
// ensure major version increments is one
|
61
|
+
uint256 version = majorVersion.toInt();
|
62
|
+
if (version < _registry.getMajorVersionMin().toInt() || version > _registry.getMajorVersionMax().toInt()) {
|
63
|
+
revert TokenMajorVersionInvalid(majorVersion);
|
64
|
+
}
|
65
|
+
|
66
|
+
_active[token][majorVersion] = active;
|
67
|
+
|
68
|
+
emit LogTokenStateSet(token, majorVersion, active);
|
69
|
+
}
|
70
|
+
|
71
|
+
function tokens() external view returns (uint256) {
|
72
|
+
return _token.length;
|
73
|
+
}
|
74
|
+
|
75
|
+
function getToken(uint256 idx) external view returns (IERC20Metadata token) {
|
76
|
+
return IERC20Metadata(_token[idx]);
|
77
|
+
}
|
78
|
+
|
79
|
+
function isRegistered(address token) external view returns (bool) {
|
80
|
+
return _registered[token];
|
81
|
+
}
|
82
|
+
|
83
|
+
function isActive(address token, VersionPart majorVersion) external view returns (bool) {
|
84
|
+
return _active[token][majorVersion];
|
85
|
+
}
|
86
|
+
|
87
|
+
/// @dev some sanity checks to prevent unintended registration
|
88
|
+
function _registerToken(address token) internal {
|
89
|
+
|
90
|
+
// MUST be contract
|
91
|
+
if(token.code.length == 0) {
|
92
|
+
revert NotContract(token);
|
93
|
+
}
|
94
|
+
|
95
|
+
// MUST not be GIF registerable
|
96
|
+
if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
|
97
|
+
revert NotToken(token);
|
98
|
+
}
|
99
|
+
|
100
|
+
// MUST have decimals > 0
|
101
|
+
IERC20Metadata erc20 = IERC20Metadata(token);
|
102
|
+
if(erc20.decimals() == 0) {
|
103
|
+
revert TokenDecimalsZero();
|
104
|
+
}
|
105
|
+
|
106
|
+
_registered[token] = true;
|
107
|
+
_token.push(token);
|
108
|
+
|
109
|
+
emit LogRegistered(token, erc20.symbol(), erc20.decimals());
|
110
|
+
}
|
111
|
+
}
|
@@ -1,20 +1,24 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {IERC165} from "@
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
5
|
|
6
6
|
contract ERC165 is IERC165 {
|
7
7
|
mapping(bytes4 => bool) private _isSupported;
|
8
8
|
|
9
9
|
constructor() {
|
10
|
-
|
11
|
-
_registerInterface(type(IERC165).interfaceId);
|
10
|
+
_initializeERC165();
|
12
11
|
}
|
13
12
|
|
14
13
|
function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
|
15
14
|
return _isSupported[interfaceId];
|
16
15
|
}
|
17
16
|
|
17
|
+
// @dev register support for ERC165 itself
|
18
|
+
function _initializeERC165() internal {
|
19
|
+
_isSupported[type(IERC165).interfaceId] = true;
|
20
|
+
}
|
21
|
+
|
18
22
|
function _registerInterface(bytes4 interfaceId) internal {
|
19
23
|
_isSupported[interfaceId] = true;
|
20
24
|
}
|
@@ -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,22 +1,17 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC165} from "@
|
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
|
-
|
12
|
-
interface IRegisterable is IERC165, IOwnable {
|
13
|
-
function getRegistry() external view returns (IRegistry registry);
|
14
|
-
|
15
|
-
function getNftId() external view returns (NftId nftId);
|
11
|
+
interface IRegisterable is IERC165, INftOwnable {
|
16
12
|
|
17
13
|
function getInitialInfo()
|
18
14
|
external
|
19
15
|
view
|
20
16
|
returns (IRegistry.ObjectInfo memory, bytes memory data);
|
21
|
-
|
22
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,
|
@@ -1,31 +1,20 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
4
|
+
import {INftOwnable} from "./INftOwnable.sol";
|
5
5
|
import {IRegistry} from "../registry/IRegistry.sol";
|
6
6
|
import {NftId, zeroNftId} from "../types/NftId.sol";
|
7
7
|
|
8
|
-
contract NftOwnable is
|
9
|
-
IOwnable
|
10
|
-
{
|
11
|
-
error ErrorNftOwnableUnauthorized(address account);
|
12
|
-
|
13
|
-
error ErrorAlreadyInitialized(address registry, NftId nftId);
|
14
|
-
error ErrorRegistryAlreadyInitialized(address registry);
|
15
|
-
error ErrorRegistryNotInitialized();
|
16
|
-
error ErrorRegistryAddressZero();
|
17
|
-
error ErrorContractNotRegistered(address contractAddress);
|
8
|
+
contract NftOwnable is INftOwnable {
|
18
9
|
|
19
10
|
IRegistry internal _registry;
|
20
11
|
NftId private _nftId;
|
21
12
|
address private _initialOwner;
|
22
13
|
|
14
|
+
/// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
|
23
15
|
modifier onlyOwner() {
|
24
|
-
|
25
|
-
|
26
|
-
// owner == address(0) is eg uninitialized upgradable contract
|
27
|
-
if (owner != address(0) && msg.sender != owner) {
|
28
|
-
revert ErrorNftOwnableUnauthorized(msg.sender);
|
16
|
+
if (msg.sender != getOwner()) {
|
17
|
+
revert ErrorNotOwner(msg.sender);
|
29
18
|
}
|
30
19
|
_;
|
31
20
|
}
|
@@ -34,54 +23,112 @@ contract NftOwnable is
|
|
34
23
|
_initialOwner = msg.sender;
|
35
24
|
}
|
36
25
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
)
|
42
|
-
internal
|
43
|
-
onlyOwner()
|
44
|
-
returns (NftId)
|
45
|
-
{
|
26
|
+
/// @dev links this contract to nft after registration
|
27
|
+
// needs to be done once per registered contract and
|
28
|
+
// reduces registry calls to check ownership
|
29
|
+
// does not need any protection as function can only do the "right thing"
|
30
|
+
function linkToRegisteredNftId() public {
|
46
31
|
if (_nftId.gtz()) {
|
47
|
-
revert
|
32
|
+
revert ErrorAlreadyLinked(address(_registry), _nftId);
|
48
33
|
}
|
49
34
|
|
50
|
-
if (address(_registry)
|
51
|
-
revert
|
35
|
+
if (address(_registry) == address(0)) {
|
36
|
+
revert ErrorRegistryNotInitialized();
|
52
37
|
}
|
53
38
|
|
54
|
-
|
55
|
-
revert ErrorRegistryAddressZero();
|
56
|
-
}
|
57
|
-
|
58
|
-
_registry = IRegistry(registryAddress);
|
39
|
+
address contractAddress = address(this);
|
59
40
|
|
60
41
|
if (!_registry.isRegistered(contractAddress)) {
|
61
42
|
revert ErrorContractNotRegistered(contractAddress);
|
62
43
|
}
|
63
44
|
|
64
45
|
_nftId = _registry.getNftId(contractAddress);
|
65
|
-
|
66
|
-
return _nftId;
|
67
46
|
}
|
68
47
|
|
69
48
|
|
70
|
-
function getRegistry()
|
49
|
+
function getRegistry() public view virtual override returns (IRegistry) {
|
71
50
|
return _registry;
|
72
51
|
}
|
73
52
|
|
74
53
|
|
75
|
-
function getNftId()
|
54
|
+
function getNftId() public view virtual override returns (NftId) {
|
76
55
|
return _nftId;
|
77
56
|
}
|
78
57
|
|
79
58
|
|
80
|
-
function getOwner() public view returns (address) {
|
59
|
+
function getOwner() public view virtual override returns (address) {
|
81
60
|
if (_nftId.gtz()) {
|
82
61
|
return _registry.ownerOf(_nftId);
|
83
62
|
}
|
84
63
|
|
85
64
|
return _initialOwner;
|
86
65
|
}
|
66
|
+
|
67
|
+
|
68
|
+
/// @dev initialization for upgradable contracts
|
69
|
+
// used in _initializeRegisterable
|
70
|
+
function _initializeNftOwnable(
|
71
|
+
address initialOwner,
|
72
|
+
address registryAddress
|
73
|
+
)
|
74
|
+
internal
|
75
|
+
virtual
|
76
|
+
{
|
77
|
+
require(initialOwner > address(0), "NftOwnable: initial owner is 0");
|
78
|
+
_initialOwner = initialOwner;
|
79
|
+
_setRegistry(registryAddress);
|
80
|
+
}
|
81
|
+
|
82
|
+
|
83
|
+
/// @dev used in constructor of registry service manager
|
84
|
+
// links ownership of registry service manager ot nft owner of registry service
|
85
|
+
function _linkToNftOwnable(
|
86
|
+
address registryAddress,
|
87
|
+
address nftOwnableAddress
|
88
|
+
)
|
89
|
+
internal
|
90
|
+
onlyOwner()
|
91
|
+
returns (NftId)
|
92
|
+
{
|
93
|
+
if (_nftId.gtz()) {
|
94
|
+
revert ErrorAlreadyLinked(address(_registry), _nftId);
|
95
|
+
}
|
96
|
+
|
97
|
+
_setRegistry(registryAddress);
|
98
|
+
|
99
|
+
if (!_registry.isRegistered(nftOwnableAddress)) {
|
100
|
+
revert ErrorContractNotRegistered(nftOwnableAddress);
|
101
|
+
}
|
102
|
+
|
103
|
+
_nftId = _registry.getNftId(nftOwnableAddress);
|
104
|
+
|
105
|
+
return _nftId;
|
106
|
+
}
|
107
|
+
|
108
|
+
|
109
|
+
function _setRegistry(address registryAddress)
|
110
|
+
private
|
111
|
+
{
|
112
|
+
if (address(_registry) != address(0)) {
|
113
|
+
revert ErrorRegistryAlreadyInitialized(address(_registry));
|
114
|
+
}
|
115
|
+
|
116
|
+
if (registryAddress == address(0)) {
|
117
|
+
revert ErrorRegistryAddressZero();
|
118
|
+
}
|
119
|
+
|
120
|
+
if (registryAddress.code.length == 0) {
|
121
|
+
revert ErrorNotRegistry(registryAddress);
|
122
|
+
}
|
123
|
+
|
124
|
+
_registry = IRegistry(registryAddress);
|
125
|
+
|
126
|
+
try _registry.supportsInterface(type(IRegistry).interfaceId) returns (bool isRegistry) {
|
127
|
+
if (!isRegistry) {
|
128
|
+
revert ErrorNotRegistry(registryAddress);
|
129
|
+
}
|
130
|
+
} catch {
|
131
|
+
revert ErrorNotRegistry(registryAddress);
|
132
|
+
}
|
133
|
+
}
|
87
134
|
}
|
@@ -1,9 +1,9 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {Ownable} from "@
|
5
|
-
import {ProxyAdmin} from "@
|
6
|
-
import {ITransparentUpgradeableProxy} from "@
|
4
|
+
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
|
5
|
+
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
|
6
|
+
import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
|
7
7
|
|
8
8
|
import {IVersionable} from "./IVersionable.sol";
|
9
9
|
import {NftOwnable} from "./NftOwnable.sol";
|
@@ -55,15 +55,6 @@ contract ProxyManager is
|
|
55
55
|
emit LogProxyDeployed(address(_proxy), initialImplementation);
|
56
56
|
}
|
57
57
|
|
58
|
-
function linkToRegistry(address registryAddress)
|
59
|
-
public
|
60
|
-
virtual
|
61
|
-
{
|
62
|
-
// links ownership for this proxy manager to the owner of the underlying proxy nft
|
63
|
-
// applies onlyOwner modifier internally
|
64
|
-
linkToRegistry(registryAddress, address(_proxy));
|
65
|
-
}
|
66
|
-
|
67
58
|
/// @dev upgrade existing contract
|
68
59
|
function upgrade(address newImplementation, bytes memory upgradeData)
|
69
60
|
public
|
@@ -1,9 +1,10 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {Initializable} from "@
|
4
|
+
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
5
|
|
6
6
|
import {NftId, zeroNftId} from "../types/NftId.sol";
|
7
|
+
import {NftOwnable} from "../shared/NftOwnable.sol";
|
7
8
|
import {ObjectType} from "../types/ObjectType.sol";
|
8
9
|
|
9
10
|
import {IRegistry} from "../registry/IRegistry.sol";
|
@@ -12,18 +13,19 @@ import {Versionable} from "./Versionable.sol";
|
|
12
13
|
|
13
14
|
import {ERC165} from "./ERC165.sol";
|
14
15
|
|
15
|
-
|
16
|
+
contract Registerable is
|
16
17
|
ERC165,
|
17
|
-
|
18
|
-
|
18
|
+
Initializable,
|
19
|
+
NftOwnable,
|
20
|
+
IRegisterable
|
19
21
|
{
|
20
22
|
// keccak256(abi.encode(uint256(keccak256("gif-next.contracts.shared.Registerable.sol")) - 1)) & ~bytes32(uint256(0xff));
|
21
23
|
bytes32 public constant REGISTERABLE_LOCATION_V1 = 0x6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa300;
|
22
24
|
|
25
|
+
error ErrorRegisterableNotRegistry(address registryAddress);
|
26
|
+
|
23
27
|
struct RegisterableStorage {
|
24
|
-
IRegistry _registry;
|
25
28
|
NftId _parentNftId;
|
26
|
-
address _initialOwner;
|
27
29
|
ObjectType _objectType;
|
28
30
|
bool _isInterceptor;
|
29
31
|
bytes _data;
|
@@ -35,14 +37,6 @@ abstract contract Registerable is
|
|
35
37
|
}
|
36
38
|
}
|
37
39
|
|
38
|
-
modifier onlyOwner() virtual {
|
39
|
-
require(
|
40
|
-
msg.sender == getOwner(),
|
41
|
-
"ERROR:RGB-001:NOT_OWNER"
|
42
|
-
);
|
43
|
-
_;
|
44
|
-
}
|
45
|
-
|
46
40
|
function _initializeRegisterable(
|
47
41
|
address registryAddress,
|
48
42
|
NftId parentNftId,
|
@@ -55,44 +49,23 @@ abstract contract Registerable is
|
|
55
49
|
//onlyInitializing//TODO uncomment when "fully" upgradeable
|
56
50
|
virtual
|
57
51
|
{
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
52
|
+
_initializeERC165();
|
53
|
+
_initializeNftOwnable(
|
54
|
+
initialOwner,
|
55
|
+
registryAddress);
|
62
56
|
|
63
57
|
// TODO check parentNftId -> registry.isRegistered(parentNftId)
|
64
58
|
// TODO check object-parent type pair -> registry.isValidTypeCombo() or something...verify with registry that setup will be able to register...
|
65
59
|
|
66
|
-
IRegistry registry = IRegistry(registryAddress);
|
67
|
-
require(
|
68
|
-
registry.supportsInterface(type(IRegistry).interfaceId),
|
69
|
-
"ERROR:RGB-011:NOT_REGISTRY"
|
70
|
-
);
|
71
|
-
|
72
60
|
RegisterableStorage storage $ = _getRegisterableStorage();
|
73
|
-
$._registry = registry;
|
74
61
|
$._parentNftId = parentNftId;
|
75
62
|
$._objectType = objectType;
|
76
63
|
$._isInterceptor = isInterceptor;
|
77
|
-
$._initialOwner = initialOwner;// not msg.sender because called in proxy constructor where msg.sender is proxy deployer
|
78
64
|
$._data = data;
|
79
65
|
|
80
|
-
_registerInterface(type(
|
81
|
-
}
|
82
|
-
|
83
|
-
// from IOwnable
|
84
|
-
function getOwner() public view virtual returns (address) {
|
85
|
-
return _getRegisterableStorage()._registry.ownerOf(address(this));
|
66
|
+
_registerInterface(type(IRegisterable).interfaceId);
|
86
67
|
}
|
87
68
|
|
88
|
-
// from IRegisterable
|
89
|
-
function getRegistry() public view virtual returns (IRegistry registry) {
|
90
|
-
return _getRegisterableStorage()._registry;
|
91
|
-
}
|
92
|
-
|
93
|
-
function getNftId() public view virtual returns (NftId nftId) {
|
94
|
-
return _getRegisterableStorage()._registry.getNftId(address(this));
|
95
|
-
}
|
96
69
|
|
97
70
|
function getInitialInfo()
|
98
71
|
public
|
@@ -103,12 +76,12 @@ abstract contract Registerable is
|
|
103
76
|
RegisterableStorage storage $ = _getRegisterableStorage();
|
104
77
|
return (
|
105
78
|
IRegistry.ObjectInfo(
|
106
|
-
|
79
|
+
getNftId(),
|
107
80
|
$._parentNftId,
|
108
81
|
$._objectType,
|
109
82
|
$._isInterceptor,
|
110
83
|
address(this),
|
111
|
-
|
84
|
+
getOwner(),
|
112
85
|
$._data
|
113
86
|
),
|
114
87
|
bytes("")
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {Registerable} from "./Registerable.sol";
|
5
|
+
import {Versionable} from "./Versionable.sol";
|
6
|
+
|
7
|
+
/// @dev base contract for upgradable objects like services and upgradable components
|
8
|
+
/// deriving contracs need to call _initializeRegisterable
|
9
|
+
/// TODO internalizes versionable here, a non-registerable versionalbe might itself have some value but is outside the scope of the gif
|
10
|
+
/// after this merge versionable will no longer exist on its own in gif
|
11
|
+
/// only registerable and upgradable (which is a registerable too) will remain
|
12
|
+
abstract contract RegisterableUpgradable is
|
13
|
+
Registerable,
|
14
|
+
Versionable
|
15
|
+
{
|
16
|
+
}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
5
|
+
import {IService} from "./IService.sol";
|
6
|
+
import {IVersionable} from "./IVersionable.sol";
|
7
|
+
import {NftId, zeroNftId} from "../types/NftId.sol";
|
8
|
+
import {RegisterableUpgradable} from "./RegisterableUpgradable.sol";
|
9
|
+
import {SERVICE} from "../types/ObjectType.sol";
|
10
|
+
import {Version, VersionPart, VersionLib} from "../types/Version.sol";
|
11
|
+
import {Versionable} from "./Versionable.sol";
|
12
|
+
|
13
|
+
/// @dev service base contract
|
14
|
+
abstract contract Service is
|
15
|
+
RegisterableUpgradable,
|
16
|
+
IService
|
17
|
+
{
|
18
|
+
function getName() public pure virtual override returns(string memory name);
|
19
|
+
|
20
|
+
function getMajorVersion() public view virtual override returns(VersionPart majorVersion) {
|
21
|
+
return getVersion().toMajorPart();
|
22
|
+
}
|
23
|
+
|
24
|
+
// from Versionable
|
25
|
+
function getVersion()
|
26
|
+
public
|
27
|
+
pure
|
28
|
+
virtual override (IVersionable, Versionable)
|
29
|
+
returns(Version)
|
30
|
+
{
|
31
|
+
return VersionLib.toVersion(3,0,0);
|
32
|
+
}
|
33
|
+
|
34
|
+
function _initializeService(
|
35
|
+
address registry,
|
36
|
+
address initialOwner
|
37
|
+
)
|
38
|
+
internal
|
39
|
+
virtual
|
40
|
+
//onlyInitializing //TODO uncomment when "fully" upgradeable
|
41
|
+
{
|
42
|
+
// service must provide its name and version upon registration
|
43
|
+
bytes memory data = abi.encode(getName(), getMajorVersion());
|
44
|
+
NftId registryNftId = _getRegistryNftId(registry);
|
45
|
+
bool isInterceptor = false;
|
46
|
+
|
47
|
+
_initializeRegisterable(registry, registryNftId, SERVICE(), isInterceptor, initialOwner, data);
|
48
|
+
_registerInterface(type(IService).interfaceId);
|
49
|
+
}
|
50
|
+
|
51
|
+
// this is just a conveniene function, actual validation will be done upon registration
|
52
|
+
function _getRegistryNftId(address registryAddress) internal view returns (NftId) {
|
53
|
+
return IRegistry(registryAddress).getNftId(registryAddress);
|
54
|
+
}
|
55
|
+
}
|
@@ -0,0 +1,27 @@
|
|
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 {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
6
|
+
|
7
|
+
contract TokenHandler {
|
8
|
+
IERC20Metadata private _token;
|
9
|
+
|
10
|
+
constructor(address token) {
|
11
|
+
_token = IERC20Metadata(token);
|
12
|
+
}
|
13
|
+
|
14
|
+
// TODO add logging
|
15
|
+
function transfer(
|
16
|
+
address from,
|
17
|
+
address to,
|
18
|
+
uint256 amount // TODO add authz (only treasury/instance/product/pool/ service)
|
19
|
+
) external {
|
20
|
+
SafeERC20.safeTransferFrom(_token, from, to, amount);
|
21
|
+
// _token.transferFrom(from, to, amount);
|
22
|
+
}
|
23
|
+
|
24
|
+
function getToken() external view returns (IERC20Metadata) {
|
25
|
+
return _token;
|
26
|
+
}
|
27
|
+
}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {ProxyAdmin} from "@
|
5
|
-
import {TransparentUpgradeableProxy, ITransparentUpgradeableProxy} from "@
|
4
|
+
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
|
5
|
+
import {TransparentUpgradeableProxy, ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
|
6
6
|
|
7
7
|
import {IVersionable} from "./IVersionable.sol";
|
8
8
|
|
@@ -1,10 +1,10 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {Initializable} from "@
|
4
|
+
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
5
|
|
6
6
|
import {Blocknumber, blockNumber} from "../types/Blocknumber.sol";
|
7
|
-
import {Timestamp,
|
7
|
+
import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
|
8
8
|
import {Version, VersionPart, VersionLib} from "../types/Version.sol";
|
9
9
|
|
10
10
|
import {IVersionable} from "./IVersionable.sol";
|
@@ -138,7 +138,7 @@ abstract contract Versionable is
|
|
138
138
|
thisVersion,
|
139
139
|
implementation,
|
140
140
|
activatedBy,
|
141
|
-
blockTimestamp(),
|
141
|
+
TimestampLib.blockTimestamp(),
|
142
142
|
blockNumber()
|
143
143
|
);
|
144
144
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {UFixed,
|
4
|
+
import {UFixed, UFixedLib} from "../types/UFixed.sol";
|
5
5
|
import {Fee, FeeLib} from "../types/Fee.sol";
|
6
6
|
|
7
7
|
contract TestFee {
|
@@ -15,7 +15,7 @@ contract TestFee {
|
|
15
15
|
pure
|
16
16
|
returns(Fee memory fee)
|
17
17
|
{
|
18
|
-
return FeeLib.toFee(
|
18
|
+
return FeeLib.toFee(UFixedLib.toUFixed(fractionalValue, exponent), fixedValue);
|
19
19
|
}
|
20
20
|
|
21
21
|
function getZeroFee() external pure returns(Fee memory fee) {
|