@etherisc/gif-next 0.0.2-a7e19c7 → 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 +178 -6
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +48 -53
- 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/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +48 -53
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +340 -0
- 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 +405 -40
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +258 -45
- 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 +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 +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 +1403 -247
- 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 +1769 -383
- 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/base/ILifecycle.sol/ILifecycle.json +115 -0
- 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} +152 -138
- 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} +56 -53
- 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 +159 -106
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +159 -106
- 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 +57 -62
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +50 -68
- 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/module/treasury/ITreasury.sol/ITreasury.json +10 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +511 -0
- 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/module/treasury/TreasuryModule.sol/TreasuryModule.json +511 -0
- 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 +98 -85
- 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 +436 -59
- 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 +18 -63
- 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 +18 -63
- 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 +4 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
- 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 +4 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
- 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 +98 -59
- 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 +222 -16
- package/contracts/components/Product.sol +193 -32
- package/contracts/experiment/errors/Require.sol +10 -5
- package/contracts/experiment/errors/Revert.sol +13 -8
- package/contracts/experiment/inheritance/A.sol +8 -11
- package/contracts/experiment/inheritance/B.sol +10 -5
- package/contracts/experiment/inheritance/C.sol +11 -5
- package/contracts/experiment/inheritance/IA.sol +2 -7
- package/contracts/experiment/inheritance/IB.sol +3 -2
- package/contracts/experiment/inheritance/IC.sol +4 -3
- package/contracts/experiment/statemachine/Dummy.sol +27 -0
- package/contracts/experiment/statemachine/ISM.sol +25 -0
- package/contracts/experiment/statemachine/README.md +112 -0
- package/contracts/experiment/statemachine/SM.sol +57 -0
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
- package/contracts/experiment/types/TypeA.sol +14 -9
- package/contracts/experiment/types/TypeB.sol +14 -9
- package/contracts/instance/IInstance.sol +41 -8
- package/contracts/instance/IInstanceLinked.sol +8 -0
- package/contracts/instance/Instance.sol +54 -44
- 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/base/ILifecycle.sol +30 -0
- 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 +80 -94
- package/contracts/registry/IChainNft.sol +10 -7
- package/contracts/registry/IRegistry.sol +35 -51
- package/contracts/registry/IRegistryLinked.sol +8 -0
- package/contracts/registry/Registry.sol +394 -120
- 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/Blocknumber.sol +76 -18
- package/contracts/types/ChainId.sol +18 -10
- package/contracts/types/Fee.sol +56 -0
- package/contracts/types/Key32.sol +45 -0
- package/contracts/types/NftId.sol +48 -11
- package/contracts/types/NftIdSet.sol +60 -0
- package/contracts/types/ObjectType.sol +131 -0
- 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 +101 -0
- package/contracts/types/Timestamp.sol +85 -17
- package/contracts/types/UFixed.sol +78 -76
- package/contracts/types/Version.sol +103 -0
- package/package.json +19 -5
- 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 -192
- 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 -147
- 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/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 -167
- 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 -62
- package/contracts/components/IPool.sol +0 -9
- package/contracts/components/IProduct.sol +0 -12
- package/contracts/instance/access/Access.sol +0 -218
- package/contracts/instance/access/IAccess.sol +0 -83
- package/contracts/instance/component/ComponentModule.sol +0 -248
- package/contracts/instance/component/IComponent.sol +0 -95
- package/contracts/instance/policy/IPolicy.sol +0 -66
- package/contracts/instance/policy/PolicyModule.sol +0 -107
- package/contracts/instance/pool/IPoolModule.sol +0 -41
- package/contracts/instance/pool/PoolModule.sol +0 -86
- package/contracts/instance/product/IProductService.sol +0 -46
- package/contracts/instance/product/ProductService.sol +0 -108
@@ -1,182 +1,456 @@
|
|
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} from "../types/NftId.sol";
|
7
|
-
import {NftIdLib} from "../types/NftId.sol";
|
8
|
-
|
9
|
-
contract RegistryLinked is IRegistryLinked {
|
10
|
-
|
11
|
-
IRegistry internal _registry;
|
12
|
-
|
13
|
-
constructor(address registry) {
|
14
|
-
_registry = IRegistry(registry);
|
15
|
-
}
|
4
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
5
|
+
import {IService} from "../instance/base/IService.sol";
|
16
6
|
|
17
|
-
|
18
|
-
|
19
|
-
|
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";
|
20
13
|
|
21
|
-
}
|
14
|
+
import {Versionable} from "../shared/Versionable.sol";
|
22
15
|
|
23
16
|
|
24
|
-
|
25
|
-
|
26
|
-
IRegisterable
|
17
|
+
contract Registry is
|
18
|
+
Versionable,
|
19
|
+
IRegisterable,
|
20
|
+
IRegistry
|
27
21
|
{
|
28
22
|
using NftIdLib for NftId;
|
29
23
|
|
30
|
-
|
31
|
-
|
32
|
-
constructor(address registry)
|
33
|
-
RegistryLinked(registry)
|
34
|
-
{
|
35
|
-
_initialOwner = msg.sender;
|
36
|
-
}
|
37
|
-
|
38
|
-
// getType, getData and register need to be implemented by concrete contract
|
39
|
-
|
40
|
-
function isRegisterable() external pure override returns(bool) {
|
41
|
-
return true;
|
42
|
-
}
|
43
|
-
|
44
|
-
function getInitialOwner() public view override returns(address deployer) {
|
45
|
-
return _initialOwner;
|
46
|
-
}
|
47
|
-
|
48
|
-
function isRegistered() public view override returns(bool) {
|
49
|
-
NftId nftId = _registry.getNftId(address(this));
|
50
|
-
return nftId.gtz();
|
51
|
-
}
|
52
|
-
|
53
|
-
function getNftId() public view override returns(NftId nftId) {
|
54
|
-
return _registry.getNftId(address(this));
|
55
|
-
}
|
24
|
+
string public constant EMPTY_URI = "";
|
56
25
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
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
|
61
53
|
}
|
62
54
|
|
63
|
-
|
55
|
+
function register(
|
56
|
+
address objectAddress
|
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();
|
64
62
|
|
65
|
-
|
66
|
-
|
67
|
-
|
63
|
+
require(
|
64
|
+
$._nftIdByAddress[objectAddress].eqz(),
|
65
|
+
"ERROR:REG-002:ALREADY_REGISTERED"
|
66
|
+
);
|
68
67
|
|
69
|
-
|
70
|
-
|
71
|
-
|
68
|
+
IRegisterable registerable = IRegisterable(objectAddress);
|
69
|
+
require(
|
70
|
+
registerable.supportsInterface(type(IRegisterable).interfaceId),
|
71
|
+
"ERROR:REG-003:NOT_REGISTERABLE"
|
72
|
+
);
|
72
73
|
|
73
|
-
|
74
|
+
ObjectType objectType = registerable.getType();
|
75
|
+
require(
|
76
|
+
$._isValidType[objectType],
|
77
|
+
"ERROR:REG-004:TYPE_INVALID"
|
78
|
+
);
|
74
79
|
|
75
|
-
|
76
|
-
require(
|
77
|
-
|
78
|
-
|
80
|
+
NftId parentNftId = registerable.getParentNftId();
|
81
|
+
require(
|
82
|
+
isRegistered(parentNftId),
|
83
|
+
"ERROR:REG-005:PARENT_NOT_REGISTERED"
|
84
|
+
);
|
79
85
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
function POOL() public pure override returns(uint256) { return 70; }
|
85
|
-
function POLICY() public pure override returns(uint256) { return 80; }
|
86
|
-
function BUNDLE() public pure override returns(uint256) { return 90; }
|
86
|
+
require(
|
87
|
+
$._isValidParentType[objectType][$._info[parentNftId].objectType],
|
88
|
+
"ERROR:REG-006:PARENT_TYPE_INVALID"
|
89
|
+
);
|
87
90
|
|
88
|
-
|
89
|
-
require(_nftIdByAddress[objectAddress].eqz(), "ERROR:REG-002:ALREADY_REGISTERED");
|
91
|
+
// also check that nftId and parentNFtId are on the same chain if applicable
|
90
92
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
RegistryInfo memory parentInfo = _info[registerable.getParentNftId()];
|
97
|
-
require(parentInfo.nftId.gtz(), "ERROR:REG-004:PARENT_NOT_FOUND");
|
98
|
-
// check validity of parent relation, valid relations are
|
99
|
-
// policy -> product, bundle -> pool, product -> instance, pool -> instance
|
100
|
-
}
|
93
|
+
// nft minting
|
94
|
+
uint256 mintedTokenId = $._chainNft.mint(
|
95
|
+
registerable.getOwner(),
|
96
|
+
EMPTY_URI
|
97
|
+
);
|
101
98
|
|
102
|
-
uint256 mintedTokenId = _chainNft.mint(
|
103
|
-
registerable.getInitialOwner(),
|
104
|
-
EMPTY_URI);
|
105
99
|
nftId = toNftId(mintedTokenId);
|
106
|
-
|
107
|
-
RegistryInfo memory info = RegistryInfo(
|
108
|
-
nftId,
|
109
|
-
registerable.getParentNftId(),
|
110
|
-
registerable.getType(),
|
111
|
-
objectAddress,
|
112
|
-
registerable.getInitialOwner()
|
113
|
-
);
|
114
100
|
|
115
|
-
|
116
|
-
|
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
|
+
}
|
117
122
|
|
118
|
-
//
|
123
|
+
// create object info and link nft id with it
|
124
|
+
_registerObjectInfo(registerable, nftId);
|
119
125
|
}
|
120
126
|
|
121
127
|
|
122
128
|
function registerObjectForInstance(
|
123
129
|
NftId parentNftId,
|
124
|
-
|
125
|
-
address initialOwner
|
130
|
+
ObjectType objectType,
|
131
|
+
address initialOwner,
|
132
|
+
bytes memory data
|
126
133
|
)
|
127
|
-
external
|
134
|
+
external
|
128
135
|
override
|
129
|
-
|
130
|
-
|
136
|
+
returns (
|
137
|
+
// TODO add onlyRegisteredInstance
|
138
|
+
NftId nftId
|
139
|
+
)
|
131
140
|
{
|
141
|
+
StorageV1 storage $ = _getStorage();
|
142
|
+
|
132
143
|
// TODO add more validation
|
133
144
|
require(
|
134
145
|
objectType == POLICY() || objectType == BUNDLE(),
|
135
|
-
"ERROR:REG-
|
146
|
+
"ERROR:REG-010:TYPE_INVALID"
|
147
|
+
);
|
136
148
|
|
137
|
-
uint256 mintedTokenId = _chainNft.mint(
|
138
|
-
initialOwner,
|
139
|
-
EMPTY_URI);
|
149
|
+
uint256 mintedTokenId = $._chainNft.mint(initialOwner, EMPTY_URI);
|
140
150
|
nftId = toNftId(mintedTokenId);
|
141
151
|
|
142
|
-
|
152
|
+
ObjectInfo memory info = ObjectInfo(
|
143
153
|
nftId,
|
144
154
|
parentNftId,
|
145
155
|
objectType,
|
146
156
|
address(0),
|
147
|
-
initialOwner
|
157
|
+
initialOwner,
|
158
|
+
data
|
148
159
|
);
|
149
160
|
|
150
|
-
_info[nftId] = info;
|
161
|
+
$._info[nftId] = info;
|
151
162
|
|
152
163
|
// add logging
|
153
164
|
}
|
154
165
|
|
166
|
+
// from IRegistry
|
167
|
+
function getObjectCount() external view override returns (uint256) {
|
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
|
+
);
|
155
318
|
|
156
|
-
|
157
|
-
return _chainNft.totalSupply();
|
319
|
+
$._info[protocolNftid] = protocolInfo;
|
158
320
|
}
|
159
321
|
|
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);
|
160
334
|
|
161
|
-
|
162
|
-
|
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
|
163
364
|
}
|
164
365
|
|
165
366
|
|
166
|
-
|
167
|
-
|
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;
|
168
389
|
}
|
169
390
|
|
391
|
+
function _registerObjectInfo(
|
392
|
+
IRegisterable registerable,
|
393
|
+
NftId nftId
|
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;
|
170
411
|
|
171
|
-
|
172
|
-
return _info[nftId];
|
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
|
+
}
|