@etherisc/gif-next 0.0.2-a4b0112-987 → 0.0.2-a84e908-436
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 +145 -6
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +26 -57
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +405 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
- package/artifacts/contracts/{instance/component/IComponent.sol/IComponentContract.json → components/IBaseComponent.sol/IBaseComponent.json} +26 -57
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IDistributionComponent.sol/IDistributionComponent.json} +162 -77
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +487 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +370 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +290 -40
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +167 -69
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
- 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/TypeA.sol/TypeALib.json +2 -2
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1177 -608
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1501 -773
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +364 -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 +560 -0
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → base/IService.sol/IService.json} +167 -125
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +440 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -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/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +364 -0
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +297 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +297 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +117 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +51 -61
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.json +10 -0
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +147 -117
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +148 -118
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +67 -52
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +51 -62
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +113 -0
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +131 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasuryModule.json +278 -257
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol/TreasuryModule.json +278 -257
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +595 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +484 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +405 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +366 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +481 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +671 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +607 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +922 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +134 -30
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +493 -25
- 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/IOwnable.sol/IOwnable.dbg.json +4 -0
- package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
- package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +16 -61
- 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/Proxy.sol/ProxyDeployer.dbg.json +4 -0
- package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.json +248 -0
- package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +4 -0
- package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.json +129 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
- package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +16 -61
- 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/TestDistribution.sol/TestDistribution.dbg.json +4 -0
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +405 -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/TestPool.sol/TestPool.dbg.json +4 -0
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +578 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +575 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -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 +443 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -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 +270 -0
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
- package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -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 +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
- 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 +111 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -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/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -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 +30 -0
- 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 +64 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +88 -62
- 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 +30 -0
- package/contracts/components/BaseComponent.sol +94 -0
- package/contracts/components/Distribution.sol +132 -0
- package/contracts/components/IBaseComponent.sol +19 -0
- package/contracts/components/IDistributionComponent.sol +47 -0
- package/contracts/components/IPoolComponent.sol +71 -0
- package/contracts/components/IProductComponent.sol +38 -0
- package/contracts/components/Pool.sol +199 -16
- package/contracts/components/Product.sol +169 -31
- package/contracts/instance/IInstance.sol +39 -11
- package/contracts/instance/IInstanceLinked.sol +8 -0
- package/contracts/instance/Instance.sol +51 -49
- package/contracts/instance/base/ComponentServiceBase.sol +42 -0
- package/contracts/instance/base/IInstanceBase.sol +22 -0
- package/contracts/instance/base/IKeyValueStore.sol +50 -0
- package/contracts/instance/{lifecycle → base}/ILifecycle.sol +4 -21
- package/contracts/instance/base/IService.sol +15 -0
- package/contracts/instance/base/InstanceBase.sol +91 -0
- package/contracts/instance/base/KeyValueStore.sol +161 -0
- package/contracts/instance/base/Lifecycle.sol +100 -0
- package/contracts/instance/base/ModuleBase.sol +57 -0
- package/contracts/instance/base/ServiceBase.sol +37 -0
- package/contracts/instance/module/access/Access.sol +149 -0
- package/contracts/instance/module/access/IAccess.sol +53 -0
- package/contracts/instance/module/bundle/BundleModule.sol +134 -0
- package/contracts/instance/module/bundle/IBundle.sol +53 -0
- package/contracts/instance/module/component/ComponentModule.sol +70 -0
- package/contracts/instance/module/component/IComponent.sol +28 -0
- package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
- package/contracts/instance/module/distribution/IDistribution.sol +10 -0
- package/contracts/instance/module/policy/IPolicy.sol +63 -0
- package/contracts/instance/module/policy/PolicyModule.sol +91 -0
- package/contracts/instance/module/pool/IPoolModule.sol +40 -0
- package/contracts/instance/module/pool/PoolModule.sol +90 -0
- package/contracts/instance/module/risk/IRisk.sol +26 -0
- package/contracts/instance/module/risk/RiskModule.sol +62 -0
- package/contracts/instance/module/treasury/ITreasury.sol +82 -0
- package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
- package/contracts/instance/module/treasury/TreasuryModule.sol +138 -0
- package/contracts/instance/service/ComponentOwnerService.sol +157 -0
- package/contracts/instance/service/DistributionService.sol +59 -0
- package/contracts/instance/service/IComponentOwnerService.sol +22 -0
- package/contracts/instance/service/IDistributionService.sol +12 -0
- package/contracts/instance/service/IPoolService.sol +37 -0
- package/contracts/instance/service/IProductService.sol +107 -0
- package/contracts/instance/service/PoolService.sol +149 -0
- package/contracts/instance/service/ProductService.sol +509 -0
- package/contracts/registry/ChainNft.sol +61 -37
- package/contracts/registry/IRegistry.sol +25 -38
- package/contracts/registry/IRegistryLinked.sol +8 -0
- package/contracts/registry/Registry.sol +384 -110
- package/contracts/shared/ERC165.sol +21 -0
- package/contracts/shared/IOwnable.sol +6 -0
- package/contracts/shared/IRegisterable.sol +24 -0
- package/contracts/shared/IVersionable.sol +94 -0
- package/contracts/shared/Proxy.sol +94 -0
- package/contracts/shared/Registerable.sol +86 -0
- package/contracts/shared/Versionable.sol +145 -0
- package/contracts/test/TestDistribution.sol +21 -0
- package/contracts/test/TestFee.sol +25 -0
- package/contracts/test/TestPool.sol +25 -0
- package/contracts/test/TestProduct.sol +72 -0
- package/contracts/test/TestRegisterable.sol +19 -0
- package/contracts/test/TestRoleId.sol +14 -0
- package/contracts/test/TestService.sol +32 -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/Fee.sol +44 -20
- package/contracts/types/Key32.sol +45 -0
- package/contracts/types/NftId.sol +22 -1
- package/contracts/types/NftIdSet.sol +60 -0
- package/contracts/types/ObjectType.sol +37 -13
- package/contracts/types/ReferralId.sol +48 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +38 -0
- package/contracts/types/StateId.sol +13 -3
- package/contracts/types/Timestamp.sol +22 -1
- package/contracts/types/UFixed.sol +26 -23
- package/contracts/types/Version.sol +103 -0
- package/package.json +12 -4
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
- 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/IProduct.sol/IProductComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
- 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/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
- 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/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
- package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
- 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/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- 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/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/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 -196
- package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
- package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
- package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
- 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/RegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
- package/contracts/components/Component.sol +0 -77
- package/contracts/components/IPool.sol +0 -15
- package/contracts/components/IProduct.sol +0 -16
- package/contracts/instance/access/Access.sol +0 -165
- package/contracts/instance/access/IAccess.sol +0 -63
- package/contracts/instance/component/ComponentModule.sol +0 -274
- package/contracts/instance/component/IComponent.sol +0 -74
- package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
- package/contracts/instance/policy/IPolicy.sol +0 -50
- package/contracts/instance/policy/PolicyModule.sol +0 -114
- package/contracts/instance/pool/IPoolModule.sol +0 -23
- package/contracts/instance/pool/PoolModule.sol +0 -81
- package/contracts/instance/product/IProductService.sol +0 -36
- package/contracts/instance/product/ProductService.sol +0 -136
- package/contracts/instance/treasury/ITreasury.sol +0 -91
- package/contracts/instance/treasury/TokenHandler.sol +0 -24
- package/contracts/instance/treasury/TreasuryModule.sol +0 -168
@@ -1,125 +1,135 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
5
|
-
import {
|
6
|
-
import {NftId, toNftId, NftIdLib} from "../types/NftId.sol";
|
7
|
-
import {ObjectType, INSTANCE, POLICY, BUNDLE} from "../types/ObjectType.sol";
|
8
|
-
|
9
|
-
contract RegistryLinked is IRegistryLinked {
|
10
|
-
IRegistry internal _registry;
|
11
|
-
|
12
|
-
constructor(address registry) {
|
13
|
-
_registry = IRegistry(registry);
|
14
|
-
}
|
15
|
-
|
16
|
-
function getRegistry() external view override returns (IRegistry registry) {
|
17
|
-
return _registry;
|
18
|
-
}
|
19
|
-
}
|
20
|
-
|
21
|
-
abstract contract Registerable is RegistryLinked, IRegisterable {
|
22
|
-
using NftIdLib for NftId;
|
23
|
-
|
24
|
-
address private _initialOwner;
|
25
|
-
|
26
|
-
constructor(address registry) RegistryLinked(registry) {
|
27
|
-
_initialOwner = msg.sender;
|
28
|
-
}
|
29
|
-
|
30
|
-
// getType, getData and register need to be implemented by concrete contract
|
31
|
-
|
32
|
-
function isRegisterable() external pure override returns (bool) {
|
33
|
-
return true;
|
34
|
-
}
|
35
|
-
|
36
|
-
function getInitialOwner() public view override returns (address deployer) {
|
37
|
-
return _initialOwner;
|
38
|
-
}
|
4
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
5
|
+
import {IService} from "../instance/base/IService.sol";
|
39
6
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
7
|
+
import {IChainNft} from "./IChainNft.sol";
|
8
|
+
import {ChainNft} from "./ChainNft.sol";
|
9
|
+
import {IRegistry} from "./IRegistry.sol";
|
10
|
+
import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
|
11
|
+
import {Version, VersionPart, VersionLib} from "../types/Version.sol";
|
12
|
+
import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
|
44
13
|
|
45
|
-
|
46
|
-
return _registry.getNftId(address(this));
|
47
|
-
}
|
14
|
+
import {Versionable} from "../shared/Versionable.sol";
|
48
15
|
|
49
|
-
function getOwner() public view override returns (address owner) {
|
50
|
-
NftId id = _registry.getNftId(address(this));
|
51
|
-
owner = _registry.getOwner(id);
|
52
|
-
return owner != address(0) ? owner : _initialOwner;
|
53
|
-
}
|
54
|
-
}
|
55
16
|
|
56
|
-
contract Registry is
|
17
|
+
contract Registry is
|
18
|
+
Versionable,
|
19
|
+
IRegisterable,
|
20
|
+
IRegistry
|
21
|
+
{
|
57
22
|
using NftIdLib for NftId;
|
58
23
|
|
59
24
|
string public constant EMPTY_URI = "";
|
60
25
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
);
|
72
|
-
|
26
|
+
// TODO do not use gif-next in namespace id
|
27
|
+
// TODO ask openzeppelin about public location
|
28
|
+
// keccak256(abi.encode(uint256(keccak256("gif-next.contracts.registry.Registry.sol")) - 1)) & ~bytes32(uint256(0xff));
|
29
|
+
bytes32 public constant REGISTRY_LOCATION_V1 = 0x6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa300;
|
30
|
+
|
31
|
+
// IMPORTANT Every new version with storage changes must implement its own struct
|
32
|
+
// copy paste previous version and add changes
|
33
|
+
// @custom:storage-location erc7201:gif-next.contracts.registry.Registry.sol
|
34
|
+
struct StorageV1 {
|
35
|
+
|
36
|
+
mapping(NftId nftId => ObjectInfo info) _info;
|
37
|
+
mapping(address object => NftId nftId) _nftIdByAddress;
|
38
|
+
mapping(ObjectType objectType => bool) _isValidType;
|
39
|
+
mapping(ObjectType objectType => mapping(ObjectType objectParentType => bool)) _isValidParentType;
|
40
|
+
|
41
|
+
mapping(NftId nftId => string stringValue) _string;
|
42
|
+
mapping(bytes32 serviceNameHash => mapping(VersionPart majorVersion => address service)) _service;
|
43
|
+
|
44
|
+
NftId _nftId;
|
45
|
+
IChainNft _chainNft;
|
46
|
+
ChainNft _chainNftInternal;
|
47
|
+
address _initialOwner;
|
48
|
+
|
49
|
+
/// @dev will own protocol nft and registry nft(s) minted during initialize
|
50
|
+
address _protocolOwner;
|
51
|
+
// if struct goes here
|
52
|
+
// then you cannot add new vars after
|
73
53
|
}
|
74
54
|
|
75
55
|
function register(
|
76
56
|
address objectAddress
|
77
|
-
)
|
57
|
+
)
|
58
|
+
// TODO add authz (only services may register components etc)
|
59
|
+
// we have to check how we do authz for registring services (just restrict to protocol owner/registry owner)
|
60
|
+
external override returns (NftId nftId) {
|
61
|
+
StorageV1 storage $ = _getStorage();
|
62
|
+
|
78
63
|
require(
|
79
|
-
_nftIdByAddress[objectAddress].eqz(),
|
64
|
+
$._nftIdByAddress[objectAddress].eqz(),
|
80
65
|
"ERROR:REG-002:ALREADY_REGISTERED"
|
81
66
|
);
|
82
67
|
|
83
68
|
IRegisterable registerable = IRegisterable(objectAddress);
|
84
69
|
require(
|
85
|
-
registerable.
|
70
|
+
registerable.supportsInterface(type(IRegisterable).interfaceId),
|
86
71
|
"ERROR:REG-003:NOT_REGISTERABLE"
|
87
72
|
);
|
88
73
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
require(parentInfo.nftId.gtz(), "ERROR:REG-004:PARENT_NOT_FOUND");
|
95
|
-
// check validity of parent relation, valid relations are
|
96
|
-
// policy -> product, bundle -> pool, product -> instance, pool -> instance
|
97
|
-
}
|
74
|
+
ObjectType objectType = registerable.getType();
|
75
|
+
require(
|
76
|
+
$._isValidType[objectType],
|
77
|
+
"ERROR:REG-004:TYPE_INVALID"
|
78
|
+
);
|
98
79
|
|
99
|
-
|
100
|
-
|
101
|
-
|
80
|
+
NftId parentNftId = registerable.getParentNftId();
|
81
|
+
require(
|
82
|
+
isRegistered(parentNftId),
|
83
|
+
"ERROR:REG-005:PARENT_NOT_REGISTERED"
|
102
84
|
);
|
103
|
-
nftId = toNftId(mintedTokenId);
|
104
85
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
registerable.getType(),
|
109
|
-
objectAddress,
|
110
|
-
registerable.getInitialOwner()
|
86
|
+
require(
|
87
|
+
$._isValidParentType[objectType][$._info[parentNftId].objectType],
|
88
|
+
"ERROR:REG-006:PARENT_TYPE_INVALID"
|
111
89
|
);
|
112
90
|
|
113
|
-
|
114
|
-
_nftIdByAddress[objectAddress] = nftId;
|
91
|
+
// also check that nftId and parentNFtId are on the same chain if applicable
|
115
92
|
|
116
|
-
//
|
93
|
+
// nft minting
|
94
|
+
uint256 mintedTokenId = $._chainNft.mint(
|
95
|
+
registerable.getOwner(),
|
96
|
+
EMPTY_URI
|
97
|
+
);
|
98
|
+
|
99
|
+
nftId = toNftId(mintedTokenId);
|
100
|
+
|
101
|
+
// special case services
|
102
|
+
if(registerable.getType() == SERVICE()) {
|
103
|
+
IService service = IService(objectAddress);
|
104
|
+
require(
|
105
|
+
service.supportsInterface(type(IService).interfaceId),
|
106
|
+
"ERROR:REG-007:NOT_SERVICE"
|
107
|
+
);
|
108
|
+
|
109
|
+
string memory serviceName = service.getName();
|
110
|
+
VersionPart majorVersion = service.getMajorVersion();
|
111
|
+
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
112
|
+
|
113
|
+
// service specific state
|
114
|
+
$._string[nftId] = serviceName;
|
115
|
+
|
116
|
+
require(
|
117
|
+
$._service[serviceNameHash][majorVersion] == address(0),
|
118
|
+
"ERROR:REG-008:ALREADY_REGISTERED"
|
119
|
+
);
|
120
|
+
$._service[serviceNameHash][majorVersion] = objectAddress;
|
121
|
+
}
|
122
|
+
|
123
|
+
// create object info and link nft id with it
|
124
|
+
_registerObjectInfo(registerable, nftId);
|
117
125
|
}
|
118
126
|
|
127
|
+
|
119
128
|
function registerObjectForInstance(
|
120
129
|
NftId parentNftId,
|
121
130
|
ObjectType objectType,
|
122
|
-
address initialOwner
|
131
|
+
address initialOwner,
|
132
|
+
bytes memory data
|
123
133
|
)
|
124
134
|
external
|
125
135
|
override
|
@@ -128,55 +138,319 @@ contract Registry is IRegistry {
|
|
128
138
|
NftId nftId
|
129
139
|
)
|
130
140
|
{
|
141
|
+
StorageV1 storage $ = _getStorage();
|
142
|
+
|
131
143
|
// TODO add more validation
|
132
144
|
require(
|
133
145
|
objectType == POLICY() || objectType == BUNDLE(),
|
134
|
-
"ERROR:REG-
|
146
|
+
"ERROR:REG-010:TYPE_INVALID"
|
135
147
|
);
|
136
148
|
|
137
|
-
uint256 mintedTokenId = _chainNft.mint(initialOwner, EMPTY_URI);
|
149
|
+
uint256 mintedTokenId = $._chainNft.mint(initialOwner, EMPTY_URI);
|
138
150
|
nftId = toNftId(mintedTokenId);
|
139
151
|
|
140
|
-
|
152
|
+
ObjectInfo memory info = ObjectInfo(
|
141
153
|
nftId,
|
142
154
|
parentNftId,
|
143
155
|
objectType,
|
144
156
|
address(0),
|
145
|
-
initialOwner
|
157
|
+
initialOwner,
|
158
|
+
data
|
146
159
|
);
|
147
160
|
|
148
|
-
_info[nftId] = info;
|
161
|
+
$._info[nftId] = info;
|
149
162
|
|
150
163
|
// add logging
|
151
164
|
}
|
152
165
|
|
166
|
+
// from IRegistry
|
153
167
|
function getObjectCount() external view override returns (uint256) {
|
154
|
-
return _chainNft.totalSupply();
|
168
|
+
return _getStorage()._chainNft.totalSupply();
|
169
|
+
}
|
170
|
+
|
171
|
+
function getNftId(address object) external view override returns (NftId id) {
|
172
|
+
return _getStorage()._nftIdByAddress[object];
|
173
|
+
}
|
174
|
+
|
175
|
+
function getOwner(NftId nftId) external view override returns (address) {
|
176
|
+
return _getStorage()._chainNft.ownerOf(nftId.toInt());
|
177
|
+
}
|
178
|
+
|
179
|
+
function getName(NftId nftId) external view returns (string memory name) {
|
180
|
+
return _getStorage()._string[nftId];
|
181
|
+
}
|
182
|
+
|
183
|
+
function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory info) {
|
184
|
+
return _getStorage()._info[nftId];
|
185
|
+
}
|
186
|
+
|
187
|
+
function isRegistered(NftId nftId) public view override returns (bool) {
|
188
|
+
return _getStorage()._info[nftId].objectType.gtz();
|
189
|
+
}
|
190
|
+
|
191
|
+
function isRegistered(address object) external view override returns (bool) {
|
192
|
+
return _getStorage()._nftIdByAddress[object].gtz();
|
193
|
+
}
|
194
|
+
|
195
|
+
// special case to retrive a gif service
|
196
|
+
function getServiceAddress(
|
197
|
+
string memory serviceName,
|
198
|
+
VersionPart majorVersion
|
199
|
+
) external view override returns (address serviceAddress)
|
200
|
+
{
|
201
|
+
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
202
|
+
return _getStorage()._service[serviceNameHash][majorVersion];
|
203
|
+
}
|
204
|
+
|
205
|
+
function getProtocolOwner() external view override returns (address) {
|
206
|
+
return _getStorage()._protocolOwner;
|
207
|
+
}
|
208
|
+
|
209
|
+
function getChainNft() external view override returns (IChainNft) {
|
210
|
+
return _getStorage()._chainNft;
|
211
|
+
}
|
212
|
+
|
213
|
+
// from IERC165
|
214
|
+
function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
|
215
|
+
return interfaceId == type(IRegistry).interfaceId;
|
216
|
+
}
|
217
|
+
|
218
|
+
// from IVersionable
|
219
|
+
function getVersion() public pure virtual override returns (Version) {
|
220
|
+
return VersionLib.toVersion(1, 0, 0);
|
221
|
+
}
|
222
|
+
|
223
|
+
// from IOwnable
|
224
|
+
function getOwner() public view override returns (address owner) {
|
225
|
+
StorageV1 storage $ = _getStorage();
|
226
|
+
return $._nftId.gtz() ? this.getOwner($._nftId) : $._initialOwner;
|
227
|
+
}
|
228
|
+
|
229
|
+
// from IRegisterable
|
230
|
+
function getRegistry() external view override returns (IRegistry registry) {
|
231
|
+
return this;
|
232
|
+
}
|
233
|
+
// TODO
|
234
|
+
// 1) Registerable can not register itself -> otherwise register have to trust owner address provided by registerable
|
235
|
+
// registerable owner MUST call register and provide registerable address
|
236
|
+
// 2) Who is msg.sender here???
|
237
|
+
function register() external pure override returns (NftId nftId) {
|
238
|
+
return zeroNftId();
|
239
|
+
}
|
240
|
+
|
241
|
+
function getType() external pure override returns (ObjectType objectType) {
|
242
|
+
return REGISTRY();
|
243
|
+
}
|
244
|
+
|
245
|
+
function getNftId() public view override returns (NftId nftId) {
|
246
|
+
return _getStorage()._nftId;
|
247
|
+
}
|
248
|
+
|
249
|
+
function getParentNftId() public view returns (NftId nftId) {
|
250
|
+
StorageV1 storage $ = _getStorage();
|
251
|
+
nftId = $._info[$._nftId].parentNftId;
|
252
|
+
}
|
253
|
+
|
254
|
+
function getData() public pure returns (bytes memory data) {
|
255
|
+
return "";
|
256
|
+
}
|
257
|
+
|
258
|
+
// registry specific functions
|
259
|
+
|
260
|
+
/// @dev defines which types are allowed to register
|
261
|
+
function _setupValidTypes() internal onlyInitializing {
|
262
|
+
StorageV1 storage $ = _getStorage();
|
263
|
+
$._isValidType[REGISTRY()] = true; // only for global registry
|
264
|
+
$._isValidType[TOKEN()] = true;
|
265
|
+
$._isValidType[SERVICE()] = true;
|
266
|
+
$._isValidType[INSTANCE()] = true;
|
267
|
+
$._isValidType[STAKE()] = true;
|
268
|
+
$._isValidType[PRODUCT()] = true;
|
269
|
+
$._isValidType[ORACLE()] = true;
|
270
|
+
$._isValidType[POOL()] = true;
|
271
|
+
$._isValidType[DISTRIBUTION()] = true;
|
272
|
+
$._isValidType[POLICY()] = true;
|
273
|
+
$._isValidType[BUNDLE()] = true;
|
274
|
+
}
|
275
|
+
|
276
|
+
/// @dev defines which types - parent type relations are allowed to register
|
277
|
+
function _setupValidParentTypes() internal onlyInitializing {
|
278
|
+
StorageV1 storage $ = _getStorage();
|
279
|
+
// registry as parent
|
280
|
+
$._isValidParentType[TOKEN()][REGISTRY()] = true;
|
281
|
+
$._isValidParentType[SERVICE()][REGISTRY()] = true;
|
282
|
+
$._isValidParentType[INSTANCE()][REGISTRY()] = true;
|
283
|
+
|
284
|
+
// instance as parent
|
285
|
+
$._isValidParentType[PRODUCT()][INSTANCE()] = true;
|
286
|
+
$._isValidParentType[DISTRIBUTION()][INSTANCE()] = true;
|
287
|
+
$._isValidParentType[ORACLE()][INSTANCE()] = true;
|
288
|
+
$._isValidParentType[POOL()][INSTANCE()] = true;
|
289
|
+
|
290
|
+
// product as parent
|
291
|
+
$._isValidParentType[POLICY()][PRODUCT()] = true;
|
292
|
+
|
293
|
+
// pool as parent
|
294
|
+
$._isValidParentType[BUNDLE()][POOL()] = true;
|
295
|
+
$._isValidParentType[STAKE()][POOL()] = true;
|
296
|
+
}
|
297
|
+
|
298
|
+
/// @dev protocol registration used to anchor the dip ecosystem relations
|
299
|
+
function _registerProtocol()
|
300
|
+
internal
|
301
|
+
onlyInitializing
|
302
|
+
virtual // TODO virtual?
|
303
|
+
{
|
304
|
+
StorageV1 storage $ = _getStorage();
|
305
|
+
|
306
|
+
uint256 protocolId = $._chainNftInternal.PROTOCOL_NFT_ID();
|
307
|
+
$._chainNftInternal.mint($._protocolOwner, protocolId);
|
308
|
+
|
309
|
+
NftId protocolNftid = toNftId(protocolId);
|
310
|
+
ObjectInfo memory protocolInfo = ObjectInfo(
|
311
|
+
protocolNftid,
|
312
|
+
zeroNftId(), // parent nft id
|
313
|
+
PROTOCOL(),
|
314
|
+
address(0), // contract address
|
315
|
+
$._protocolOwner,
|
316
|
+
"" // data
|
317
|
+
);
|
318
|
+
|
319
|
+
$._info[protocolNftid] = protocolInfo;
|
155
320
|
}
|
156
321
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
322
|
+
/// @dev registry registration
|
323
|
+
/// might also register the global registry when not on mainnet
|
324
|
+
function _registerRegistry()
|
325
|
+
internal
|
326
|
+
onlyInitializing
|
327
|
+
virtual
|
328
|
+
returns (NftId registryNftId)
|
329
|
+
{
|
330
|
+
StorageV1 storage $ = _getStorage();
|
331
|
+
|
332
|
+
uint256 registryId = $._chainNftInternal.calculateTokenId(2);
|
333
|
+
registryNftId = toNftId(registryId);
|
334
|
+
|
335
|
+
// we're not the global registry
|
336
|
+
if(registryId != $._chainNftInternal.GLOBAL_REGISTRY_ID()) {
|
337
|
+
_registerGlobalRegistry();
|
338
|
+
}
|
339
|
+
|
340
|
+
$._chainNftInternal.mint($._protocolOwner, registryId);
|
341
|
+
|
342
|
+
NftId parentNftId;
|
343
|
+
// we're the global registry
|
344
|
+
if(block.chainid == 1) {
|
345
|
+
parentNftId = toNftId($._chainNftInternal.PROTOCOL_NFT_ID());
|
346
|
+
}
|
347
|
+
else {
|
348
|
+
parentNftId = toNftId($._chainNftInternal.GLOBAL_REGISTRY_ID());
|
349
|
+
}
|
350
|
+
|
351
|
+
ObjectInfo memory registryInfo = ObjectInfo(
|
352
|
+
registryNftId,
|
353
|
+
parentNftId,
|
354
|
+
REGISTRY(),
|
355
|
+
address(this), // proxy address
|
356
|
+
$._protocolOwner, // registry owner is different from proxy owner
|
357
|
+
""
|
358
|
+
);
|
359
|
+
|
360
|
+
$._info[registryNftId] = registryInfo;
|
361
|
+
$._nftIdByAddress[address(this)] = registryNftId;
|
362
|
+
|
363
|
+
// add logging
|
161
364
|
}
|
162
365
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
366
|
+
|
367
|
+
/// @dev global registry registration for non mainnet registries
|
368
|
+
function _registerGlobalRegistry()
|
369
|
+
internal
|
370
|
+
onlyInitializing
|
371
|
+
virtual
|
372
|
+
{
|
373
|
+
StorageV1 storage $ = _getStorage();
|
374
|
+
|
375
|
+
uint256 globalRegistryId = $._chainNftInternal.GLOBAL_REGISTRY_ID();
|
376
|
+
$._chainNftInternal.mint($._protocolOwner, globalRegistryId);
|
377
|
+
|
378
|
+
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
379
|
+
ObjectInfo memory globalRegistryInfo = ObjectInfo(
|
380
|
+
globalRegistryNftId,
|
381
|
+
toNftId($._chainNftInternal.PROTOCOL_NFT_ID()),
|
382
|
+
REGISTRY(),
|
383
|
+
address(0), // contract address
|
384
|
+
$._protocolOwner,
|
385
|
+
"" // data
|
386
|
+
);
|
387
|
+
|
388
|
+
$._info[globalRegistryNftId] = globalRegistryInfo;
|
167
389
|
}
|
168
390
|
|
169
|
-
function
|
391
|
+
function _registerObjectInfo(
|
392
|
+
IRegisterable registerable,
|
170
393
|
NftId nftId
|
171
|
-
)
|
172
|
-
|
394
|
+
)
|
395
|
+
internal
|
396
|
+
virtual
|
397
|
+
{
|
398
|
+
address objectAddress = address(registerable);
|
399
|
+
ObjectInfo memory info = ObjectInfo(
|
400
|
+
nftId,
|
401
|
+
registerable.getParentNftId(),
|
402
|
+
registerable.getType(),
|
403
|
+
objectAddress,
|
404
|
+
registerable.getOwner(),
|
405
|
+
registerable.getData()
|
406
|
+
);
|
407
|
+
|
408
|
+
StorageV1 storage $ = _getStorage();
|
409
|
+
$._info[nftId] = info;
|
410
|
+
$._nftIdByAddress[objectAddress] = nftId;
|
411
|
+
|
412
|
+
// add logging
|
173
413
|
}
|
174
414
|
|
175
|
-
|
176
|
-
|
415
|
+
// TODO check how usage of "$.data" influences gas costs
|
416
|
+
// IMPORTANT Every new version must implement this function
|
417
|
+
// keep it private -> if unreachable from the next version then not included in its byte code
|
418
|
+
// each version MUST use the same REGISTRY_LOCATION_V1, just change return type
|
419
|
+
function _getStorage() private pure returns (StorageV1 storage $) {
|
420
|
+
assembly {
|
421
|
+
$.slot := REGISTRY_LOCATION_V1
|
422
|
+
}
|
177
423
|
}
|
178
424
|
|
179
|
-
|
180
|
-
|
425
|
+
// from Versionable
|
426
|
+
|
427
|
+
/// @dev the protocol owner will get ownership of the
|
428
|
+
// protocol nft and the global registry nft minted in this
|
429
|
+
// initializer function
|
430
|
+
function _initialize(bytes memory data)
|
431
|
+
internal
|
432
|
+
onlyInitializing
|
433
|
+
virtual override
|
434
|
+
{
|
435
|
+
address protocolOwner = abi.decode(data, (address));
|
436
|
+
StorageV1 storage $ = _getStorage();
|
437
|
+
|
438
|
+
// TODO here delegate call from proxy constructor, msg.sender is proxy deployer -> Proxy.sol
|
439
|
+
$._initialOwner = msg.sender;
|
440
|
+
$._protocolOwner = protocolOwner;
|
441
|
+
|
442
|
+
// TODO deployment size is too big, call another contract which keeps and deploys ChainNft byte code
|
443
|
+
// deploy NFT
|
444
|
+
$._chainNftInternal = new ChainNft(address(this));// adds 10kb to deployment size
|
445
|
+
$._chainNft = IChainNft($._chainNftInternal);
|
446
|
+
|
447
|
+
// initial registry setup
|
448
|
+
_registerProtocol();
|
449
|
+
$._nftId = _registerRegistry();
|
450
|
+
|
451
|
+
// setup rules for further registrations
|
452
|
+
_setupValidTypes();
|
453
|
+
_setupValidParentTypes();
|
181
454
|
}
|
182
|
-
|
455
|
+
|
456
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
|
6
|
+
contract ERC165 is IERC165 {
|
7
|
+
mapping(bytes4 => bool) private _isSupported;
|
8
|
+
|
9
|
+
constructor() {
|
10
|
+
// register support for ERC165
|
11
|
+
_registerInterface(type(IERC165).interfaceId);
|
12
|
+
}
|
13
|
+
|
14
|
+
function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
|
15
|
+
return _isSupported[interfaceId];
|
16
|
+
}
|
17
|
+
|
18
|
+
function _registerInterface(bytes4 interfaceId) internal {
|
19
|
+
_isSupported[interfaceId] = true;
|
20
|
+
}
|
21
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
|
6
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
7
|
+
import {NftId} from "../types/NftId.sol";
|
8
|
+
import {ObjectType} from "../types/ObjectType.sol";
|
9
|
+
|
10
|
+
import {IOwnable} from "./IOwnable.sol";
|
11
|
+
|
12
|
+
interface IRegisterable is IERC165, IOwnable {
|
13
|
+
function getRegistry() external view returns (IRegistry registry);
|
14
|
+
|
15
|
+
function register() external returns (NftId nftId);
|
16
|
+
|
17
|
+
function getType() external pure returns (ObjectType objectType);
|
18
|
+
|
19
|
+
function getNftId() external view returns (NftId nftId);
|
20
|
+
|
21
|
+
function getParentNftId() external view returns (NftId nftId);
|
22
|
+
|
23
|
+
function getData() external view returns (bytes memory data);
|
24
|
+
}
|