--- a/Cargo.lock +++ b/Cargo.lock @@ -989,9 +989,9 @@ [[package]] name = "camino" -version = "1.0.9" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "869119e97797867fd90f5e22af7d0bd274bd4635ebb9eb68c04f3f513ae6c412" +checksum = "07fd178c5af4d59e83498ef15cf3f154e1a6f9d091270cb86283c65ef44e9ef0" dependencies = [ "serde", ] @@ -6099,6 +6099,29 @@ ] [[package]] +name = "pallet-evm-collection" +version = "0.1.0" +dependencies = [ + "ethereum", + "evm-coder", + "fp-evm-mapping", + "frame-support", + "frame-system", + "log", + "pallet-common", + "pallet-evm", + "pallet-evm-coder-substrate", + "pallet-nonfungible", + "parity-scale-codec", + "scale-info", + "serde_json", + "sp-core", + "sp-runtime", + "sp-std", + "up-data-structs", +] + +[[package]] name = "pallet-evm-contract-helpers" version = "0.1.0" dependencies = [ --- a/pallets/evm-collection/src/stubs/Collection.sol +++ b/pallets/evm-collection/src/stubs/Collection.sol @@ -56,13 +56,13 @@ } // Selector: setOffchainSchema(address,string) 2c9d9d70 - function setOffchainSchema(address collectionAddress, string memory shema) + function setOffchainSchema(address collectionAddress, string memory schema) public view { require(false, stub_error); collectionAddress; - shema; + schema; dummy; } --- a/pallets/evm-contract-helpers/Cargo.toml +++ b/pallets/evm-contract-helpers/Cargo.toml @@ -28,7 +28,7 @@ pallet-common = { default-features = false, path = '../../pallets/common' } pallet-evm-coder-substrate = { default-features = false, path = '../../pallets/evm-coder-substrate' } pallet-nonfungible = { default-features = false, path = '../../pallets/nonfungible' } -up-data-structs = { default-features = false, path = '../../primitives/data-structs' } +up-data-structs = { default-features = false, path = '../../primitives/data-structs', features = ['serde1'] } [dependencies.codec] default-features = false --- a/primitives/rpc/src/lib.rs +++ b/primitives/rpc/src/lib.rs @@ -23,6 +23,7 @@ use sp_std::vec::Vec; use codec::Decode; use sp_runtime::DispatchError; +use sp_core::H160; type Result = core::result::Result; @@ -71,6 +72,7 @@ token: TokenId, ) -> Result; + fn eth_contract_code(account: H160) -> Option>; fn adminlist(collection: CollectionId) -> Result>; fn allowlist(collection: CollectionId) -> Result>; fn allowed(collection: CollectionId, user: CrossAccountId) -> Result; --- a/runtime/opal/src/lib.rs +++ b/runtime/opal/src/lib.rs @@ -79,7 +79,7 @@ }; use smallvec::smallvec; use codec::{Encode, Decode}; -use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping}; +use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, OnMethodCall}; use fp_rpc::TransactionStatus; use sp_runtime::{ traits::{BlockNumberProvider, Dispatchable, PostDispatchInfoOf, Saturating}, --- a/runtime/unique/src/lib.rs +++ b/runtime/unique/src/lib.rs @@ -84,7 +84,7 @@ }; use smallvec::smallvec; use codec::{Encode, Decode}; -use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping}; +use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, OnMethodCall}; use fp_rpc::TransactionStatus; use sp_runtime::{ traits::{BlockNumberProvider, Dispatchable, PostDispatchInfoOf, Saturating}, --- a/tests/src/eth/api/Collection.sol +++ b/tests/src/eth/api/Collection.sol @@ -30,7 +30,7 @@ function confirmSponsorship(address collectionAddress) external view; // Selector: setOffchainSchema(address,string) 2c9d9d70 - function setOffchainSchema(address collectionAddress, string memory shema) + function setOffchainSchema(address collectionAddress, string memory schema) external view; --- a/tests/src/eth/collectionAbi.json +++ b/tests/src/eth/collectionAbi.json @@ -58,7 +58,7 @@ "name": "collectionAddress", "type": "address" }, - { "internalType": "string", "name": "shema", "type": "string" } + { "internalType": "string", "name": "schema", "type": "string" } ], "name": "setOffchainSchema", "outputs": [], --- a/tests/src/interfaces/augment-api-errors.ts +++ b/tests/src/interfaces/augment-api-errors.ts @@ -249,6 +249,16 @@ **/ [key: string]: AugmentedError; }; + evmCollection: { + /** + * This method is only executable by owner + **/ + NoPermission: AugmentedError; + /** + * Generic error + **/ + [key: string]: AugmentedError; + }; evmContractHelpers: { /** * This method is only executable by owner --- a/tests/src/interfaces/augment-api-rpc.ts +++ b/tests/src/interfaces/augment-api-rpc.ts @@ -13,7 +13,6 @@ import type { PrefixedStorageKey } from '@polkadot/types/interfaces/childstate'; import type { AuthorityId } from '@polkadot/types/interfaces/consensus'; import type { CodeUploadRequest, CodeUploadResult, ContractCallRequest, ContractExecResult, ContractInstantiateResult, InstantiateRequest } from '@polkadot/types/interfaces/contracts'; -import type { BlockStats } from '@polkadot/types/interfaces/dev'; import type { CreatedBlock } from '@polkadot/types/interfaces/engine'; import type { EthAccount, EthCallRequest, EthFilter, EthFilterChanges, EthLog, EthReceipt, EthRichBlock, EthSubKind, EthSubParams, EthSyncStatus, EthTransaction, EthTransactionRequest, EthWork } from '@polkadot/types/interfaces/eth'; import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; @@ -22,8 +21,8 @@ import type { StorageKind } from '@polkadot/types/interfaces/offchain'; import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment'; import type { RpcMethods } from '@polkadot/types/interfaces/rpc'; -import type { AccountId, AccountId32, BlockNumber, H160, H256, H64, Hash, Header, Index, Justification, KeyValue, SignedBlock, StorageData } from '@polkadot/types/interfaces/runtime'; -import type { MigrationStatusResult, ReadProof, RuntimeVersion, TraceBlockResponse } from '@polkadot/types/interfaces/state'; +import type { AccountId, BlockNumber, H160, H256, H64, Hash, Header, Index, Justification, KeyValue, SignedBlock, StorageData } from '@polkadot/types/interfaces/runtime'; +import type { ReadProof, RuntimeVersion, TraceBlockResponse } from '@polkadot/types/interfaces/state'; import type { ApplyExtrinsicResult, ChainProperties, ChainType, Health, NetworkState, NodeRole, PeerInfo, SyncState } from '@polkadot/types/interfaces/system'; import type { IExtrinsic, Observable } from '@polkadot/types/types'; @@ -156,12 +155,6 @@ * Upload new code without instantiating a contract from it **/ uploadCode: AugmentedRpc<(uploadRequest: CodeUploadRequest | { origin?: any; code?: any; storageDepositLimit?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; - }; - dev: { - /** - * Reexecute the specified `block_hash` and gather statistics while doing so - **/ - getBlockStats: AugmentedRpc<(at: Hash | string | Uint8Array) => Observable>>; }; engine: { /** @@ -338,20 +331,6 @@ * Uninstalls filter. **/ uninstallFilter: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array) => Observable>; - }; - grandpa: { - /** - * Prove finality for the given block number, returning the Justification for the last block in the set. - **/ - proveFinality: AugmentedRpc<(blockNumber: BlockNumber | AnyNumber | Uint8Array) => Observable>>; - /** - * Returns the state of the current best round state as well as the ongoing background rounds - **/ - roundState: AugmentedRpc<() => Observable>; - /** - * Subscribes to grandpa justifications - **/ - subscribeJustifications: AugmentedRpc<() => Observable>; }; mmr: { /** @@ -452,92 +431,6 @@ * Retrieves the list of RPC methods that are exposed by the node **/ methods: AugmentedRpc<() => Observable>; - }; - state: { - /** - * Perform a call to a builtin on the chain - **/ - call: AugmentedRpc<(method: Text | string, data: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the keys with prefix of a specific child storage - **/ - getChildKeys: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>>; - /** - * Returns proof of storage for child key entries at a specific block state. - **/ - getChildReadProof: AugmentedRpc<(childStorageKey: PrefixedStorageKey | string | Uint8Array, keys: Vec | (StorageKey | string | Uint8Array | any)[], at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the child storage for a key - **/ - getChildStorage: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the child storage hash - **/ - getChildStorageHash: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the child storage size - **/ - getChildStorageSize: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the keys with a certain prefix - **/ - getKeys: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>>; - /** - * Returns the keys with prefix with pagination support. - **/ - getKeysPaged: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, count: u32 | AnyNumber | Uint8Array, startKey?: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>>; - /** - * Returns the runtime metadata - **/ - getMetadata: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Returns the keys with prefix, leave empty to get all the keys (deprecated: Use getKeysPaged) - **/ - getPairs: AugmentedRpc<(prefix: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>>; - /** - * Returns proof of storage entries at a specific block state - **/ - getReadProof: AugmentedRpc<(keys: Vec | (StorageKey | string | Uint8Array | any)[], at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Get the runtime version - **/ - getRuntimeVersion: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the storage for a key - **/ - getStorage: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, block?: Hash | Uint8Array | string) => Observable>; - /** - * Retrieves the storage hash - **/ - getStorageHash: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the storage size - **/ - getStorageSize: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Query historical storage entries (by key) starting from a start block - **/ - queryStorage: AugmentedRpc<(keys: Vec | (StorageKey | string | Uint8Array | any)[], fromBlock?: Hash | Uint8Array | string, toBlock?: Hash | Uint8Array | string) => Observable<[Hash, T][]>>; - /** - * Query storage entries (by key) starting at block hash given as the second parameter - **/ - queryStorageAt: AugmentedRpc<(keys: Vec | (StorageKey | string | Uint8Array | any)[], at?: Hash | Uint8Array | string) => Observable>; - /** - * Retrieves the runtime version via subscription - **/ - subscribeRuntimeVersion: AugmentedRpc<() => Observable>; - /** - * Subscribes to storage changes for the provided keys - **/ - subscribeStorage: AugmentedRpc<(keys?: Vec | (StorageKey | string | Uint8Array | any)[]) => Observable>; - /** - * Provides a way to trace the re-execution of a single block - **/ - traceBlock: AugmentedRpc<(block: Hash | string | Uint8Array, targets: Option | null | object | string | Uint8Array, storageKeys: Option | null | object | string | Uint8Array, methods: Option | null | object | string | Uint8Array) => Observable>; - /** - * Check current migration state - **/ - trieMigrationStatus: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; }; syncstate: { /** --- a/tests/src/interfaces/augment-types.ts +++ b/tests/src/interfaces/augment-types.ts @@ -23,7 +23,6 @@ import type { FundIndex, FundInfo, LastContribution, TrieIndex } from '@polkadot/types/interfaces/crowdloan'; import type { ConfigData, MessageId, OverweightIndex, PageCounter, PageIndexData } from '@polkadot/types/interfaces/cumulus'; import type { AccountVote, AccountVoteSplit, AccountVoteStandard, Conviction, Delegations, PreimageStatus, PreimageStatusAvailable, PriorLock, PropIndex, Proposal, ProxyState, ReferendumIndex, ReferendumInfo, ReferendumInfoFinished, ReferendumInfoTo239, ReferendumStatus, Tally, Voting, VotingDelegating, VotingDirect, VotingDirectVote } from '@polkadot/types/interfaces/democracy'; -import type { BlockStats } from '@polkadot/types/interfaces/dev'; import type { ApprovalFlag, DefunctVoter, Renouncing, SetIndex, Vote, VoteIndex, VoteThreshold, VoterInfo } from '@polkadot/types/interfaces/elections'; import type { CreatedBlock, ImportedAux } from '@polkadot/types/interfaces/engine'; import type { BlockV0, BlockV1, BlockV2, EIP1559Transaction, EIP2930Transaction, EthAccessList, EthAccessListItem, EthAccount, EthAddress, EthBlock, EthBloom, EthCallRequest, EthFilter, EthFilterAddress, EthFilterChanges, EthFilterTopic, EthFilterTopicEntry, EthFilterTopicInner, EthHeader, EthLog, EthReceipt, EthRichBlock, EthRichHeader, EthStorageProof, EthSubKind, EthSubParams, EthSubResult, EthSyncInfo, EthSyncStatus, EthTransaction, EthTransactionAction, EthTransactionCondition, EthTransactionRequest, EthTransactionSignature, EthTransactionStatus, EthWork, EthereumAccountId, EthereumAddress, EthereumLookupSource, EthereumSignature, LegacyTransaction, TransactionV0, TransactionV1, TransactionV2 } from '@polkadot/types/interfaces/eth'; @@ -52,9 +51,9 @@ import type { BeefyKey, FullIdentification, IdentificationTuple, Keys, MembershipProof, SessionIndex, SessionKeys1, SessionKeys10, SessionKeys10B, SessionKeys2, SessionKeys3, SessionKeys4, SessionKeys5, SessionKeys6, SessionKeys6B, SessionKeys7, SessionKeys7B, SessionKeys8, SessionKeys8B, SessionKeys9, SessionKeys9B, ValidatorCount } from '@polkadot/types/interfaces/session'; import type { Bid, BidKind, SocietyJudgement, SocietyVote, StrikeCount, VouchingStatus } from '@polkadot/types/interfaces/society'; import type { ActiveEraInfo, CompactAssignments, CompactAssignmentsTo257, CompactAssignmentsTo265, CompactAssignmentsWith16, CompactAssignmentsWith24, CompactScore, CompactScoreCompact, ElectionCompute, ElectionPhase, ElectionResult, ElectionScore, ElectionSize, ElectionStatus, EraIndex, EraPoints, EraRewardPoints, EraRewards, Exposure, ExtendedBalance, Forcing, IndividualExposure, KeyType, MomentOf, Nominations, NominatorIndex, NominatorIndexCompact, OffchainAccuracy, OffchainAccuracyCompact, PhragmenScore, Points, RawSolution, RawSolutionTo265, RawSolutionWith16, RawSolutionWith24, ReadySolution, RewardDestination, RewardPoint, RoundSnapshot, SeatHolder, SignedSubmission, SignedSubmissionOf, SignedSubmissionTo276, SlashJournalEntry, SlashingSpans, SlashingSpansTo204, SolutionOrSnapshotSize, SolutionSupport, SolutionSupports, SpanIndex, SpanRecord, StakingLedger, StakingLedgerTo223, StakingLedgerTo240, SubmissionIndicesOf, Supports, UnappliedSlash, UnappliedSlashOther, UnlockChunk, ValidatorIndex, ValidatorIndexCompact, ValidatorPrefs, ValidatorPrefsTo145, ValidatorPrefsTo196, ValidatorPrefsWithBlocked, ValidatorPrefsWithCommission, VoteWeight, Voter } from '@polkadot/types/interfaces/staking'; -import type { ApiId, BlockTrace, BlockTraceEvent, BlockTraceEventData, BlockTraceSpan, KeyValueOption, MigrationStatusResult, ReadProof, RuntimeVersion, RuntimeVersionApi, RuntimeVersionPartial, SpecVersion, StorageChangeSet, TraceBlockResponse, TraceError } from '@polkadot/types/interfaces/state'; +import type { ApiId, BlockTrace, BlockTraceEvent, BlockTraceEventData, BlockTraceSpan, KeyValueOption, ReadProof, RuntimeVersion, RuntimeVersionApi, RuntimeVersionPartial, SpecVersion, StorageChangeSet, TraceBlockResponse, TraceError } from '@polkadot/types/interfaces/state'; import type { WeightToFeeCoefficient } from '@polkadot/types/interfaces/support'; -import type { AccountInfo, AccountInfoWithDualRefCount, AccountInfoWithProviders, AccountInfoWithRefCount, AccountInfoWithRefCountU8, AccountInfoWithTripleRefCount, ApplyExtrinsicResult, ArithmeticError, BlockLength, BlockWeights, ChainProperties, ChainType, ConsumedWeight, DigestOf, DispatchClass, DispatchError, DispatchErrorModule, DispatchErrorModuleU8a, DispatchErrorTo198, DispatchInfo, DispatchInfoTo190, DispatchInfoTo244, DispatchOutcome, DispatchResult, DispatchResultOf, DispatchResultTo198, Event, EventId, EventIndex, EventRecord, Health, InvalidTransaction, Key, LastRuntimeUpgradeInfo, NetworkState, NetworkStatePeerset, NetworkStatePeersetInfo, NodeRole, NotConnectedPeer, Peer, PeerEndpoint, PeerEndpointAddr, PeerInfo, PeerPing, PerDispatchClassU32, PerDispatchClassWeight, PerDispatchClassWeightsPerClass, Phase, RawOrigin, RefCount, RefCountTo259, SyncState, SystemOrigin, TokenError, TransactionValidityError, UnknownTransaction, WeightPerClass } from '@polkadot/types/interfaces/system'; +import type { AccountInfo, AccountInfoWithDualRefCount, AccountInfoWithProviders, AccountInfoWithRefCount, AccountInfoWithRefCountU8, AccountInfoWithTripleRefCount, ApplyExtrinsicResult, ArithmeticError, BlockLength, BlockWeights, ChainProperties, ChainType, ConsumedWeight, DigestOf, DispatchClass, DispatchError, DispatchErrorModule, DispatchErrorTo198, DispatchInfo, DispatchInfoTo190, DispatchInfoTo244, DispatchOutcome, DispatchResult, DispatchResultOf, DispatchResultTo198, Event, EventId, EventIndex, EventRecord, Health, InvalidTransaction, Key, LastRuntimeUpgradeInfo, NetworkState, NetworkStatePeerset, NetworkStatePeersetInfo, NodeRole, NotConnectedPeer, Peer, PeerEndpoint, PeerEndpointAddr, PeerInfo, PeerPing, PerDispatchClassU32, PerDispatchClassWeight, PerDispatchClassWeightsPerClass, Phase, RawOrigin, RefCount, RefCountTo259, SyncState, SystemOrigin, TokenError, TransactionValidityError, UnknownTransaction, WeightPerClass } from '@polkadot/types/interfaces/system'; import type { Bounty, BountyIndex, BountyStatus, BountyStatusActive, BountyStatusCuratorProposed, BountyStatusPendingPayout, OpenTip, OpenTipFinderTo225, OpenTipTip, OpenTipTo225, TreasuryProposal } from '@polkadot/types/interfaces/treasury'; import type { Multiplier } from '@polkadot/types/interfaces/txpayment'; import type { ClassDetails, ClassId, ClassMetadata, DepositBalance, DepositBalanceOf, DestroyWitness, InstanceDetails, InstanceId, InstanceMetadata } from '@polkadot/types/interfaces/uniques'; @@ -154,7 +153,6 @@ BlockNumber: BlockNumber; BlockNumberFor: BlockNumberFor; BlockNumberOf: BlockNumberOf; - BlockStats: BlockStats; BlockTrace: BlockTrace; BlockTraceEvent: BlockTraceEvent; BlockTraceEventData: BlockTraceEventData; @@ -329,7 +327,6 @@ DispatchClass: DispatchClass; DispatchError: DispatchError; DispatchErrorModule: DispatchErrorModule; - DispatchErrorModuleU8a: DispatchErrorModuleU8a; DispatchErrorTo198: DispatchErrorTo198; DispatchFeePayment: DispatchFeePayment; DispatchInfo: DispatchInfo; @@ -660,7 +657,6 @@ MetadataV13: MetadataV13; MetadataV14: MetadataV14; MetadataV9: MetadataV9; - MigrationStatusResult: MigrationStatusResult; MmrLeafProof: MmrLeafProof; MmrRootHash: MmrRootHash; ModuleConstantMetadataV10: ModuleConstantMetadataV10; @@ -771,6 +767,7 @@ PalletEvmAccountBasicCrossAccountIdRepr: PalletEvmAccountBasicCrossAccountIdRepr; PalletEvmCall: PalletEvmCall; PalletEvmCoderSubstrateError: PalletEvmCoderSubstrateError; + PalletEvmCollectionError: PalletEvmCollectionError; PalletEvmContractHelpersError: PalletEvmContractHelpersError; PalletEvmContractHelpersSponsoringModeT: PalletEvmContractHelpersSponsoringModeT; PalletEvmError: PalletEvmError; --- a/tests/src/interfaces/lookup.ts +++ b/tests/src/interfaces/lookup.ts @@ -26,6 +26,10 @@ trieNodes: 'BTreeSet' }, /** + * Lookup11: BTreeSet + **/ + BTreeSet: 'Vec', + /** * Lookup13: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot **/ CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: { --- a/tests/src/interfaces/types-lookup.ts +++ b/tests/src/interfaces/types-lookup.ts @@ -26,6 +26,9 @@ readonly trieNodes: BTreeSet; } + /** @name BTreeSet (11) */ + export interface BTreeSet extends Vec {} + /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (13) */ export interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct { readonly dmqMqcHead: H256; --- a/tests/src/interfaces/unique/types.ts +++ b/tests/src/interfaces/unique/types.ts @@ -6,6 +6,9 @@ import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime'; import type { Event } from '@polkadot/types/interfaces/system'; +/** @name BTreeSet */ +export interface BTreeSet extends Vec {} + /** @name CumulusPalletDmpQueueCall */ export interface CumulusPalletDmpQueueCall extends Enum { readonly isServiceOverweight: boolean; @@ -1012,6 +1015,12 @@ readonly type: 'OutOfGas' | 'OutOfFund'; } +/** @name PalletEvmCollectionError */ +export interface PalletEvmCollectionError extends Enum { + readonly isNoPermission: boolean; + readonly type: 'NoPermission'; +} + /** @name PalletEvmContractHelpersError */ export interface PalletEvmContractHelpersError extends Enum { readonly isNoPermission: boolean;