@etherisc/gif-next 0.0.2-f619be3-760 → 0.0.2-f752d2a-551
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 +81 -14
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +26 -57
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
- package/artifacts/contracts/{instance/component/IComponent.sol/IComponentContract.json → components/IBaseComponent.sol/IBaseComponent.json} +26 -57
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +356 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IProductComponent.sol/IProductComponent.json} +89 -65
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +134 -75
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +72 -113
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +719 -332
- 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 +998 -527
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → base/ComponentServiceBase.sol/ComponentServiceBase.json} +133 -132
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/{product/ProductService.sol/ProductModule.json → base/IInstanceBase.sol/IInstanceBase.json} +18 -30
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +511 -0
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IService.sol/IService.json +300 -0
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +326 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +692 -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 +300 -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 +296 -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 +296 -0
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +10 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +4 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +10 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +10 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +188 -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/{component → module/component}/IComponent.sol/IComponentModule.json +33 -62
- 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 +132 -125
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +132 -125
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +67 -47
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +51 -57
- 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 +10 -0
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +10 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasuryModule.json +100 -57
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol/TreasuryModule.json +100 -57
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +523 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +477 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +471 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +673 -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 +147 -30
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +241 -25
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
- package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
- package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +16 -61
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
- package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +16 -61
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -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 +387 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -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 +379 -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 +206 -0
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
- package/artifacts/contracts/{mock → test}/Usdc.sol/USDC.json +3 -3
- 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/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +218 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +58 -58
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.json +139 -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 +88 -0
- package/contracts/components/IBaseComponent.sol +19 -0
- package/contracts/components/IPoolComponent.sol +57 -0
- package/contracts/components/{IProduct.sol → IProductComponent.sol} +9 -6
- package/contracts/components/Pool.sol +140 -18
- package/contracts/components/Product.sol +53 -25
- package/contracts/instance/IInstance.sol +38 -11
- package/contracts/instance/IInstanceLinked.sol +8 -0
- package/contracts/instance/Instance.sol +44 -48
- package/contracts/instance/base/ComponentServiceBase.sol +42 -0
- package/contracts/instance/base/IInstanceBase.sol +14 -0
- package/contracts/instance/base/IKeyValueStore.sol +49 -0
- package/contracts/instance/{lifecycle → base}/ILifecycle.sol +4 -21
- package/contracts/instance/base/IService.sol +15 -0
- package/contracts/instance/base/InstanceBase.sol +80 -0
- package/contracts/instance/base/KeyValueStore.sol +156 -0
- package/contracts/instance/{lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +36 -29
- package/contracts/instance/base/ModuleBase.sol +52 -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 +136 -0
- package/contracts/instance/module/bundle/IBundle.sol +58 -0
- package/contracts/instance/module/compensation/CompensationModule.sol +8 -0
- package/contracts/instance/module/compensation/ICompensation.sol +10 -0
- package/contracts/instance/module/component/ComponentModule.sol +95 -0
- package/contracts/instance/module/component/IComponent.sol +53 -0
- package/contracts/instance/module/policy/IPolicy.sol +60 -0
- package/contracts/instance/module/policy/PolicyModule.sol +76 -0
- package/contracts/instance/module/pool/IPoolModule.sol +41 -0
- package/contracts/instance/module/pool/PoolModule.sol +87 -0
- package/contracts/instance/module/risk/IRisk.sol +10 -0
- package/contracts/instance/module/risk/RiskModule.sol +8 -0
- package/contracts/instance/{treasury → module/treasury}/ITreasury.sol +27 -15
- package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
- package/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol +43 -59
- package/contracts/instance/service/ComponentOwnerService.sol +170 -0
- package/contracts/instance/service/IComponentOwnerService.sol +22 -0
- package/contracts/instance/service/IPoolService.sol +30 -0
- package/contracts/instance/service/IProductService.sol +58 -0
- package/contracts/instance/service/PoolService.sol +123 -0
- package/contracts/instance/service/ProductService.sol +354 -0
- package/contracts/registry/ChainNft.sol +61 -37
- package/contracts/registry/IRegistry.sol +24 -34
- package/contracts/registry/IRegistryLinked.sol +8 -0
- package/contracts/registry/Registry.sol +284 -85
- 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 +52 -0
- package/contracts/shared/Registerable.sol +86 -0
- package/contracts/shared/Versionable.sol +89 -0
- package/contracts/test/TestFee.sol +25 -0
- package/contracts/test/TestPool.sol +22 -0
- package/contracts/test/TestProduct.sol +44 -0
- package/contracts/test/TestRegisterable.sol +19 -0
- package/contracts/test/TestRoleId.sol +14 -0
- package/contracts/test/TestService.sol +32 -0
- package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
- package/contracts/test/TestVersion.sol +44 -0
- package/contracts/test/TestVersionable.sol +17 -0
- package/contracts/{mock → test}/Usdc.sol +1 -1
- package/contracts/types/AddressSet.sol +58 -0
- package/contracts/types/Fee.sol +39 -20
- package/contracts/types/Key32.sol +45 -0
- package/contracts/types/NftId.sol +22 -1
- package/contracts/types/NftIdSet.sol +60 -0
- package/contracts/types/ObjectType.sol +22 -14
- package/contracts/types/RoleId.sol +38 -0
- package/contracts/types/StateId.sol +13 -3
- package/contracts/types/Timestamp.sol +22 -1
- package/contracts/types/UFixed.sol +12 -13
- package/contracts/types/Version.sol +95 -0
- package/package.json +8 -3
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
- package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
- package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
- package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
- package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
- package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
- package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
- package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
- package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
- package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
- package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
- package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
- package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
- package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
- package/contracts/components/Component.sol +0 -77
- package/contracts/components/IPool.sol +0 -15
- package/contracts/instance/access/Access.sol +0 -165
- package/contracts/instance/access/IAccess.sol +0 -63
- package/contracts/instance/component/ComponentModule.sol +0 -274
- package/contracts/instance/component/IComponent.sol +0 -74
- package/contracts/instance/policy/IPolicy.sol +0 -50
- package/contracts/instance/policy/PolicyModule.sol +0 -114
- package/contracts/instance/pool/IPoolModule.sol +0 -23
- package/contracts/instance/pool/PoolModule.sol +0 -81
- package/contracts/instance/product/IProductService.sol +0 -36
- package/contracts/instance/product/ProductService.sol +0 -136
- package/contracts/instance/treasury/TokenHandler.sol +0 -24
- package/contracts/mock/TestPool.sol +0 -16
- package/contracts/mock/TestProduct.sol +0 -39
@@ -1,80 +1,79 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {
|
5
|
-
import {
|
6
|
-
import {NftId, toNftId, NftIdLib} from "../types/NftId.sol";
|
7
|
-
import {ObjectType, INSTANCE, POLICY, BUNDLE} from "../types/ObjectType.sol";
|
8
|
-
|
9
|
-
contract RegistryLinked is IRegistryLinked {
|
10
|
-
IRegistry internal _registry;
|
4
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
5
|
+
import {IService} from "../instance/base/IService.sol";
|
11
6
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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 {
|
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 {VersionPart} from "../types/Version.sol";
|
12
|
+
import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
|
13
|
+
|
14
|
+
// TODO make registry upgradable
|
15
|
+
contract Registry is
|
16
|
+
IRegisterable,
|
17
|
+
IRegistry
|
18
|
+
{
|
57
19
|
using NftIdLib for NftId;
|
58
20
|
|
59
21
|
string public constant EMPTY_URI = "";
|
60
22
|
|
61
|
-
mapping(NftId nftId =>
|
23
|
+
mapping(NftId nftId => ObjectInfo info) private _info;
|
62
24
|
mapping(NftId nftId => address owner) private _owner;
|
63
25
|
mapping(address object => NftId nftId) private _nftIdByAddress;
|
26
|
+
mapping(ObjectType objectType => bool) private _isValidType;
|
27
|
+
mapping(ObjectType objectType => mapping(ObjectType objectParentType => bool)) private _isValidParentType;
|
64
28
|
|
29
|
+
mapping(NftId nftId => string stringValue) private _string;
|
30
|
+
mapping(bytes32 serviceNameHash => mapping(VersionPart majorVersion => address service)) _service;
|
31
|
+
|
32
|
+
NftId private _nftId;
|
65
33
|
IChainNft private _chainNft;
|
34
|
+
ChainNft private _chainNftInternal;
|
35
|
+
address private _initialOwner;
|
66
36
|
|
67
|
-
|
37
|
+
// @dev will own protocol nft and registry nft(s) minted during initialize
|
38
|
+
address private _protocolOwner;
|
39
|
+
|
40
|
+
// TODO refactor once registry becomes upgradable
|
41
|
+
// @Dev the protocol owner will get ownership of the
|
42
|
+
// protocol nft and the global registry nft minted in this
|
43
|
+
// initializer function
|
44
|
+
function initialize(
|
45
|
+
address chainNft,
|
46
|
+
address protocolOwner
|
47
|
+
)
|
48
|
+
public
|
49
|
+
{
|
68
50
|
require(
|
69
51
|
address(_chainNft) == address(0),
|
70
52
|
"ERROR:REG-001:ALREADY_INITIALIZED"
|
71
53
|
);
|
54
|
+
|
55
|
+
_initialOwner = msg.sender;
|
56
|
+
_protocolOwner = protocolOwner;
|
57
|
+
|
72
58
|
_chainNft = IChainNft(chainNft);
|
59
|
+
_chainNftInternal = ChainNft(chainNft);
|
60
|
+
|
61
|
+
// initial registry setup
|
62
|
+
_registerProtocol();
|
63
|
+
_nftId = _registerRegistry();
|
64
|
+
|
65
|
+
// setup rules for further registrations
|
66
|
+
_setupValidTypes();
|
67
|
+
_setupValidParentTypes();
|
73
68
|
}
|
74
69
|
|
70
|
+
|
75
71
|
function register(
|
76
72
|
address objectAddress
|
77
|
-
)
|
73
|
+
)
|
74
|
+
// TODO add authz (only services may register components etc)
|
75
|
+
// we have to check how we do authz for registring services (just restrict to protocol owner/registry owner)
|
76
|
+
external override returns (NftId nftId) {
|
78
77
|
require(
|
79
78
|
_nftIdByAddress[objectAddress].eqz(),
|
80
79
|
"ERROR:REG-002:ALREADY_REGISTERED"
|
@@ -82,44 +81,69 @@ contract Registry is IRegistry {
|
|
82
81
|
|
83
82
|
IRegisterable registerable = IRegisterable(objectAddress);
|
84
83
|
require(
|
85
|
-
registerable.
|
84
|
+
registerable.supportsInterface(type(IRegisterable).interfaceId),
|
86
85
|
"ERROR:REG-003:NOT_REGISTERABLE"
|
87
86
|
);
|
88
87
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
88
|
+
ObjectType objectType = registerable.getType();
|
89
|
+
require(
|
90
|
+
_isValidType[objectType],
|
91
|
+
"ERROR:REG-004:TYPE_INVALID"
|
92
|
+
);
|
93
|
+
|
94
|
+
NftId parentNftId = registerable.getParentNftId();
|
95
|
+
require(
|
96
|
+
isRegistered(parentNftId),
|
97
|
+
"ERROR:REG-005:PARENT_NOT_REGISTERED"
|
98
|
+
);
|
99
|
+
|
100
|
+
require(
|
101
|
+
_isValidParentType[objectType][_info[parentNftId].objectType],
|
102
|
+
"ERROR:REG-006:PARENT_TYPE_INVALID"
|
103
|
+
);
|
104
|
+
|
105
|
+
// also check that nftId and parentNFtId are on the same chain if applicable
|
98
106
|
|
107
|
+
// nft minting
|
99
108
|
uint256 mintedTokenId = _chainNft.mint(
|
100
|
-
registerable.
|
109
|
+
registerable.getOwner(),
|
101
110
|
EMPTY_URI
|
102
111
|
);
|
103
|
-
nftId = toNftId(mintedTokenId);
|
104
112
|
|
105
|
-
|
106
|
-
nftId,
|
107
|
-
registerable.getParentNftId(),
|
108
|
-
registerable.getType(),
|
109
|
-
objectAddress,
|
110
|
-
registerable.getInitialOwner()
|
111
|
-
);
|
113
|
+
nftId = toNftId(mintedTokenId);
|
112
114
|
|
113
|
-
|
114
|
-
|
115
|
+
// special case services
|
116
|
+
if(registerable.getType() == SERVICE()) {
|
117
|
+
IService service = IService(objectAddress);
|
118
|
+
require(
|
119
|
+
service.supportsInterface(type(IService).interfaceId),
|
120
|
+
"ERROR:REG-007:NOT_SERVICE"
|
121
|
+
);
|
122
|
+
|
123
|
+
string memory serviceName = service.getName();
|
124
|
+
VersionPart majorVersion = service.getMajorVersion();
|
125
|
+
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
126
|
+
|
127
|
+
// service specific state
|
128
|
+
_string[nftId] = serviceName;
|
129
|
+
|
130
|
+
require(
|
131
|
+
_service[serviceNameHash][majorVersion] == address(0),
|
132
|
+
"ERROR:REG-008:ALREADY_REGISTERED"
|
133
|
+
);
|
134
|
+
_service[serviceNameHash][majorVersion] = objectAddress;
|
135
|
+
}
|
115
136
|
|
116
|
-
//
|
137
|
+
// create object info and link nft id with it
|
138
|
+
_registerObjectInfo(registerable, nftId);
|
117
139
|
}
|
118
140
|
|
141
|
+
|
119
142
|
function registerObjectForInstance(
|
120
143
|
NftId parentNftId,
|
121
144
|
ObjectType objectType,
|
122
|
-
address initialOwner
|
145
|
+
address initialOwner,
|
146
|
+
bytes memory data
|
123
147
|
)
|
124
148
|
external
|
125
149
|
override
|
@@ -131,18 +155,19 @@ contract Registry is IRegistry {
|
|
131
155
|
// TODO add more validation
|
132
156
|
require(
|
133
157
|
objectType == POLICY() || objectType == BUNDLE(),
|
134
|
-
"ERROR:REG-
|
158
|
+
"ERROR:REG-010:TYPE_INVALID"
|
135
159
|
);
|
136
160
|
|
137
161
|
uint256 mintedTokenId = _chainNft.mint(initialOwner, EMPTY_URI);
|
138
162
|
nftId = toNftId(mintedTokenId);
|
139
163
|
|
140
|
-
|
164
|
+
ObjectInfo memory info = ObjectInfo(
|
141
165
|
nftId,
|
142
166
|
parentNftId,
|
143
167
|
objectType,
|
144
168
|
address(0),
|
145
|
-
initialOwner
|
169
|
+
initialOwner,
|
170
|
+
data
|
146
171
|
);
|
147
172
|
|
148
173
|
_info[nftId] = info;
|
@@ -160,23 +185,197 @@ contract Registry is IRegistry {
|
|
160
185
|
return _nftIdByAddress[object];
|
161
186
|
}
|
162
187
|
|
188
|
+
function isRegistered(
|
189
|
+
NftId nftId
|
190
|
+
) public view override returns (bool) {
|
191
|
+
return _info[nftId].objectType.gtz();
|
192
|
+
}
|
193
|
+
|
163
194
|
function isRegistered(
|
164
195
|
address object
|
165
196
|
) external view override returns (bool) {
|
166
197
|
return _nftIdByAddress[object].gtz();
|
167
198
|
}
|
168
199
|
|
169
|
-
function
|
200
|
+
function getObjectInfo(
|
170
201
|
NftId nftId
|
171
|
-
) external view override returns (
|
202
|
+
) external view override returns (ObjectInfo memory info) {
|
172
203
|
return _info[nftId];
|
173
204
|
}
|
174
205
|
|
206
|
+
function getName(
|
207
|
+
NftId nftId
|
208
|
+
) external view returns (string memory name) {
|
209
|
+
return _string[nftId];
|
210
|
+
}
|
211
|
+
|
175
212
|
function getOwner(NftId nftId) external view override returns (address) {
|
176
213
|
return _chainNft.ownerOf(nftId.toInt());
|
177
214
|
}
|
178
215
|
|
179
|
-
function
|
180
|
-
return
|
216
|
+
function getChainNft() external view override returns (IChainNft) {
|
217
|
+
return _chainNft;
|
218
|
+
}
|
219
|
+
|
220
|
+
// special case to retrive a gif service
|
221
|
+
function getServiceAddress(string memory serviceName, VersionPart majorVersion) external view override returns (address serviceAddress) {
|
222
|
+
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
223
|
+
return _service[serviceNameHash][majorVersion];
|
224
|
+
}
|
225
|
+
|
226
|
+
// from IERC165
|
227
|
+
function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
|
228
|
+
return interfaceId == type(IRegistry).interfaceId;
|
229
|
+
}
|
230
|
+
|
231
|
+
// from IRegistryLinked
|
232
|
+
function getRegistry() external view override returns (IRegistry registry) {
|
233
|
+
return this;
|
234
|
+
}
|
235
|
+
|
236
|
+
// from IRegisterable
|
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
|
+
|
246
|
+
function getOwner() public view override returns (address owner) {
|
247
|
+
return _nftId.gtz() ? this.getOwner(_nftId) : _initialOwner;
|
248
|
+
}
|
249
|
+
|
250
|
+
function getNftId() external view override (IRegisterable, IRegistry) returns (NftId nftId) {
|
251
|
+
return _nftId;
|
252
|
+
}
|
253
|
+
|
254
|
+
function getParentNftId() external view returns (NftId nftId) {
|
255
|
+
// we're the global registry
|
256
|
+
if(block.chainid == 1) {
|
257
|
+
return toNftId(_chainNftInternal.PROTOCOL_NFT_ID());
|
258
|
+
}
|
259
|
+
else {
|
260
|
+
return toNftId(_chainNftInternal.GLOBAL_REGISTRY_ID());
|
261
|
+
}
|
262
|
+
}
|
263
|
+
|
264
|
+
function getData() external pure returns (bytes memory data) {
|
265
|
+
return "";
|
266
|
+
}
|
267
|
+
|
268
|
+
// registry specific functions
|
269
|
+
function getProtocolOwner() external view override returns (address) {
|
270
|
+
return _protocolOwner;
|
271
|
+
}
|
272
|
+
|
273
|
+
/// @dev defines which types are allowed to register
|
274
|
+
function _setupValidTypes() internal {
|
275
|
+
_isValidType[REGISTRY()] = true; // only for global registry
|
276
|
+
_isValidType[TOKEN()] = true;
|
277
|
+
_isValidType[SERVICE()] = true;
|
278
|
+
_isValidType[INSTANCE()] = true;
|
279
|
+
_isValidType[STAKE()] = true;
|
280
|
+
_isValidType[PRODUCT()] = true;
|
281
|
+
_isValidType[ORACLE()] = true;
|
282
|
+
_isValidType[POOL()] = true;
|
283
|
+
_isValidType[POLICY()] = true;
|
284
|
+
_isValidType[BUNDLE()] = true;
|
181
285
|
}
|
286
|
+
|
287
|
+
/// @dev defines which types - parent type relations are allowed to register
|
288
|
+
function _setupValidParentTypes() internal {
|
289
|
+
// registry as parent
|
290
|
+
_isValidParentType[TOKEN()][REGISTRY()] = true;
|
291
|
+
_isValidParentType[SERVICE()][REGISTRY()] = true;
|
292
|
+
_isValidParentType[INSTANCE()][REGISTRY()] = true;
|
293
|
+
|
294
|
+
// instance as parent
|
295
|
+
_isValidParentType[PRODUCT()][INSTANCE()] = true;
|
296
|
+
_isValidParentType[DISTRIBUTOR()][INSTANCE()] = true;
|
297
|
+
_isValidParentType[ORACLE()][INSTANCE()] = true;
|
298
|
+
_isValidParentType[POOL()][INSTANCE()] = true;
|
299
|
+
|
300
|
+
// product as parent
|
301
|
+
_isValidParentType[POLICY()][PRODUCT()] = true;
|
302
|
+
|
303
|
+
// pool as parent
|
304
|
+
_isValidParentType[BUNDLE()][POOL()] = true;
|
305
|
+
_isValidParentType[STAKE()][POOL()] = true;
|
306
|
+
}
|
307
|
+
|
308
|
+
/// @dev protocol registration used to anchor the dip ecosystem relations
|
309
|
+
function _registerProtocol() virtual internal {
|
310
|
+
uint256 protocolId = _chainNftInternal.PROTOCOL_NFT_ID();
|
311
|
+
_chainNftInternal.mint(_protocolOwner, protocolId);
|
312
|
+
|
313
|
+
NftId protocolNftid = toNftId(protocolId);
|
314
|
+
ObjectInfo memory protocolInfo = ObjectInfo(
|
315
|
+
protocolNftid,
|
316
|
+
zeroNftId(), // parent nft id
|
317
|
+
PROTOCOL(),
|
318
|
+
address(0), // contract address
|
319
|
+
_protocolOwner,
|
320
|
+
"" // data
|
321
|
+
);
|
322
|
+
|
323
|
+
_info[protocolNftid] = protocolInfo;
|
324
|
+
}
|
325
|
+
|
326
|
+
/// @dev registry registration
|
327
|
+
/// might also register the global registry when not on mainnet
|
328
|
+
function _registerRegistry() virtual internal returns (NftId registryNftId) {
|
329
|
+
uint256 registryId = _chainNftInternal.calculateTokenId(2);
|
330
|
+
registryNftId = toNftId(registryId);
|
331
|
+
|
332
|
+
// we're not the global registry
|
333
|
+
if(registryId != _chainNftInternal.GLOBAL_REGISTRY_ID()) {
|
334
|
+
_registerGlobalRegistry();
|
335
|
+
}
|
336
|
+
|
337
|
+
_chainNftInternal.mint(_protocolOwner, registryId);
|
338
|
+
_registerObjectInfo(this, registryNftId);
|
339
|
+
}
|
340
|
+
|
341
|
+
|
342
|
+
/// @dev global registry registration for non mainnet registries
|
343
|
+
function _registerGlobalRegistry() virtual internal {
|
344
|
+
uint256 globalRegistryId = _chainNftInternal.GLOBAL_REGISTRY_ID();
|
345
|
+
_chainNftInternal.mint(_protocolOwner, globalRegistryId);
|
346
|
+
|
347
|
+
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
348
|
+
ObjectInfo memory globalRegistryInfo = ObjectInfo(
|
349
|
+
globalRegistryNftId,
|
350
|
+
toNftId(_chainNftInternal.PROTOCOL_NFT_ID()),
|
351
|
+
REGISTRY(),
|
352
|
+
address(0), // contract address
|
353
|
+
_protocolOwner,
|
354
|
+
"" // data
|
355
|
+
);
|
356
|
+
|
357
|
+
_info[globalRegistryNftId] = globalRegistryInfo;
|
358
|
+
}
|
359
|
+
|
360
|
+
|
361
|
+
function _registerObjectInfo(
|
362
|
+
IRegisterable registerable,
|
363
|
+
NftId nftId
|
364
|
+
) internal virtual {
|
365
|
+
address objectAddress = address(registerable);
|
366
|
+
ObjectInfo memory info = ObjectInfo(
|
367
|
+
nftId,
|
368
|
+
registerable.getParentNftId(),
|
369
|
+
registerable.getType(),
|
370
|
+
objectAddress,
|
371
|
+
registerable.getOwner(),
|
372
|
+
registerable.getData()
|
373
|
+
);
|
374
|
+
|
375
|
+
_info[nftId] = info;
|
376
|
+
_nftIdByAddress[objectAddress] = nftId;
|
377
|
+
|
378
|
+
// add logging
|
379
|
+
}
|
380
|
+
|
182
381
|
}
|
@@ -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
|
+
}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {Blocknumber, blockNumber} from "../types/Blocknumber.sol";
|
5
|
+
import {Timestamp, blockTimestamp} from "../types/Timestamp.sol";
|
6
|
+
import {Version, VersionPart} from "../types/Version.sol";
|
7
|
+
|
8
|
+
interface IVersionable {
|
9
|
+
|
10
|
+
struct VersionInfo {
|
11
|
+
Version version;
|
12
|
+
address implementation;
|
13
|
+
address activatedBy;
|
14
|
+
Timestamp activatedAt;
|
15
|
+
Blocknumber activatedIn;
|
16
|
+
}
|
17
|
+
|
18
|
+
event LogVersionableActivated(Version version, address implementation, address activatedBy);
|
19
|
+
|
20
|
+
/**
|
21
|
+
* @dev IMPORTANT this function needs to be implemented by each new version
|
22
|
+
* any such activate implementation needs to call internal function call _activate()
|
23
|
+
* any new version needs to inherit from previous version
|
24
|
+
*/
|
25
|
+
function activate(address implementation, address activatedBy) external;
|
26
|
+
|
27
|
+
/**
|
28
|
+
* @dev returns true if the specified version has been activated for the current contract
|
29
|
+
*/
|
30
|
+
function isActivated(Version version) external view returns(bool);
|
31
|
+
|
32
|
+
/**
|
33
|
+
* @dev returns currently active version of this contract
|
34
|
+
*/
|
35
|
+
function getVersion() external pure returns(Version);
|
36
|
+
|
37
|
+
/**
|
38
|
+
* @dev returns the number of all deployed versions of this contract
|
39
|
+
*/
|
40
|
+
function getVersionCount() external view returns(uint256 numberOfVersions);
|
41
|
+
|
42
|
+
/**
|
43
|
+
* @dev returns the i-th (index) version of this contract
|
44
|
+
*/
|
45
|
+
function getVersion(uint256 index) external view returns(Version version);
|
46
|
+
|
47
|
+
/**
|
48
|
+
* @dev returns the i-th (index) version info of this contract
|
49
|
+
*/
|
50
|
+
function getVersionInfo(Version version) external view returns(VersionInfo memory versionInfo);
|
51
|
+
|
52
|
+
}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {NftId, zeroNftId} from "../types/NftId.sol";
|
5
|
+
import {ObjectType} from "../types/ObjectType.sol";
|
6
|
+
|
7
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
8
|
+
import {IRegisterable} from "./IRegisterable.sol";
|
9
|
+
|
10
|
+
import {ERC165} from "./ERC165.sol";
|
11
|
+
|
12
|
+
abstract contract Registerable is
|
13
|
+
ERC165,
|
14
|
+
IRegisterable
|
15
|
+
{
|
16
|
+
IRegistry internal immutable _registry;
|
17
|
+
NftId internal immutable _parentNftId;
|
18
|
+
address internal immutable _initialOwner;
|
19
|
+
|
20
|
+
modifier onlyOwner() virtual {
|
21
|
+
require(
|
22
|
+
msg.sender == getOwner(),
|
23
|
+
"ERROR:RGB-001:NOT_OWNER"
|
24
|
+
);
|
25
|
+
_;
|
26
|
+
}
|
27
|
+
|
28
|
+
constructor(
|
29
|
+
address registryAddress,
|
30
|
+
NftId parentNftId
|
31
|
+
)
|
32
|
+
ERC165()
|
33
|
+
{
|
34
|
+
require(
|
35
|
+
address(registryAddress) != address(0),
|
36
|
+
"ERROR:RGB-010:REGISTRY_ZERO"
|
37
|
+
);
|
38
|
+
|
39
|
+
_registry = IRegistry(registryAddress);
|
40
|
+
require(
|
41
|
+
_registry.supportsInterface(type(IRegistry).interfaceId),
|
42
|
+
"ERROR:RGB-011:NOT_REGISTRY"
|
43
|
+
);
|
44
|
+
|
45
|
+
_parentNftId = parentNftId;
|
46
|
+
require(
|
47
|
+
_registry.isRegistered(_parentNftId),
|
48
|
+
"ERROR:RGB-012:PARENT_NOT_REGISTERED"
|
49
|
+
);
|
50
|
+
|
51
|
+
_initialOwner = msg.sender;
|
52
|
+
|
53
|
+
// register support for IRegisterable
|
54
|
+
_registerInterface(type(IRegisterable).interfaceId);
|
55
|
+
}
|
56
|
+
|
57
|
+
// from IRegistryLinked
|
58
|
+
function register() public onlyOwner virtual override returns (NftId nftId) {
|
59
|
+
return _registry.register(address(this));
|
60
|
+
}
|
61
|
+
|
62
|
+
function getRegistry() public view virtual override returns (IRegistry registry) {
|
63
|
+
return _registry;
|
64
|
+
}
|
65
|
+
|
66
|
+
function getOwner() public view virtual override returns (address owner) {
|
67
|
+
NftId nftId = _registry.getNftId(address(this));
|
68
|
+
if(nftId == zeroNftId()) {
|
69
|
+
return _initialOwner;
|
70
|
+
}
|
71
|
+
|
72
|
+
return _registry.getOwner(nftId);
|
73
|
+
}
|
74
|
+
|
75
|
+
function getNftId() public view override returns (NftId nftId) {
|
76
|
+
return _registry.getNftId(address(this));
|
77
|
+
}
|
78
|
+
|
79
|
+
function getParentNftId() public view override returns (NftId nftId) {
|
80
|
+
return _parentNftId;
|
81
|
+
}
|
82
|
+
|
83
|
+
function getData() public view virtual override returns (bytes memory data) {
|
84
|
+
return "";
|
85
|
+
}
|
86
|
+
}
|