@etherisc/gif-next 0.0.2-a4b0112-775 → 0.0.2-a6f9f86-582
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 +160 -6
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +104 -118
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1119 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2622 -827
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +117 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +506 -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 +421 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +736 -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/ServiceBase.sol/ServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +468 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IDistribution.sol/IDistribution.json} +2 -2
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/{treasury → module}/ITreasury.sol/ITreasury.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +194 -2
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +408 -32
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +745 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +637 -52
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1013 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +476 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
- package/artifacts/contracts/{components/Component.sol/Component.json → shared/IRegisterable.sol/IRegisterable.json} +98 -102
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +10 -0
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
- package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +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 +286 -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/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +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/NumberId.sol/NumberIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +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 +77 -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/IBaseComponent.sol +19 -0
- package/contracts/instance/AccessManagedSimple.sol +114 -0
- package/contracts/instance/AccessManagerSimple.sol +682 -0
- package/contracts/instance/IAccessManagerSimple.sol +391 -0
- package/contracts/instance/Instance.sol +371 -53
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceService.sol +45 -0
- package/contracts/instance/base/IKeyValueStore.sol +48 -0
- package/contracts/instance/base/ILifecycle.sol +30 -0
- package/contracts/instance/base/IService.sol +15 -0
- package/contracts/instance/base/KeyValueStore.sol +188 -0
- package/contracts/instance/base/Lifecycle.sol +100 -0
- package/contracts/instance/base/ServiceBase.sol +44 -0
- package/contracts/instance/module/IAccess.sol +38 -0
- package/contracts/instance/module/IBundle.sol +19 -0
- package/contracts/instance/module/IDistribution.sol +39 -0
- package/contracts/instance/module/IPolicy.sol +45 -0
- package/contracts/instance/module/IRisk.sol +11 -0
- package/contracts/instance/module/ISetup.sol +41 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/registry/ChainNft.sol +94 -42
- package/contracts/registry/IChainNft.sol +3 -2
- package/contracts/registry/IRegistry.sol +50 -44
- package/contracts/registry/IRegistryService.sol +29 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +435 -126
- package/contracts/registry/RegistryService.sol +369 -0
- package/contracts/registry/RegistryServiceManager.sol +43 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +21 -0
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +17 -0
- package/contracts/shared/IVersionable.sol +96 -0
- package/contracts/shared/NftOwnable.sol +136 -0
- package/contracts/shared/ProxyManager.sol +94 -0
- package/contracts/shared/Registerable.sol +89 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +147 -0
- package/contracts/test/TestFee.sol +25 -0
- package/contracts/test/TestRegisterable.sol +18 -0
- package/contracts/test/TestRoleId.sol +14 -0
- package/contracts/test/TestService.sol +26 -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/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +44 -20
- package/contracts/types/Key32.sol +50 -0
- package/contracts/types/NftId.sol +22 -1
- package/contracts/types/NftIdSet.sol +60 -0
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +60 -15
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +75 -0
- package/contracts/types/StateId.sol +14 -4
- package/contracts/types/Timestamp.sol +29 -4
- package/contracts/types/UFixed.sol +26 -23
- package/contracts/types/Version.sol +104 -0
- package/package.json +12 -4
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
- package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
- package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
- package/artifacts/contracts/components/Pool.sol/Pool.json +0 -328
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
- package/artifacts/contracts/components/Product.sol/Product.json +0 -346
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +0 -1479
- package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
- package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -299
- 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/IComponentContract.json +0 -205
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
- 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/IPolicy.sol/IPolicyModule.json +0 -254
- package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -254
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -129
- package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -155
- 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/ProductModule.json +0 -75
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
- package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
- 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/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
- package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
- package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
- package/contracts/components/Component.sol +0 -77
- package/contracts/components/IPool.sol +0 -15
- package/contracts/components/IProduct.sol +0 -16
- package/contracts/components/Pool.sol +0 -52
- package/contracts/components/Product.sol +0 -89
- package/contracts/experiment/statemachine/README.md +0 -112
- package/contracts/instance/IInstance.sol +0 -25
- package/contracts/instance/access/Access.sol +0 -165
- package/contracts/instance/access/IAccess.sol +0 -63
- package/contracts/instance/component/ComponentModule.sol +0 -274
- package/contracts/instance/component/IComponent.sol +0 -74
- package/contracts/instance/lifecycle/ILifecycle.sol +0 -47
- package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
- package/contracts/instance/policy/IPolicy.sol +0 -50
- package/contracts/instance/policy/PolicyModule.sol +0 -114
- package/contracts/instance/pool/IPoolModule.sol +0 -23
- package/contracts/instance/pool/PoolModule.sol +0 -81
- package/contracts/instance/product/IProductService.sol +0 -36
- package/contracts/instance/product/ProductService.sol +0 -136
- package/contracts/instance/treasury/ITreasury.sol +0 -91
- package/contracts/instance/treasury/TokenHandler.sol +0 -24
- package/contracts/instance/treasury/TreasuryModule.sol +0 -168
@@ -0,0 +1,288 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {EnumerableSet} from "@openzeppelin5/contracts/utils/structs/EnumerableSet.sol";
|
5
|
+
import {ShortString, ShortStrings} from "@openzeppelin5/contracts/utils/ShortStrings.sol";
|
6
|
+
|
7
|
+
import {AccessManagedSimple} from "./AccessManagedSimple.sol";
|
8
|
+
import {AccessManagerSimple} from "./AccessManagerSimple.sol";
|
9
|
+
import {IBundle} from "./module/IBundle.sol";
|
10
|
+
import {IPolicy} from "./module/IPolicy.sol";
|
11
|
+
import {IRisk} from "./module/IRisk.sol";
|
12
|
+
import {ISetup} from "./module/ISetup.sol";
|
13
|
+
import {Key32, KeyId, Key32Lib} from "../types/Key32.sol";
|
14
|
+
import {KeyValueStore} from "./base/KeyValueStore.sol";
|
15
|
+
import {NftId} from "../types/NftId.sol";
|
16
|
+
import {NumberId} from "../types/NumberId.sol";
|
17
|
+
import {ObjectType, BUNDLE, DISTRIBUTION, POLICY, POOL, ROLE, PRODUCT, TARGET} from "../types/ObjectType.sol";
|
18
|
+
import {RiskId, RiskIdLib} from "../types/RiskId.sol";
|
19
|
+
import {RoleId, RoleIdLib} from "../types/RoleId.sol";
|
20
|
+
import {StateId, ACTIVE} from "../types/StateId.sol";
|
21
|
+
import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
|
22
|
+
|
23
|
+
contract InstanceAccessManager is
|
24
|
+
AccessManagedSimple
|
25
|
+
{
|
26
|
+
string public constant ADMIN_ROLE_NAME = "AdminRole";
|
27
|
+
string public constant PUBLIC_ROLE_NAME = "PublicRole";
|
28
|
+
|
29
|
+
uint64 public constant CUSTOM_ROLE_ID_MIN = 10000;
|
30
|
+
uint32 public constant EXECUTION_DELAY = 0;
|
31
|
+
|
32
|
+
struct RoleInfo {
|
33
|
+
ShortString name;
|
34
|
+
bool isCustom;
|
35
|
+
bool isLocked;
|
36
|
+
Timestamp createdAt;
|
37
|
+
Timestamp updatedAt;
|
38
|
+
}
|
39
|
+
|
40
|
+
struct TargetInfo {
|
41
|
+
ShortString name;
|
42
|
+
bool isCustom;
|
43
|
+
bool isLocked;
|
44
|
+
Timestamp createdAt;
|
45
|
+
Timestamp updatedAt;
|
46
|
+
}
|
47
|
+
|
48
|
+
error ErrorRoleIdInvalid(RoleId roleId);
|
49
|
+
error ErrorRoleIdTooBig(RoleId roleId);
|
50
|
+
error ErrorRoleIdTooSmall(RoleId roleId);
|
51
|
+
error ErrorRoleIdAlreadyExists(RoleId roleId, ShortString name);
|
52
|
+
error ErrorRoleIdNotActive(RoleId roleId);
|
53
|
+
error ErrorRoleNameEmpty(RoleId roleId);
|
54
|
+
error ErrorRoleNameNotUnique(RoleId roleId, ShortString name);
|
55
|
+
error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
|
56
|
+
error ErrorRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
|
57
|
+
error ErrorSetLockedForNonexstentRole(RoleId roleId);
|
58
|
+
error ErrorGrantNonexstentRole(RoleId roleId);
|
59
|
+
error ErrorRevokeNonexstentRole(RoleId roleId);
|
60
|
+
error ErrorRenounceNonexstentRole(RoleId roleId);
|
61
|
+
|
62
|
+
error ErrorTargetAddressZero();
|
63
|
+
error ErrorTargetAlreadyExists(address target, ShortString name);
|
64
|
+
error ErrorTargetNameEmpty(address target);
|
65
|
+
error ErrorTargetNameExists(address target, address existingTarget, ShortString name);
|
66
|
+
error ErrorSetLockedForNonexstentTarget(address target);
|
67
|
+
|
68
|
+
// role specific state
|
69
|
+
mapping(RoleId roleId => RoleInfo info) internal _role;
|
70
|
+
mapping(RoleId roleId => EnumerableSet.AddressSet roleMembers) internal _roleMembers;
|
71
|
+
mapping(ShortString name => RoleId roleId) internal _roleForName;
|
72
|
+
RoleId [] internal _roles;
|
73
|
+
|
74
|
+
// target specific state
|
75
|
+
mapping(address target => TargetInfo info) internal _target;
|
76
|
+
mapping(ShortString name => address target) internal _targetForName;
|
77
|
+
address [] internal _targets;
|
78
|
+
|
79
|
+
AccessManagerSimple internal _accessManager;
|
80
|
+
|
81
|
+
constructor(address accessManager)
|
82
|
+
AccessManagedSimple(accessManager)
|
83
|
+
{
|
84
|
+
_accessManager = AccessManagerSimple(accessManager);
|
85
|
+
|
86
|
+
_createRole(RoleIdLib.toRoleId(_accessManager.ADMIN_ROLE()), ADMIN_ROLE_NAME, false, false);
|
87
|
+
_createRole(RoleIdLib.toRoleId(_accessManager.PUBLIC_ROLE()), PUBLIC_ROLE_NAME, false, false);
|
88
|
+
}
|
89
|
+
|
90
|
+
//--- Role ------------------------------------------------------//
|
91
|
+
|
92
|
+
function createDefaultRole(RoleId roleId, string memory name) external restricted() {
|
93
|
+
_createRole(roleId, name, false, true);
|
94
|
+
}
|
95
|
+
|
96
|
+
function createRole(RoleId roleId, string memory name) external restricted() {
|
97
|
+
_createRole(roleId, name, true, true);
|
98
|
+
}
|
99
|
+
|
100
|
+
function setRoleLocked(RoleId roleId, bool locked) external restricted() {
|
101
|
+
if (!roleExists(roleId)) {
|
102
|
+
revert ErrorSetLockedForNonexstentRole(roleId);
|
103
|
+
}
|
104
|
+
|
105
|
+
_role[roleId].isLocked = locked;
|
106
|
+
_role[roleId].updatedAt = TimestampLib.blockTimestamp();
|
107
|
+
}
|
108
|
+
|
109
|
+
function roleExists(RoleId roleId) public view returns (bool exists) {
|
110
|
+
return _role[roleId].createdAt.gtz();
|
111
|
+
}
|
112
|
+
|
113
|
+
function grantRole(RoleId roleId, address member) external restricted() returns (bool granted) {
|
114
|
+
if (!roleExists(roleId)) {
|
115
|
+
revert ErrorGrantNonexstentRole(roleId);
|
116
|
+
}
|
117
|
+
|
118
|
+
if (_role[roleId].isLocked) {
|
119
|
+
revert ErrorRoleIdNotActive(roleId);
|
120
|
+
}
|
121
|
+
|
122
|
+
if (!EnumerableSet.contains(_roleMembers[roleId], member)) {
|
123
|
+
_accessManager.grantRole(roleId.toInt(), member, EXECUTION_DELAY);
|
124
|
+
EnumerableSet.add(_roleMembers[roleId], member);
|
125
|
+
return true;
|
126
|
+
}
|
127
|
+
|
128
|
+
return false;
|
129
|
+
}
|
130
|
+
|
131
|
+
function revokeRole(RoleId roleId, address member) external restricted() returns (bool revoked) {
|
132
|
+
if (!roleExists(roleId)) {
|
133
|
+
revert ErrorRevokeNonexstentRole(roleId);
|
134
|
+
}
|
135
|
+
|
136
|
+
if (EnumerableSet.contains(_roleMembers[roleId], member)) {
|
137
|
+
_accessManager.revokeRole(roleId.toInt(), member);
|
138
|
+
EnumerableSet.remove(_roleMembers[roleId], member);
|
139
|
+
return true;
|
140
|
+
}
|
141
|
+
|
142
|
+
return false;
|
143
|
+
}
|
144
|
+
|
145
|
+
/// @dev not restricted function by intention
|
146
|
+
/// the restriction to role members is already enforced by the call to the access manger
|
147
|
+
function renounceRole(RoleId roleId) external returns (bool revoked) {
|
148
|
+
address member = msg.sender;
|
149
|
+
|
150
|
+
if (!roleExists(roleId)) {
|
151
|
+
revert ErrorRenounceNonexstentRole(roleId);
|
152
|
+
}
|
153
|
+
|
154
|
+
if (EnumerableSet.contains(_roleMembers[roleId], member)) {
|
155
|
+
// cannot use accessManger.renounce as it directly checks against msg.sender
|
156
|
+
_accessManager.revokeRole(roleId.toInt(), member);
|
157
|
+
EnumerableSet.remove(_roleMembers[roleId], member);
|
158
|
+
return true;
|
159
|
+
}
|
160
|
+
|
161
|
+
return false;
|
162
|
+
}
|
163
|
+
|
164
|
+
function roles() external view returns (uint256 numberOfRoles) {
|
165
|
+
return _roles.length;
|
166
|
+
}
|
167
|
+
|
168
|
+
function getRoleId(uint256 idx) external view returns (RoleId roleId) {
|
169
|
+
return _roles[idx];
|
170
|
+
}
|
171
|
+
|
172
|
+
function getRoleIdForName(string memory name) external view returns (RoleId roleId) {
|
173
|
+
return _roleForName[ShortStrings.toShortString(name)];
|
174
|
+
}
|
175
|
+
|
176
|
+
function getRole(RoleId roleId) external view returns (RoleInfo memory role) {
|
177
|
+
return _role[roleId];
|
178
|
+
}
|
179
|
+
|
180
|
+
function hasRole(RoleId roleId, address account) external view returns (bool accountHasRole) {
|
181
|
+
(accountHasRole, ) = _accessManager.hasRole(roleId.toInt(), account);
|
182
|
+
}
|
183
|
+
|
184
|
+
function roleMembers(RoleId roleId) external view returns (uint256 numberOfMembers) {
|
185
|
+
return EnumerableSet.length(_roleMembers[roleId]);
|
186
|
+
}
|
187
|
+
|
188
|
+
function getRoleMember(RoleId roleId, uint256 idx) external view returns (address roleMember) {
|
189
|
+
return EnumerableSet.at(_roleMembers[roleId], idx);
|
190
|
+
}
|
191
|
+
|
192
|
+
//--- Target ------------------------------------------------------//
|
193
|
+
function createTarget(address target, string memory name) external restricted() {
|
194
|
+
_createTarget(target, name, true, true);
|
195
|
+
}
|
196
|
+
|
197
|
+
function setTargetLocked(address target, bool locked) external restricted() {
|
198
|
+
if (!targetExists(target)) {
|
199
|
+
revert ErrorSetLockedForNonexstentTarget(target);
|
200
|
+
}
|
201
|
+
|
202
|
+
_target[target].isLocked = locked;
|
203
|
+
_accessManager.setTargetClosed(target, locked);
|
204
|
+
}
|
205
|
+
|
206
|
+
function targetExists(address target) public view returns (bool exists) {
|
207
|
+
return _target[target].createdAt.gtz();
|
208
|
+
}
|
209
|
+
|
210
|
+
//--- internal view/pure functions --------------------------------------//
|
211
|
+
|
212
|
+
function _createRole(RoleId roleId, string memory name, bool isCustom, bool validateParameters) internal {
|
213
|
+
if (validateParameters) {
|
214
|
+
_validateRoleParameters(roleId, name, isCustom);
|
215
|
+
}
|
216
|
+
|
217
|
+
RoleInfo memory role = RoleInfo(
|
218
|
+
ShortStrings.toShortString(name),
|
219
|
+
isCustom,
|
220
|
+
false, // role un-locked,
|
221
|
+
TimestampLib.blockTimestamp(),
|
222
|
+
TimestampLib.blockTimestamp());
|
223
|
+
|
224
|
+
_role[roleId] = role;
|
225
|
+
_roleForName[role.name] = roleId;
|
226
|
+
_roles.push(roleId);
|
227
|
+
}
|
228
|
+
|
229
|
+
function _validateRoleParameters(
|
230
|
+
RoleId roleId,
|
231
|
+
string memory name,
|
232
|
+
bool isCustom
|
233
|
+
)
|
234
|
+
internal
|
235
|
+
view
|
236
|
+
returns (RoleInfo memory existingRole)
|
237
|
+
{
|
238
|
+
// check role id
|
239
|
+
uint64 roleIdInt = RoleId.unwrap(roleId);
|
240
|
+
if(roleIdInt == _accessManager.ADMIN_ROLE() || roleIdInt == _accessManager.PUBLIC_ROLE()) {
|
241
|
+
revert ErrorRoleIdInvalid(roleId);
|
242
|
+
}
|
243
|
+
|
244
|
+
// prevent changing isCustom for existing roles
|
245
|
+
existingRole = _role[roleId];
|
246
|
+
|
247
|
+
if (existingRole.createdAt.gtz() && isCustom != existingRole.isCustom) {
|
248
|
+
revert ErrorRoleIsCustomIsImmutable(roleId, isCustom, existingRole.isCustom);
|
249
|
+
}
|
250
|
+
|
251
|
+
if (isCustom && roleIdInt < CUSTOM_ROLE_ID_MIN) {
|
252
|
+
revert ErrorRoleIdTooSmall(roleId);
|
253
|
+
} else if (!isCustom && roleIdInt >= CUSTOM_ROLE_ID_MIN) {
|
254
|
+
revert ErrorRoleIdTooBig(roleId);
|
255
|
+
}
|
256
|
+
|
257
|
+
// role name checks
|
258
|
+
ShortString nameShort = ShortStrings.toShortString(name);
|
259
|
+
if (ShortStrings.byteLength(nameShort) == 0) {
|
260
|
+
revert ErrorRoleNameEmpty(roleId);
|
261
|
+
}
|
262
|
+
|
263
|
+
if (_roleForName[nameShort] != RoleIdLib.zero() && _roleForName[nameShort] != roleId) {
|
264
|
+
revert ErrorRoleNameNotUnique(_roleForName[nameShort], nameShort);
|
265
|
+
}
|
266
|
+
}
|
267
|
+
|
268
|
+
function _createTarget(address target, string memory name, bool isCustom, bool validateParameters) internal {
|
269
|
+
if (validateParameters) {
|
270
|
+
_validateTargetParameters(target, name, isCustom);
|
271
|
+
}
|
272
|
+
|
273
|
+
TargetInfo memory info = TargetInfo(
|
274
|
+
ShortStrings.toShortString(name),
|
275
|
+
isCustom,
|
276
|
+
_accessManager.isTargetClosed(target), // sync with state in access manager
|
277
|
+
TimestampLib.blockTimestamp(),
|
278
|
+
TimestampLib.blockTimestamp());
|
279
|
+
|
280
|
+
_target[target] = info;
|
281
|
+
_targetForName[info.name] = target;
|
282
|
+
_targets.push(target);
|
283
|
+
}
|
284
|
+
|
285
|
+
function _validateTargetParameters(address target, string memory name, bool isCustom) internal view {
|
286
|
+
|
287
|
+
}
|
288
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {Clones} from "@openzeppelin5/contracts/proxy/Clones.sol";
|
5
|
+
|
6
|
+
import {AccessManagerSimple} from "./AccessManagerSimple.sol";
|
7
|
+
import {InstanceAccessManager} from "./InstanceAccessManager.sol";
|
8
|
+
import {Instance} from "./Instance.sol";
|
9
|
+
|
10
|
+
contract InstanceService {
|
11
|
+
|
12
|
+
address internal _accessManagerMaster;
|
13
|
+
address internal _instanceAccessManagerMaster;
|
14
|
+
address internal _instanceMaster;
|
15
|
+
|
16
|
+
function createInstanceClone()
|
17
|
+
external
|
18
|
+
returns (
|
19
|
+
AccessManagerSimple am,
|
20
|
+
InstanceAccessManager im,
|
21
|
+
Instance i
|
22
|
+
)
|
23
|
+
{
|
24
|
+
am = AccessManagerSimple(Clones.clone(_accessManagerMaster));
|
25
|
+
im = InstanceAccessManager(Clones.clone(_instanceAccessManagerMaster));
|
26
|
+
i = Instance(Clones.clone(_instanceMaster));
|
27
|
+
}
|
28
|
+
|
29
|
+
function setAccessManagerMaster(address accessManager) external {
|
30
|
+
_accessManagerMaster = accessManager;
|
31
|
+
}
|
32
|
+
|
33
|
+
function setInstanceAccessManagerMaster(address instanceAccessManager) external {
|
34
|
+
_instanceAccessManagerMaster = instanceAccessManager;
|
35
|
+
}
|
36
|
+
|
37
|
+
function setInstanceMaster(address instance) external {
|
38
|
+
_instanceMaster = instance;
|
39
|
+
}
|
40
|
+
|
41
|
+
function getAccessManagerMaster() external view returns (address) { return address(_accessManagerMaster); }
|
42
|
+
function getInstanceAccessManagerMaster() external view returns (address) { return address(_instanceAccessManagerMaster); }
|
43
|
+
function getInstanceMaster() external view returns (address) { return address(_instanceMaster); }
|
44
|
+
}
|
45
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
|
5
|
+
import {Key32, KeyId} from "../../types/Key32.sol";
|
6
|
+
import {NftId} from "../../types/NftId.sol";
|
7
|
+
import {ObjectType} from "../../types/ObjectType.sol";
|
8
|
+
import {StateId} from "../../types/StateId.sol";
|
9
|
+
|
10
|
+
import {ILifecycle} from "./ILifecycle.sol";
|
11
|
+
|
12
|
+
interface IKeyValueStore is ILifecycle {
|
13
|
+
|
14
|
+
struct Value {
|
15
|
+
Metadata metadata;
|
16
|
+
bytes data;
|
17
|
+
}
|
18
|
+
|
19
|
+
struct Metadata {
|
20
|
+
ObjectType objectType;
|
21
|
+
StateId state;
|
22
|
+
// TODO updatedBy needs concept that says what value should go here
|
23
|
+
// eg account outside gif objects that initiated the tx
|
24
|
+
// implies the caller needs to be propagated through all calls up to key values store itself
|
25
|
+
// to always have the instance address there doesn't seem to make sense
|
26
|
+
address updatedBy;
|
27
|
+
Blocknumber updatedIn;
|
28
|
+
Blocknumber createdIn;
|
29
|
+
}
|
30
|
+
|
31
|
+
event LogInfoCreated(ObjectType objectType, KeyId keyId, StateId state, address createdBy, address txOrigin);
|
32
|
+
event LogInfoUpdated(ObjectType objectType, KeyId keyId, StateId state, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
|
33
|
+
event LogStateUpdated(ObjectType objectType, KeyId keyId, StateId stateOld, StateId stateNew, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
|
34
|
+
|
35
|
+
// generic state changing functions
|
36
|
+
function create(Key32 key, bytes memory data) external;
|
37
|
+
function update(Key32 key, bytes memory data, StateId state) external;
|
38
|
+
function updateData(Key32 key, bytes memory data) external;
|
39
|
+
function updateState(Key32 key, StateId state) external;
|
40
|
+
|
41
|
+
function exists(Key32 key) external view returns (bool);
|
42
|
+
function get(Key32 key) external view returns (Value memory value);
|
43
|
+
function getData(Key32 key) external view returns (bytes memory data);
|
44
|
+
function getMetadata(Key32 key) external view returns (Metadata memory metadata);
|
45
|
+
function getState(Key32 key) external view returns (StateId state);
|
46
|
+
|
47
|
+
function toKey32(ObjectType objectType, KeyId id) external pure returns(Key32);
|
48
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {NftId} from "../../types/NftId.sol";
|
5
|
+
import {ObjectType} from "../../types/ObjectType.sol";
|
6
|
+
import {StateId} from "../../types/StateId.sol";
|
7
|
+
|
8
|
+
interface ILifecycle {
|
9
|
+
|
10
|
+
error ErrorNoLifecycle(NftId nftId, ObjectType objectType);
|
11
|
+
error ErrorInvalidStateTransition(
|
12
|
+
ObjectType objectType,
|
13
|
+
StateId fromStateId,
|
14
|
+
StateId toStateId
|
15
|
+
);
|
16
|
+
|
17
|
+
function hasLifecycle(
|
18
|
+
ObjectType objectType
|
19
|
+
) external view returns (bool);
|
20
|
+
|
21
|
+
function getInitialState(
|
22
|
+
ObjectType objectType
|
23
|
+
) external view returns (StateId);
|
24
|
+
|
25
|
+
function isValidTransition(
|
26
|
+
ObjectType objectType,
|
27
|
+
StateId fromId,
|
28
|
+
StateId toId
|
29
|
+
) external view returns (bool);
|
30
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {VersionPart} from "../../types/Version.sol";
|
5
|
+
|
6
|
+
import {IRegisterable} from "../../shared/IRegisterable.sol";
|
7
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
8
|
+
|
9
|
+
interface IService is
|
10
|
+
IRegisterable,
|
11
|
+
IVersionable
|
12
|
+
{
|
13
|
+
function getName() external pure returns(string memory name);
|
14
|
+
function getMajorVersion() external view returns(VersionPart majorVersion);
|
15
|
+
}
|
@@ -0,0 +1,188 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
|
5
|
+
import {Key32, KeyId, Key32Lib} from "../../types/Key32.sol";
|
6
|
+
import {NftId} from "../../types/NftId.sol";
|
7
|
+
import {ObjectType} from "../../types/ObjectType.sol";
|
8
|
+
import {StateId, ACTIVE} from "../../types/StateId.sol";
|
9
|
+
import {Timestamp, TimestampLib} from "../../types/Timestamp.sol";
|
10
|
+
|
11
|
+
import {Lifecycle} from "./Lifecycle.sol";
|
12
|
+
import {IKeyValueStore} from "./IKeyValueStore.sol";
|
13
|
+
|
14
|
+
contract KeyValueStore is Lifecycle, IKeyValueStore {
|
15
|
+
|
16
|
+
mapping(Key32 key32 => Value value) private _value;
|
17
|
+
address private _owner;
|
18
|
+
|
19
|
+
modifier onlyOwner() {
|
20
|
+
require(
|
21
|
+
msg.sender == _owner,
|
22
|
+
"ERROR:KVS-001:NOT_OWNER");
|
23
|
+
_;
|
24
|
+
}
|
25
|
+
|
26
|
+
constructor() {
|
27
|
+
_owner = msg.sender;
|
28
|
+
}
|
29
|
+
|
30
|
+
function create(
|
31
|
+
Key32 key32,
|
32
|
+
bytes memory data
|
33
|
+
)
|
34
|
+
public
|
35
|
+
onlyOwner
|
36
|
+
{
|
37
|
+
_create(key32, data);
|
38
|
+
}
|
39
|
+
|
40
|
+
function _create(
|
41
|
+
Key32 key32,
|
42
|
+
bytes memory data
|
43
|
+
)
|
44
|
+
internal
|
45
|
+
{
|
46
|
+
ObjectType objectType = key32.toObjectType();
|
47
|
+
require(objectType.gtz(), "ERROR:KVS-010:TYPE_UNDEFINED");
|
48
|
+
|
49
|
+
Metadata storage metadata = _value[key32].metadata;
|
50
|
+
require(metadata.state.eqz(), "ERROR:KVS-012:ALREADY_CREATED");
|
51
|
+
|
52
|
+
address createdBy = msg.sender;
|
53
|
+
Blocknumber blocknumber = blockBlocknumber();
|
54
|
+
StateId initialState = hasLifecycle(objectType) ? getInitialState(objectType) : ACTIVE();
|
55
|
+
|
56
|
+
// set metadata
|
57
|
+
metadata.objectType = objectType;
|
58
|
+
metadata.state = initialState;
|
59
|
+
metadata.updatedBy = createdBy;
|
60
|
+
metadata.updatedIn = blocknumber;
|
61
|
+
metadata.createdIn = blocknumber;
|
62
|
+
|
63
|
+
// set data
|
64
|
+
_value[key32].data = data;
|
65
|
+
|
66
|
+
// solhint-disable-next-line avoid-tx-origin
|
67
|
+
emit LogInfoCreated(key32.toObjectType(), key32.toKeyId(), initialState, createdBy, tx.origin);
|
68
|
+
}
|
69
|
+
|
70
|
+
function update(
|
71
|
+
Key32 key32,
|
72
|
+
bytes memory data,
|
73
|
+
StateId state
|
74
|
+
)
|
75
|
+
public
|
76
|
+
onlyOwner
|
77
|
+
{
|
78
|
+
_update(key32, data, state);
|
79
|
+
}
|
80
|
+
|
81
|
+
function _update(
|
82
|
+
Key32 key32,
|
83
|
+
bytes memory data,
|
84
|
+
StateId state
|
85
|
+
)
|
86
|
+
internal
|
87
|
+
{
|
88
|
+
require(state.gtz(), "ERROR:KVS-020:STATE_UNDEFINED");
|
89
|
+
Metadata storage metadata = _value[key32].metadata;
|
90
|
+
StateId stateOld = metadata.state;
|
91
|
+
require(stateOld.gtz(), "ERROR:KVS-021:NOT_EXISTING");
|
92
|
+
|
93
|
+
// update data
|
94
|
+
_value[key32].data = data;
|
95
|
+
|
96
|
+
// update metadata (and state)
|
97
|
+
address updatedBy = msg.sender;
|
98
|
+
Blocknumber lastUpdatedIn = metadata.updatedIn;
|
99
|
+
metadata.state = state;
|
100
|
+
metadata.updatedBy = updatedBy;
|
101
|
+
metadata.updatedIn = blockBlocknumber();
|
102
|
+
|
103
|
+
// create log entries
|
104
|
+
// solhint-disable avoid-tx-origin
|
105
|
+
emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
|
106
|
+
emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
|
107
|
+
// solhing-enable
|
108
|
+
}
|
109
|
+
|
110
|
+
function updateData(Key32 key32, bytes memory data)
|
111
|
+
public
|
112
|
+
onlyOwner
|
113
|
+
{
|
114
|
+
_updateData(key32, data);
|
115
|
+
}
|
116
|
+
|
117
|
+
function _updateData(Key32 key32, bytes memory data)
|
118
|
+
internal
|
119
|
+
{
|
120
|
+
Metadata storage metadata = _value[key32].metadata;
|
121
|
+
StateId state = metadata.state;
|
122
|
+
require(state.gtz(), "ERROR:KVS-030:NOT_EXISTING");
|
123
|
+
|
124
|
+
// update data
|
125
|
+
_value[key32].data = data;
|
126
|
+
|
127
|
+
// update metadata
|
128
|
+
address updatedBy = msg.sender;
|
129
|
+
Blocknumber lastUpdatedIn = metadata.updatedIn;
|
130
|
+
metadata.updatedBy = updatedBy;
|
131
|
+
metadata.updatedIn = blockBlocknumber();
|
132
|
+
|
133
|
+
// create log entry
|
134
|
+
// solhint-disable-next-line avoid-tx-origin
|
135
|
+
emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
|
136
|
+
}
|
137
|
+
|
138
|
+
function updateState(Key32 key32, StateId state)
|
139
|
+
public
|
140
|
+
onlyOwner
|
141
|
+
{
|
142
|
+
_updateState(key32, state);
|
143
|
+
}
|
144
|
+
|
145
|
+
function _updateState(Key32 key32, StateId state)
|
146
|
+
internal
|
147
|
+
{
|
148
|
+
require(state.gtz(), "ERROR:KVS-040:STATE_UNDEFINED");
|
149
|
+
Metadata storage metadata = _value[key32].metadata;
|
150
|
+
StateId stateOld = metadata.state;
|
151
|
+
require(stateOld.gtz(), "ERROR:KVS-041:NOT_EXISTING");
|
152
|
+
|
153
|
+
// update metadata (and state)
|
154
|
+
address updatedBy = msg.sender;
|
155
|
+
Blocknumber lastUpdatedIn = metadata.updatedIn;
|
156
|
+
metadata.state = state;
|
157
|
+
metadata.updatedBy = updatedBy;
|
158
|
+
metadata.updatedIn = blockBlocknumber();
|
159
|
+
|
160
|
+
// create log entry
|
161
|
+
// solhint-disable-next-line avoid-tx-origin
|
162
|
+
emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), state, stateOld, updatedBy, tx.origin, lastUpdatedIn);
|
163
|
+
}
|
164
|
+
|
165
|
+
function exists(Key32 key32) public view returns (bool) {
|
166
|
+
return _value[key32].metadata.state.gtz();
|
167
|
+
}
|
168
|
+
|
169
|
+
function get(Key32 key32) public view returns (Value memory value) {
|
170
|
+
return _value[key32];
|
171
|
+
}
|
172
|
+
|
173
|
+
function getMetadata(Key32 key32) public view returns (Metadata memory metadata) {
|
174
|
+
return _value[key32].metadata;
|
175
|
+
}
|
176
|
+
|
177
|
+
function getData(Key32 key32) public view returns (bytes memory data) {
|
178
|
+
return _value[key32].data;
|
179
|
+
}
|
180
|
+
|
181
|
+
function getState(Key32 key32) public view returns (StateId state) {
|
182
|
+
return _value[key32].metadata.state;
|
183
|
+
}
|
184
|
+
|
185
|
+
function toKey32(ObjectType objectType, KeyId id) external pure override returns(Key32) {
|
186
|
+
return Key32Lib.toKey32(objectType, id);
|
187
|
+
}
|
188
|
+
}
|