@etherisc/gif-next 0.0.2-fe77319 → 0.0.2-fe88ad7-208
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 +364 -8
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +482 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +675 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
- package/artifacts/contracts/{instance/access/Access.sol/AccessModule.json → components/IBaseComponent.sol/IBaseComponent.json} +217 -220
- 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 +4 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +275 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/{instance/pool/PoolModule.sol/PoolModule.json → components/IProductComponent.sol/IProductComponent.json} +81 -86
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +687 -40
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +612 -50
- 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 +4 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +105 -0
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +4 -0
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +105 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +128 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +4 -0
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +42 -0
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +4 -0
- package/artifacts/contracts/experiment/{B.sol → inheritance/B.sol}/B.json +2 -2
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +4 -0
- package/artifacts/contracts/experiment/{C.sol → inheritance/C.sol}/C.json +2 -2
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +4 -0
- package/artifacts/contracts/experiment/{IA.sol → inheritance/IA.sol}/IA.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +4 -0
- package/artifacts/contracts/experiment/{IA.sol → inheritance/IA.sol}/ISharedA.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +4 -0
- package/artifacts/contracts/experiment/{IB.sol → inheritance/IB.sol}/IB.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +4 -0
- package/artifacts/contracts/experiment/{IC.sol → inheritance/IC.sol}/IC.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +4 -0
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +10 -0
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +4 -0
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +10 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1314 -469
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +570 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2531 -505
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1047 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -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 +963 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +460 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +532 -0
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.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/ITreasury.sol/ITreasury.json +10 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +945 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +432 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +814 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +693 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +420 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
- 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/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +499 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +536 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +993 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +420 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +771 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +449 -76
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +976 -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 +544 -79
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1195 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +546 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -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 +4 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
- 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 +4 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +201 -0
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
- 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 +4 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
- 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 +4 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
- package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
- package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
- 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 +4 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +153 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
- 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 +4 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
- 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 +4 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +249 -0
- 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/UFixedLib.json +479 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
- package/contracts/components/BaseComponent.sol +159 -0
- package/contracts/components/Distribution.sol +163 -0
- package/contracts/components/IBaseComponent.sol +34 -0
- package/contracts/components/IDistributionComponent.sol +44 -0
- package/contracts/components/IPoolComponent.sol +66 -0
- package/contracts/components/IProductComponent.sol +35 -0
- package/contracts/components/Pool.sol +260 -18
- package/contracts/components/Product.sol +263 -36
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/experiment/errors/Require.sol +38 -0
- package/contracts/experiment/errors/Revert.sol +44 -0
- package/contracts/experiment/{A.sol → inheritance/A.sol} +8 -11
- package/contracts/experiment/{B.sol → inheritance/B.sol} +10 -5
- package/contracts/experiment/{C.sol → inheritance/C.sol} +11 -5
- package/contracts/experiment/{IA.sol → inheritance/IA.sol} +2 -7
- package/contracts/experiment/{IB.sol → inheritance/IB.sol} +3 -2
- package/contracts/experiment/inheritance/IC.sol +12 -0
- package/contracts/experiment/statemachine/Dummy.sol +27 -0
- package/contracts/experiment/statemachine/ISM.sol +25 -0
- package/contracts/experiment/statemachine/SM.sol +57 -0
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
- package/contracts/experiment/types/TypeA.sol +47 -0
- package/contracts/experiment/types/TypeB.sol +29 -0
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
- package/contracts/instance/BundleManager.sol +129 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +57 -15
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +40 -0
- package/contracts/instance/Instance.sol +257 -44
- package/contracts/instance/InstanceAccessManager.sol +303 -0
- package/contracts/instance/InstanceBase.sol +41 -0
- package/contracts/instance/InstanceReader.sol +315 -0
- package/contracts/instance/InstanceService.sol +350 -0
- package/contracts/instance/InstanceServiceManager.sol +54 -0
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +82 -0
- package/contracts/instance/base/IInstanceBase.sol +23 -0
- package/contracts/instance/base/IKeyValueStore.sol +49 -0
- package/contracts/instance/base/ILifecycle.sol +30 -0
- package/contracts/instance/base/KeyValueStore.sol +172 -0
- package/contracts/instance/base/Lifecycle.sol +100 -0
- package/contracts/instance/module/IAccess.sol +48 -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 +46 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/BundleService.sol +260 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ComponentOwnerService.sol +315 -0
- package/contracts/instance/service/DistributionService.sol +113 -0
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- package/contracts/instance/service/IBundleService.sol +45 -0
- package/contracts/instance/service/IComponentOwnerService.sol +20 -0
- package/contracts/instance/service/IDistributionService.sol +12 -0
- package/contracts/instance/service/IPolicyService.sol +87 -0
- package/contracts/instance/service/IPoolService.sol +20 -0
- package/contracts/instance/service/IProductService.sol +40 -0
- package/contracts/instance/service/PolicyService.sol +503 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +124 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +170 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +202 -0
- package/contracts/registry/IRegistry.sol +78 -53
- package/contracts/registry/IRegistryService.sol +58 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +329 -130
- package/contracts/registry/RegistryAccessManager.sol +210 -0
- package/contracts/registry/RegistryService.sol +323 -0
- package/contracts/registry/RegistryServiceManager.sol +62 -0
- package/contracts/registry/ReleaseManager.sol +348 -0
- package/contracts/registry/TokenRegistry.sol +110 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +25 -0
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +17 -0
- package/contracts/shared/IService.sol +16 -0
- package/contracts/shared/IVersionable.sol +96 -0
- package/contracts/shared/NftOwnable.sol +134 -0
- package/contracts/shared/ProxyManager.sol +94 -0
- package/contracts/shared/Registerable.sol +90 -0
- package/contracts/shared/RegisterableUpgradable.sol +16 -0
- package/contracts/shared/Service.sol +58 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +147 -0
- package/contracts/test/TestFee.sol +25 -0
- package/contracts/test/TestRegisterable.sol +18 -0
- package/contracts/test/TestRoleId.sol +14 -0
- package/contracts/test/TestService.sol +25 -0
- package/contracts/test/TestToken.sol +26 -0
- package/contracts/test/TestVersion.sol +44 -0
- package/contracts/test/TestVersionable.sol +17 -0
- package/contracts/test/Usdc.sol +26 -0
- package/contracts/types/AddressSet.sol +58 -0
- package/contracts/types/Blocknumber.sol +118 -0
- package/contracts/types/ChainId.sol +38 -0
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +56 -0
- package/contracts/types/Key32.sol +50 -0
- package/contracts/types/NftId.sol +72 -0
- package/contracts/types/NftIdSet.sol +62 -0
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +152 -0
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +90 -0
- package/contracts/types/StateId.sol +105 -0
- package/contracts/types/Timestamp.sol +127 -0
- package/contracts/types/UFixed.sol +325 -0
- package/contracts/types/Version.sol +107 -0
- package/package.json +21 -6
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
- package/artifacts/contracts/components/Component.sol/Component.json +0 -179
- package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
- package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
- package/artifacts/contracts/experiment/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
- package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
- package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
- package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
- package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
- package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
- package/contracts/components/Component.sol +0 -62
- package/contracts/components/IPool.sol +0 -9
- package/contracts/components/IProduct.sol +0 -11
- package/contracts/experiment/IC.sol +0 -11
- package/contracts/instance/access/Access.sol +0 -218
- package/contracts/instance/access/IAccess.sol +0 -83
- package/contracts/instance/component/ComponentModule.sol +0 -259
- package/contracts/instance/component/IComponent.sol +0 -94
- package/contracts/instance/policy/IPolicy.sol +0 -66
- package/contracts/instance/policy/PolicyModule.sol +0 -106
- package/contracts/instance/pool/IPoolModule.sol +0 -40
- package/contracts/instance/pool/PoolModule.sol +0 -83
- package/contracts/instance/product/IProductService.sol +0 -45
- package/contracts/instance/product/ProductService.sol +0 -105
@@ -0,0 +1,96 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {Blocknumber} from "../types/Blocknumber.sol";
|
5
|
+
import {Timestamp} from "../types/Timestamp.sol";
|
6
|
+
import {Version} from "../types/Version.sol";
|
7
|
+
|
8
|
+
|
9
|
+
/// IMPORTANT
|
10
|
+
// Upgradeable contract MUST:
|
11
|
+
// 1) inherit from Versionable
|
12
|
+
// 2) implement version() function
|
13
|
+
// 3) implement internal _initialize() function with onlyInitializing modifier
|
14
|
+
// 4) implement internal _upgrade() function with onlyInitializing modifier (1st version MUST revert)
|
15
|
+
// 5) have onlyInitialising modifier for each function callable inside _initialize()/_upgrade() (MUST use different functions for initialization/upgrade and normal operations)
|
16
|
+
// 6) use default empty constructor -> _disableInitializer() is called from Versionable contructor
|
17
|
+
// 7) use namespace storage
|
18
|
+
// 8) since now inheritance is used for upgradability, contract MUST BE inherited ONLY by the next version
|
19
|
+
// Upgradeable contract SHOULD:
|
20
|
+
// 9) define all non private methods as virtual (in order to be able to upgrade them latter)
|
21
|
+
// otherwise, it is still possible to upgrade contract, but everyone who is using it will have to switch to a new fucntions
|
22
|
+
// in some cases this ok but not in the others...
|
23
|
+
//
|
24
|
+
// IMPORTANT
|
25
|
+
// Each version MUST:
|
26
|
+
// 1) define namespace storage struct if accessing storage
|
27
|
+
// - DO NOT use structs inside, except
|
28
|
+
// - CAN use structs ONLY inside mappings
|
29
|
+
// 2) ALWAYS define private getter if accessing storage
|
30
|
+
// - MUST use default implementation, CAN change ONLY return type
|
31
|
+
// - MUST use the same "LOCATION_V1"
|
32
|
+
|
33
|
+
interface IVersionable {
|
34
|
+
|
35
|
+
struct VersionInfo {
|
36
|
+
Version version;
|
37
|
+
address implementation;
|
38
|
+
address activatedBy;
|
39
|
+
Timestamp activatedAt;
|
40
|
+
Blocknumber activatedIn;
|
41
|
+
}
|
42
|
+
|
43
|
+
event LogVersionableInitialized(Version version, address implementation, address activatedBy);
|
44
|
+
|
45
|
+
// TODO uncomment when all implementations are ready
|
46
|
+
/**
|
47
|
+
* @dev IMPORTANT
|
48
|
+
* implementation MUST be guarded by initializer modifier
|
49
|
+
* implementation MUST call internal function Versionable._updateVersionHistory
|
50
|
+
* new version MUST inherit from previous version
|
51
|
+
*/
|
52
|
+
function initialize(address implementation, address activatedBy, bytes memory activationData) external;
|
53
|
+
|
54
|
+
/**
|
55
|
+
* @dev
|
56
|
+
* implementation MUST be guarded by reinitializer(version().toUint64()) modifier
|
57
|
+
* implementation MUST call internal function Versionable._updateVersionHistory
|
58
|
+
* new version MUST inherit from previous version
|
59
|
+
* the first verion MUST revert
|
60
|
+
*/
|
61
|
+
function upgrade(address implementation, address activatedBy, bytes memory upgradeData) external;
|
62
|
+
|
63
|
+
/**
|
64
|
+
* @dev returns true if the specified version has been activated for the current contract
|
65
|
+
*/
|
66
|
+
function isInitialized(Version version) external view returns(bool);
|
67
|
+
|
68
|
+
/**
|
69
|
+
* @dev returns version of this contract
|
70
|
+
* each new implementation MUST implement this function
|
71
|
+
* version number MUST increase
|
72
|
+
*/
|
73
|
+
function getVersion() external pure returns(Version);
|
74
|
+
|
75
|
+
/**
|
76
|
+
* @dev returns the number of all deployed versions of this contract
|
77
|
+
*/
|
78
|
+
function getVersionCount() external view returns(uint256 numberOfVersions);
|
79
|
+
|
80
|
+
/**
|
81
|
+
* @dev returns the i-th (index) version of this contract
|
82
|
+
*/
|
83
|
+
function getVersion(uint256 index) external view returns(Version version);
|
84
|
+
|
85
|
+
/**
|
86
|
+
* @dev returns the i-th (index) version info of this contract
|
87
|
+
*/
|
88
|
+
function getVersionInfo(Version version) external view returns(VersionInfo memory versionInfo);
|
89
|
+
|
90
|
+
// TODO make sure it is needed here
|
91
|
+
/**
|
92
|
+
* @dev returns currently active version
|
93
|
+
*/
|
94
|
+
function getInitializedVersion() external view returns(uint64);
|
95
|
+
|
96
|
+
}
|
@@ -0,0 +1,134 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {INftOwnable} from "./INftOwnable.sol";
|
5
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
6
|
+
import {NftId, zeroNftId} from "../types/NftId.sol";
|
7
|
+
|
8
|
+
contract NftOwnable is INftOwnable {
|
9
|
+
|
10
|
+
IRegistry internal _registry;
|
11
|
+
NftId private _nftId;
|
12
|
+
address private _initialOwner;
|
13
|
+
|
14
|
+
/// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
|
15
|
+
modifier onlyOwner() {
|
16
|
+
if (msg.sender != getOwner()) {
|
17
|
+
revert ErrorNotOwner(msg.sender);
|
18
|
+
}
|
19
|
+
_;
|
20
|
+
}
|
21
|
+
|
22
|
+
constructor() {
|
23
|
+
_initialOwner = msg.sender;
|
24
|
+
}
|
25
|
+
|
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 {
|
31
|
+
if (_nftId.gtz()) {
|
32
|
+
revert ErrorAlreadyLinked(address(_registry), _nftId);
|
33
|
+
}
|
34
|
+
|
35
|
+
if (address(_registry) == address(0)) {
|
36
|
+
revert ErrorRegistryNotInitialized();
|
37
|
+
}
|
38
|
+
|
39
|
+
address contractAddress = address(this);
|
40
|
+
|
41
|
+
if (!_registry.isRegistered(contractAddress)) {
|
42
|
+
revert ErrorContractNotRegistered(contractAddress);
|
43
|
+
}
|
44
|
+
|
45
|
+
_nftId = _registry.getNftId(contractAddress);
|
46
|
+
}
|
47
|
+
|
48
|
+
|
49
|
+
function getRegistry() public view virtual override returns (IRegistry) {
|
50
|
+
return _registry;
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
function getNftId() public view virtual override returns (NftId) {
|
55
|
+
return _nftId;
|
56
|
+
}
|
57
|
+
|
58
|
+
|
59
|
+
function getOwner() public view virtual override returns (address) {
|
60
|
+
if (_nftId.gtz()) {
|
61
|
+
return _registry.ownerOf(_nftId);
|
62
|
+
}
|
63
|
+
|
64
|
+
return _initialOwner;
|
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
|
+
}
|
134
|
+
}
|
@@ -0,0 +1,94 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
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
|
+
|
8
|
+
import {IVersionable} from "./IVersionable.sol";
|
9
|
+
import {NftOwnable} from "./NftOwnable.sol";
|
10
|
+
import {UpgradableProxyWithAdmin} from "./UpgradableProxyWithAdmin.sol";
|
11
|
+
|
12
|
+
/// @dev manages proxy deployments for upgradable contracs of type IVersionable
|
13
|
+
contract ProxyManager is
|
14
|
+
NftOwnable
|
15
|
+
{
|
16
|
+
|
17
|
+
event LogProxyDeployed(address indexed proxy, address initialImplementation);
|
18
|
+
event LogProxyDeployedWithSalt(address indexed proxy, address initialImplementation);
|
19
|
+
event LogProxyUpgraded(address indexed proxy, address upgradedImplementation);
|
20
|
+
|
21
|
+
error ErrorAlreadyDeployed();
|
22
|
+
error ErrorAlreadyDeployedWithSalt();
|
23
|
+
error ErrorNotYetDeployed();
|
24
|
+
|
25
|
+
UpgradableProxyWithAdmin internal _proxy;
|
26
|
+
bool internal _isDeployed;
|
27
|
+
|
28
|
+
/// @dev only used to capture proxy owner
|
29
|
+
constructor()
|
30
|
+
NftOwnable()
|
31
|
+
{ }
|
32
|
+
|
33
|
+
/// @dev deploy initial contract
|
34
|
+
function deploy(address initialImplementation, bytes memory initializationData)
|
35
|
+
public
|
36
|
+
virtual
|
37
|
+
onlyOwner()
|
38
|
+
returns (IVersionable versionable)
|
39
|
+
{
|
40
|
+
if (_isDeployed) { revert ErrorAlreadyDeployed(); }
|
41
|
+
_isDeployed = true;
|
42
|
+
|
43
|
+
address currentProxyOwner = getOwner(); // used by implementation
|
44
|
+
address initialProxyAdminOwner = address(this); // used by proxy
|
45
|
+
bytes memory data = getDeployData(initialImplementation, currentProxyOwner, initializationData);
|
46
|
+
|
47
|
+
_proxy = new UpgradableProxyWithAdmin(
|
48
|
+
initialImplementation,
|
49
|
+
initialProxyAdminOwner,
|
50
|
+
data
|
51
|
+
);
|
52
|
+
|
53
|
+
versionable = IVersionable(address(_proxy));
|
54
|
+
|
55
|
+
emit LogProxyDeployed(address(_proxy), initialImplementation);
|
56
|
+
}
|
57
|
+
|
58
|
+
/// @dev upgrade existing contract
|
59
|
+
function upgrade(address newImplementation, bytes memory upgradeData)
|
60
|
+
public
|
61
|
+
virtual
|
62
|
+
onlyOwner()
|
63
|
+
returns (IVersionable versionable)
|
64
|
+
{
|
65
|
+
if (!_isDeployed) { revert ErrorNotYetDeployed(); }
|
66
|
+
|
67
|
+
address currentProxyOwner = getOwner();
|
68
|
+
ProxyAdmin proxyAdmin = getProxy().getProxyAdmin();
|
69
|
+
ITransparentUpgradeableProxy proxy = ITransparentUpgradeableProxy(address(_proxy));
|
70
|
+
bytes memory data = getUpgradeData(newImplementation, currentProxyOwner, upgradeData);
|
71
|
+
|
72
|
+
proxyAdmin.upgradeAndCall(
|
73
|
+
proxy,
|
74
|
+
newImplementation,
|
75
|
+
data);
|
76
|
+
|
77
|
+
versionable = IVersionable(address(_proxy));
|
78
|
+
|
79
|
+
emit LogProxyUpgraded(address(_proxy), newImplementation);
|
80
|
+
|
81
|
+
}
|
82
|
+
|
83
|
+
function getDeployData(address implementation, address proxyOwner, bytes memory deployData) public pure returns (bytes memory data) {
|
84
|
+
return abi.encodeWithSelector(IVersionable.initialize.selector, implementation, proxyOwner, deployData);
|
85
|
+
}
|
86
|
+
|
87
|
+
function getUpgradeData(address implementation, address proxyOwner, bytes memory upgradeData) public pure returns (bytes memory data) {
|
88
|
+
return abi.encodeWithSelector(IVersionable.upgrade.selector, implementation, proxyOwner, upgradeData);
|
89
|
+
}
|
90
|
+
|
91
|
+
function getProxy() public returns (UpgradableProxyWithAdmin) {
|
92
|
+
return _proxy;
|
93
|
+
}
|
94
|
+
}
|
@@ -0,0 +1,90 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
|
+
|
6
|
+
import {NftId, zeroNftId} from "../types/NftId.sol";
|
7
|
+
import {NftOwnable} from "../shared/NftOwnable.sol";
|
8
|
+
import {ObjectType} from "../types/ObjectType.sol";
|
9
|
+
|
10
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
11
|
+
import {IRegisterable} from "./IRegisterable.sol";
|
12
|
+
import {Versionable} from "./Versionable.sol";
|
13
|
+
|
14
|
+
import {ERC165} from "./ERC165.sol";
|
15
|
+
|
16
|
+
contract Registerable is
|
17
|
+
ERC165,
|
18
|
+
Initializable,
|
19
|
+
NftOwnable,
|
20
|
+
IRegisterable
|
21
|
+
{
|
22
|
+
// keccak256(abi.encode(uint256(keccak256("gif-next.contracts.shared.Registerable.sol")) - 1)) & ~bytes32(uint256(0xff));
|
23
|
+
bytes32 public constant REGISTERABLE_LOCATION_V1 = 0x6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa300;
|
24
|
+
|
25
|
+
error ErrorRegisterableNotRegistry(address registryAddress);
|
26
|
+
|
27
|
+
struct RegisterableStorage {
|
28
|
+
NftId _parentNftId;
|
29
|
+
ObjectType _objectType;
|
30
|
+
bool _isInterceptor;
|
31
|
+
bytes _data;
|
32
|
+
}
|
33
|
+
|
34
|
+
function _getRegisterableStorage() private pure returns (RegisterableStorage storage $) {
|
35
|
+
assembly {
|
36
|
+
$.slot := REGISTERABLE_LOCATION_V1
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
function _initializeRegisterable(
|
41
|
+
address registryAddress,
|
42
|
+
NftId parentNftId,
|
43
|
+
ObjectType objectType,
|
44
|
+
bool isInterceptor,
|
45
|
+
address initialOwner,
|
46
|
+
bytes memory data
|
47
|
+
)
|
48
|
+
internal
|
49
|
+
//onlyInitializing//TODO uncomment when "fully" upgradeable
|
50
|
+
virtual
|
51
|
+
{
|
52
|
+
_initializeERC165();
|
53
|
+
_initializeNftOwnable(
|
54
|
+
initialOwner,
|
55
|
+
registryAddress);
|
56
|
+
|
57
|
+
// TODO check parentNftId -> registry.isRegistered(parentNftId)
|
58
|
+
// TODO check object-parent type pair -> registry.isValidTypeCombo() or something...verify with registry that setup will be able to register...
|
59
|
+
|
60
|
+
RegisterableStorage storage $ = _getRegisterableStorage();
|
61
|
+
$._parentNftId = parentNftId;
|
62
|
+
$._objectType = objectType;
|
63
|
+
$._isInterceptor = isInterceptor;
|
64
|
+
$._data = data;
|
65
|
+
|
66
|
+
_registerInterface(type(IRegisterable).interfaceId);
|
67
|
+
}
|
68
|
+
|
69
|
+
|
70
|
+
function getInitialInfo()
|
71
|
+
public
|
72
|
+
view
|
73
|
+
virtual
|
74
|
+
returns (IRegistry.ObjectInfo memory, bytes memory data)
|
75
|
+
{
|
76
|
+
RegisterableStorage storage $ = _getRegisterableStorage();
|
77
|
+
return (
|
78
|
+
IRegistry.ObjectInfo(
|
79
|
+
getNftId(),
|
80
|
+
$._parentNftId,
|
81
|
+
$._objectType,
|
82
|
+
$._isInterceptor,
|
83
|
+
address(this),
|
84
|
+
getOwner(),
|
85
|
+
$._data
|
86
|
+
),
|
87
|
+
bytes("")
|
88
|
+
);
|
89
|
+
}
|
90
|
+
}
|
@@ -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,58 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {ObjectType, SERVICE} from "../types/ObjectType.sol";
|
5
|
+
import {NftId, zeroNftId} from "../types/NftId.sol";
|
6
|
+
import {Version, VersionPart, VersionLib} from "../types/Version.sol";
|
7
|
+
|
8
|
+
import {Versionable} from "./Versionable.sol";
|
9
|
+
import {IService} from "./IService.sol";
|
10
|
+
import {IVersionable} from "./IVersionable.sol";
|
11
|
+
import {RegisterableUpgradable} from "./RegisterableUpgradable.sol";
|
12
|
+
|
13
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
14
|
+
|
15
|
+
|
16
|
+
/// @dev service base contract
|
17
|
+
abstract contract Service is
|
18
|
+
RegisterableUpgradable,
|
19
|
+
IService
|
20
|
+
{
|
21
|
+
function getDomain() public pure virtual override returns(ObjectType);
|
22
|
+
|
23
|
+
function getMajorVersion() public view virtual override returns(VersionPart majorVersion) {
|
24
|
+
return getVersion().toMajorPart();
|
25
|
+
}
|
26
|
+
|
27
|
+
// from Versionable
|
28
|
+
function getVersion()
|
29
|
+
public
|
30
|
+
pure
|
31
|
+
virtual override (IVersionable, Versionable)
|
32
|
+
returns(Version)
|
33
|
+
{
|
34
|
+
return VersionLib.toVersion(3,0,0);
|
35
|
+
}
|
36
|
+
|
37
|
+
function _initializeService(
|
38
|
+
address registry,
|
39
|
+
address initialOwner
|
40
|
+
)
|
41
|
+
internal
|
42
|
+
virtual
|
43
|
+
//onlyInitializing //TODO uncomment when "fully" upgradeable
|
44
|
+
{
|
45
|
+
// service must provide its name and version upon registration
|
46
|
+
bytes memory data = abi.encode(getDomain(), getMajorVersion());
|
47
|
+
NftId registryNftId = _getRegistryNftId(registry);
|
48
|
+
bool isInterceptor = false;
|
49
|
+
|
50
|
+
_initializeRegisterable(registry, registryNftId, SERVICE(), isInterceptor, initialOwner, data);
|
51
|
+
_registerInterface(type(IService).interfaceId);
|
52
|
+
}
|
53
|
+
|
54
|
+
// this is just a conveniene function, actual validation will be done upon registration
|
55
|
+
function _getRegistryNftId(address registryAddress) internal view returns (NftId) {
|
56
|
+
return IRegistry(registryAddress).getNftId(registryAddress);
|
57
|
+
}
|
58
|
+
}
|
@@ -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
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
|
5
|
+
import {TransparentUpgradeableProxy, ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
|
6
|
+
|
7
|
+
import {IVersionable} from "./IVersionable.sol";
|
8
|
+
|
9
|
+
contract UpgradableProxyWithAdmin is TransparentUpgradeableProxy {
|
10
|
+
|
11
|
+
constructor(address implementation, address initialProxyAdminOwner, bytes memory data)
|
12
|
+
TransparentUpgradeableProxy(implementation, initialProxyAdminOwner, data)
|
13
|
+
{}
|
14
|
+
|
15
|
+
function getProxyAdmin() external returns (ProxyAdmin) { return ProxyAdmin(_proxyAdmin()); }
|
16
|
+
}
|
@@ -0,0 +1,147 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
|
+
|
6
|
+
import {Blocknumber, blockNumber} from "../types/Blocknumber.sol";
|
7
|
+
import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
|
8
|
+
import {Version, VersionPart, VersionLib} from "../types/Version.sol";
|
9
|
+
|
10
|
+
import {IVersionable} from "./IVersionable.sol";
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
abstract contract Versionable is
|
15
|
+
Initializable,
|
16
|
+
IVersionable
|
17
|
+
{
|
18
|
+
// keccak256(abi.encode(uint256(keccak256("gif-next.contracts.shared.Versionable.sol")) - 1)) & ~bytes32(uint256(0xff))
|
19
|
+
bytes32 private constant VERSIONABLE_LOCATION_V1 = 0x4f61291a8ac3d020d0a7d919a76b8592aa88385744dee3f8b4f3873b969ed900;
|
20
|
+
|
21
|
+
|
22
|
+
/// @custom:storage-location erc7201:gif-next.contracts.shared.Versionable.sol
|
23
|
+
struct VersionableStorage {
|
24
|
+
mapping(Version version => VersionInfo info) _versionHistory;
|
25
|
+
Version [] _versions;
|
26
|
+
Version _v1;
|
27
|
+
}
|
28
|
+
|
29
|
+
|
30
|
+
constructor() {
|
31
|
+
_disableInitializers();
|
32
|
+
}
|
33
|
+
// TODO write test where new version of private _updateVersionHistory is added and used...
|
34
|
+
function initialize(
|
35
|
+
address implementation,
|
36
|
+
address activatedBy,
|
37
|
+
bytes memory data
|
38
|
+
)
|
39
|
+
public
|
40
|
+
initializer
|
41
|
+
{
|
42
|
+
_updateVersionHistory(implementation, activatedBy);
|
43
|
+
_initialize(activatedBy, data);
|
44
|
+
}
|
45
|
+
|
46
|
+
// TODO activatedBy MUST ALWAYS be an owner?
|
47
|
+
function upgrade(
|
48
|
+
address implementation,
|
49
|
+
address activatedBy,
|
50
|
+
bytes memory data
|
51
|
+
)
|
52
|
+
external
|
53
|
+
reinitializer(VersionLib.toUint64(getVersion()))
|
54
|
+
{
|
55
|
+
_updateVersionHistory(implementation, activatedBy);
|
56
|
+
_upgrade(data);
|
57
|
+
}
|
58
|
+
|
59
|
+
function isInitialized(Version _version) public override view returns(bool) {
|
60
|
+
return _getVersionableStorage()._versionHistory[_version].activatedIn.toInt() > 0;
|
61
|
+
}
|
62
|
+
|
63
|
+
function getVersion() public pure virtual returns(Version);
|
64
|
+
|
65
|
+
function getVersionCount() public view override returns(uint256) {
|
66
|
+
return _getVersionableStorage()._versions.length;
|
67
|
+
}
|
68
|
+
|
69
|
+
function getVersion(uint256 idx) public view override returns(Version) {
|
70
|
+
return _getVersionableStorage()._versions[idx];
|
71
|
+
}
|
72
|
+
|
73
|
+
function getVersionInfo(Version _version) public override view returns(VersionInfo memory) {
|
74
|
+
return _getVersionableStorage()._versionHistory[_version];
|
75
|
+
}
|
76
|
+
|
77
|
+
function getInitializedVersion() public view returns(uint64) {
|
78
|
+
return _getInitializedVersion();
|
79
|
+
}
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
// IMPORTANT each version must implement this function
|
84
|
+
// each implementation MUST use onlyInitialising modifier
|
85
|
+
// each implementation MUST call intializers of all base contracts...
|
86
|
+
function _initialize(address owner, bytes memory data)
|
87
|
+
internal
|
88
|
+
onlyInitializing
|
89
|
+
virtual
|
90
|
+
{
|
91
|
+
revert();
|
92
|
+
}
|
93
|
+
|
94
|
+
|
95
|
+
// IMPORTANT each version except version "1" must implement this function
|
96
|
+
// each implementation MUST use onlyInitialising modifier
|
97
|
+
function _upgrade(bytes memory data)
|
98
|
+
internal
|
99
|
+
onlyInitializing
|
100
|
+
virtual
|
101
|
+
{
|
102
|
+
revert();
|
103
|
+
}
|
104
|
+
|
105
|
+
function _getVersionableStorage() private pure returns (VersionableStorage storage $) {
|
106
|
+
assembly {
|
107
|
+
$.slot := VERSIONABLE_LOCATION_V1
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
// can only be called once per contract
|
112
|
+
// needs to be called inside the proxy upgrade tx
|
113
|
+
// TODO run reinitializer(version().toUint64()) modifier after "version()" is checked,
|
114
|
+
function _updateVersionHistory(
|
115
|
+
address implementation,
|
116
|
+
address activatedBy
|
117
|
+
)
|
118
|
+
private
|
119
|
+
onlyInitializing
|
120
|
+
{
|
121
|
+
VersionableStorage storage $ = _getVersionableStorage();
|
122
|
+
|
123
|
+
uint64 version = _getInitializedVersion();
|
124
|
+
|
125
|
+
Version thisVersion = getVersion();
|
126
|
+
|
127
|
+
if(version == 1) {
|
128
|
+
// thisVersion is alias to version "1"
|
129
|
+
$._v1 = thisVersion;
|
130
|
+
}
|
131
|
+
else {
|
132
|
+
require(thisVersion > $._v1, "INVALID VERSION");
|
133
|
+
}
|
134
|
+
|
135
|
+
// update version history
|
136
|
+
$._versions.push(thisVersion);
|
137
|
+
$._versionHistory[thisVersion] = VersionInfo(
|
138
|
+
thisVersion,
|
139
|
+
implementation,
|
140
|
+
activatedBy,
|
141
|
+
TimestampLib.blockTimestamp(),
|
142
|
+
blockNumber()
|
143
|
+
);
|
144
|
+
|
145
|
+
emit LogVersionableInitialized(thisVersion, implementation, activatedBy);
|
146
|
+
}
|
147
|
+
}
|