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