From f11d024dc15951260f43bc4a7a498970c6aef0c0 Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Tue, 31 May 2022 08:47:29 +0000 Subject: [PATCH] CORE-386 Add methodt to evm --- --- a/pallets/common/src/erc.rs +++ b/pallets/common/src/erc.rs @@ -21,8 +21,9 @@ }; pub use pallet_evm::{PrecompileOutput, PrecompileResult, PrecompileHandle, account::CrossAccountId}; use pallet_evm_coder_substrate::dispatch_to_evm; +use sp_core::{H160, U256, H256}; use sp_std::vec::Vec; -use up_data_structs::{Property, SponsoringRateLimit}; +use up_data_structs::{Property, SponsoringRateLimit, NestingRule, OwnerRestrictedSet}; use alloc::format; use crate::{Pallet, CollectionHandle, Config, CollectionProperties}; @@ -46,7 +47,10 @@ } #[solidity_interface(name = "Collection")] -impl CollectionHandle { +impl CollectionHandle +// where +// T::AccountId: From +{ fn set_collection_property(&mut self, caller: caller, key: string, value: bytes) -> Result<()> { let caller = T::CrossAccountId::from_eth(caller); let key = >::from(key) @@ -165,6 +169,89 @@ fn contract_address(&self, _caller: caller) -> Result
{ Ok(crate::eth::collection_id_to_address(self.id)) } + + // fn add_admin_substrate(&self, caller: caller, new_admin: uint256) -> Result { + // let mut new_admin_h256 = H256::default(); + // new_admin.to_little_endian(&mut new_admin_h256.0); + // let account_id = T::AccountId::from(new_admin_h256); + // let caller = T::CrossAccountId::from_eth(caller); + // let new_admin = T::CrossAccountId::from_sub(account_id); + // >::toggle_admin(&self, &caller, &new_admin, true) + // .map_err(dispatch_to_evm::)?; + // Ok(()) + // } + + // fn remove_admin_substrate(&self, caller: caller, new_admin: uint256) -> Result { + // let mut new_admin_h256 = H256::default(); + // new_admin.to_little_endian(&mut new_admin_h256.0); + // let account_id = T::AccountId::from(new_admin_h256); + // let caller = T::CrossAccountId::from_eth(caller); + // let new_admin = T::CrossAccountId::from_sub(account_id); + // >::toggle_admin(&self, &caller, &new_admin, false) + // .map_err(dispatch_to_evm::)?; + // Ok(()) + // } + + fn add_admin(&self, caller: caller, new_admin: address) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + self.check_is_owner_or_admin(&caller) + .map_err(dispatch_to_evm::)?; + let new_admin = T::CrossAccountId::from_eth(new_admin); + >::toggle_admin(&self, &caller, &new_admin, true) + .map_err(dispatch_to_evm::)?; + Ok(()) + } + + fn remove_admin(&self, caller: caller, admin: address) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + self.check_is_owner_or_admin(&caller) + .map_err(dispatch_to_evm::)?; + let admin = T::CrossAccountId::from_eth(admin); + >::toggle_admin(&self, &caller, &admin, false) + .map_err(dispatch_to_evm::)?; + Ok(()) + } + + #[solidity(rename_selector = "setNesting")] + fn set_nesting_bool(&mut self, caller: caller, enable: bool) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + self.check_is_owner_or_admin(&caller) + .map_err(dispatch_to_evm::)?; + self.collection.permissions.nesting = Some(match enable { + false => NestingRule::Disabled, + true => NestingRule::Owner, + }); + save(self); + Ok(()) + } + + #[solidity(rename_selector = "setNesting")] + fn set_nesting(&mut self, caller: caller, enable: bool, collections: Vec
) -> Result { + if collections.is_empty() { + return Err("No addresses provided".into()); + } + if collections.len() >= OwnerRestrictedSet::bound() { + return Err(Error::Revert(format!("Out of bound: {} >= {}", collections.len(), OwnerRestrictedSet::bound()))); + } + let caller = T::CrossAccountId::from_eth(caller); + self.check_is_owner_or_admin(&caller) + .map_err(dispatch_to_evm::)?; + self.collection.permissions.nesting = Some(match enable { + false => NestingRule::Disabled, + true => { + let mut bv = OwnerRestrictedSet::new(); + for i in collections { + bv.try_insert( + crate::eth::map_eth_to_id(&i) + .ok_or(Error::Revert("Can't convert address into collection id".into()))? + ).map_err(|e| Error::Revert(format!("{:?}", e)))?; + } + NestingRule::OwnerRestricted (bv) + } + }); + save(self); + Ok(()) + } } fn check_is_owner(caller: caller, collection: &CollectionHandle) -> Result<()> { --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -126,9 +126,11 @@ pub fn new(id: CollectionId) -> Option { Self::new_with_gas_limit(id, u64::MAX) } + pub fn try_get(id: CollectionId) -> Result { Ok(Self::new(id).ok_or(>::CollectionNotFound)?) } + pub fn consume_store_reads(&self, reads: u64) -> evm_coder::execution::Result<()> { self.recorder .consume_gas(T::GasWeightMapping::weight_to_gas( @@ -137,6 +139,7 @@ .saturating_mul(reads), )) } + pub fn consume_store_writes(&self, writes: u64) -> evm_coder::execution::Result<()> { self.recorder .consume_gas(T::GasWeightMapping::weight_to_gas( @@ -145,6 +148,7 @@ .saturating_mul(writes), )) } + pub fn save(self) -> DispatchResult { >::insert(self.id, self.collection); Ok(()) @@ -163,6 +167,7 @@ true } } + impl Deref for CollectionHandle { type Target = Collection; --- a/pallets/nonfungible/src/stubs/UniqueNFT.sol +++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol @@ -51,6 +51,105 @@ event MintingFinished(); } +// Selector: 3a54513b +contract Collection is Dummy, ERC165 { + // Selector: setCollectionProperty(string,bytes) 2f073f66 + function setCollectionProperty(string memory key, bytes memory value) + public + { + require(false, stub_error); + key; + value; + dummy = 0; + } + + // Selector: deleteCollectionProperty(string) 7b7debce + function deleteCollectionProperty(string memory key) public { + require(false, stub_error); + key; + dummy = 0; + } + + // Throws error if key not found + // + // Selector: collectionProperty(string) cf24fd6d + function collectionProperty(string memory key) + public + view + returns (bytes memory) + { + require(false, stub_error); + key; + dummy; + return hex""; + } + + // Selector: ethSetSponsor(address) 8f9af356 + function ethSetSponsor(address sponsor) public { + require(false, stub_error); + sponsor; + dummy = 0; + } + + // Selector: ethConfirmSponsorship() a8580d1a + function ethConfirmSponsorship() public { + require(false, stub_error); + dummy = 0; + } + + // Selector: setLimit(string,uint32) 68db30ca + function setLimit(string memory limit, uint32 value) public { + require(false, stub_error); + limit; + value; + dummy = 0; + } + + // Selector: setLimit(string,bool) ea67e4c2 + function setLimit(string memory limit, bool value) public { + require(false, stub_error); + limit; + value; + dummy = 0; + } + + // Selector: contractAddress() f6b4dfb4 + function contractAddress() public view returns (address) { + require(false, stub_error); + dummy; + return 0x0000000000000000000000000000000000000000; + } + + // Selector: addAdmin(address) 70480275 + function addAdmin(address newAdmin) public view { + require(false, stub_error); + newAdmin; + dummy; + } + + // Selector: removeAdmin(address) 1785f53c + function removeAdmin(address admin) public view { + require(false, stub_error); + admin; + dummy; + } + + // Selector: setNesting(bool) e8fc50dd + function setNesting(bool enable) public { + require(false, stub_error); + enable; + dummy = 0; + } + + // Selector: setNesting(bool,address[]) 7df12a9a + function setNesting(bool enable, address[] memory collections) public { + require(false, stub_error); + enable; + collections; + dummy = 0; + } +} + // Selector: 41369377 contract TokenProperties is Dummy, ERC165 { // Selector: setTokenPropertyPermission(string,bool,bool,bool) 222d97fa @@ -327,76 +426,6 @@ require(false, stub_error); dummy; return 0; - } -} - -// Selector: c894dc35 -contract Collection is Dummy, ERC165 { - // Selector: setCollectionProperty(string,bytes) 2f073f66 - function setCollectionProperty(string memory key, bytes memory value) - public - { - require(false, stub_error); - key; - value; - dummy = 0; - } - - // Selector: deleteCollectionProperty(string) 7b7debce - function deleteCollectionProperty(string memory key) public { - require(false, stub_error); - key; - dummy = 0; - } - - // Throws error if key not found - // - // Selector: collectionProperty(string) cf24fd6d - function collectionProperty(string memory key) - public - view - returns (bytes memory) - { - require(false, stub_error); - key; - dummy; - return hex""; - } - - // Selector: ethSetSponsor(address) 8f9af356 - function ethSetSponsor(address sponsor) public { - require(false, stub_error); - sponsor; - dummy = 0; - } - - // Selector: ethConfirmSponsorship() a8580d1a - function ethConfirmSponsorship() public { - require(false, stub_error); - dummy = 0; - } - - // Selector: setLimit(string,uint32) 68db30ca - function setLimit(string memory limit, uint32 value) public { - require(false, stub_error); - limit; - value; - dummy = 0; - } - - // Selector: setLimit(string,bool) ea67e4c2 - function setLimit(string memory limit, bool value) public { - require(false, stub_error); - limit; - value; - dummy = 0; - } - - // Selector: contractAddress() f6b4dfb4 - function contractAddress() public view returns (address) { - require(false, stub_error); - dummy; - return 0x0000000000000000000000000000000000000000; } } --- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -454,6 +454,8 @@ } } +pub type OwnerRestrictedSet = BoundedBTreeSet>; + #[derive(Encode, Decode, Clone, PartialEq, TypeInfo, MaxEncodedLen, Derivative)] #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))] #[derivative(Debug)] @@ -466,7 +468,7 @@ OwnerRestricted( #[cfg_attr(feature = "serde1", serde(with = "bounded::set_serde"))] #[derivative(Debug(format_with = "bounded::set_debug"))] - BoundedBTreeSet>, + OwnerRestrictedSet, ), /// Used for tests Permissive, --- a/tests/src/eth/api/UniqueNFT.sol +++ b/tests/src/eth/api/UniqueNFT.sol @@ -42,6 +42,51 @@ event MintingFinished(); } +// Selector: 3a54513b +interface Collection is Dummy, ERC165 { + // Selector: setCollectionProperty(string,bytes) 2f073f66 + function setCollectionProperty(string memory key, bytes memory value) + external; + + // Selector: deleteCollectionProperty(string) 7b7debce + function deleteCollectionProperty(string memory key) external; + + // Throws error if key not found + // + // Selector: collectionProperty(string) cf24fd6d + function collectionProperty(string memory key) + external + view + returns (bytes memory); + + // Selector: ethSetSponsor(address) 8f9af356 + function ethSetSponsor(address sponsor) external; + + // Selector: ethConfirmSponsorship() a8580d1a + function ethConfirmSponsorship() external; + + // Selector: setLimit(string,uint32) 68db30ca + function setLimit(string memory limit, uint32 value) external; + + // Selector: setLimit(string,bool) ea67e4c2 + function setLimit(string memory limit, bool value) external; + + // Selector: contractAddress() f6b4dfb4 + function contractAddress() external view returns (address); + + // Selector: addAdmin(address) 70480275 + function addAdmin(address newAdmin) external view; + + // Selector: removeAdmin(address) 1785f53c + function removeAdmin(address admin) external view; + + // Selector: setNesting(bool) e8fc50dd + function setNesting(bool enable) external; + + // Selector: setNesting(bool,address[]) 7df12a9a + function setNesting(bool enable, address[] memory collections) external; +} + // Selector: 41369377 interface TokenProperties is Dummy, ERC165 { // Selector: setTokenPropertyPermission(string,bool,bool,bool) 222d97fa @@ -189,39 +234,6 @@ // Selector: totalSupply() 18160ddd function totalSupply() external view returns (uint256); -} - -// Selector: c894dc35 -interface Collection is Dummy, ERC165 { - // Selector: setCollectionProperty(string,bytes) 2f073f66 - function setCollectionProperty(string memory key, bytes memory value) - external; - - // Selector: deleteCollectionProperty(string) 7b7debce - function deleteCollectionProperty(string memory key) external; - - // Throws error if key not found - // - // Selector: collectionProperty(string) cf24fd6d - function collectionProperty(string memory key) - external - view - returns (bytes memory); - - // Selector: ethSetSponsor(address) 8f9af356 - function ethSetSponsor(address sponsor) external; - - // Selector: ethConfirmSponsorship() a8580d1a - function ethConfirmSponsorship() external; - - // Selector: setLimit(string,uint32) 68db30ca - function setLimit(string memory limit, uint32 value) external; - - // Selector: setLimit(string,bool) ea67e4c2 - function setLimit(string memory limit, bool value) external; - - // Selector: contractAddress() f6b4dfb4 - function contractAddress() external view returns (address); } // Selector: d74d154f --- a/tests/src/eth/createCollection.test.ts +++ b/tests/src/eth/createCollection.test.ts @@ -30,13 +30,13 @@ describe('Create collection from EVM', () => { itWeb3('Create collection', async ({api, web3}) => { const owner = await createEthAccountWithBalance(api, web3); - const helper = evmCollectionHelpers(web3, owner); + const collectionHelper = evmCollectionHelpers(web3, owner); const collectionName = 'CollectionEVM'; const description = 'Some description'; const tokenPrefix = 'token prefix'; const collectionCountBefore = await getCreatedCollectionCount(api); - const result = await helper.methods + const result = await collectionHelper.methods .createNonfungibleCollection(collectionName, description, tokenPrefix) .send(); const collectionCountAfter = await getCreatedCollectionCount(api); --- a/tests/src/eth/nonFungibleAbi.json +++ b/tests/src/eth/nonFungibleAbi.json @@ -82,6 +82,15 @@ }, { "inputs": [ + { "internalType": "address", "name": "newAdmin", "type": "address" } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { "internalType": "address", "name": "approved", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], @@ -282,6 +291,15 @@ }, { "inputs": [ + { "internalType": "address", "name": "admin", "type": "address" } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } @@ -345,6 +363,27 @@ }, { "inputs": [ + { "internalType": "bool", "name": "enable", "type": "bool" }, + { + "internalType": "address[]", + "name": "collections", + "type": "address[]" + } + ], + "name": "setNesting", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }], + "name": "setNesting", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "key", "type": "string" }, { "internalType": "bytes", "name": "value", "type": "bytes" } --- a/tests/src/eth/proxy/nonFungibleProxy.test.ts +++ b/tests/src/eth/proxy/nonFungibleProxy.test.ts @@ -15,7 +15,7 @@ // along with Unique Network. If not, see . import {createCollectionExpectSuccess, createItemExpectSuccess} from '../../util/helpers'; -import {collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents} from '../util/helpers'; +import {collectionIdToAddress, createEthAccount, createEthAccountWithBalance, evmCollection, evmCollectionHelpers, GAS_ARGS, getCollectionAddressFromResult, itWeb3, normalizeEvents} from '../util/helpers'; import nonFungibleAbi from '../nonFungibleAbi.json'; import {expect} from 'chai'; import {submitTransactionAsync} from '../../substrate/substrate-api'; @@ -87,20 +87,19 @@ }); describe('NFT (Via EVM proxy): Plain calls', () => { - //TODO: CORE-302 add eth methods - itWeb3.skip('Can perform mint()', async ({web3, api, privateKeyWrapper}) => { - const collection = await createCollectionExpectSuccess({ - mode: {type: 'NFT'}, - }); - const alice = privateKeyWrapper('//Alice'); + itWeb3('Can perform mint()', async ({web3, api}) => { + const owner = await createEthAccountWithBalance(api, web3); + const collectionHelper = evmCollectionHelpers(web3, owner); + const result = await collectionHelper.methods + .createNonfungibleCollection('A', 'A', 'A') + .send(); + const {collectionIdAddress} = await getCollectionAddressFromResult(api, result); const caller = await createEthAccountWithBalance(api, web3); const receiver = createEthAccount(web3); - - const address = collectionIdToAddress(collection); - const contract = await proxyWrap(api, web3, new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS})); - - const changeAdminTx = api.tx.unique.addCollectionAdmin(collection, {Ethereum: contract.options.address}); - await submitTransactionAsync(alice, changeAdminTx); + const collectionEvmOwned = evmCollection(web3, owner, collectionIdAddress); + const collectionEvm = evmCollection(web3, caller, collectionIdAddress); + const contract = await proxyWrap(api, web3, collectionEvm); + await collectionEvmOwned.methods.addAdmin(contract.options.address).send(); { const nextTokenId = await contract.methods.nextTokenId().call(); @@ -111,10 +110,11 @@ 'Test URI', ).send({from: caller}); const events = normalizeEvents(result.events); + events[0].address = events[0].address.toLocaleLowerCase(); expect(events).to.be.deep.equal([ { - address, + address: collectionIdAddress.toLocaleLowerCase(), event: 'Transfer', args: { from: '0x0000000000000000000000000000000000000000', --- a/tests/src/interfaces/augment-api-rpc.ts +++ b/tests/src/interfaces/augment-api-rpc.ts @@ -18,7 +18,7 @@ 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'; import type { EncodedFinalityProofs, JustificationNotification, ReportedRoundStates } from '@polkadot/types/interfaces/grandpa'; -import type { MmrLeafBatchProof, MmrLeafProof } from '@polkadot/types/interfaces/mmr'; +import type { MmrLeafProof } from '@polkadot/types/interfaces/mmr'; 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'; @@ -354,14 +354,10 @@ subscribeJustifications: AugmentedRpc<() => Observable>; }; mmr: { - /** - * Generate MMR proof for the given leaf indices. - **/ - generateBatchProof: AugmentedRpc<(leafIndices: Vec | (u64 | AnyNumber | Uint8Array)[], at?: BlockHash | string | Uint8Array) => Observable>; /** * Generate MMR proof for given leaf index. **/ - generateProof: AugmentedRpc<(leafIndex: u64 | AnyNumber | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; + generateProof: AugmentedRpc<(leafIndex: u64 | AnyNumber | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; }; net: { /** --- a/tests/src/interfaces/augment-types.ts +++ b/tests/src/interfaces/augment-types.ts @@ -3,7 +3,7 @@ import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportPalletId, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletXcmCall, PalletXcmError, PalletXcmEvent, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingRule, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsRmrkAccountIdOrCollectionNftTuple, UpDataStructsRmrkBaseInfo, UpDataStructsRmrkBasicResource, UpDataStructsRmrkCollectionInfo, UpDataStructsRmrkComposableResource, UpDataStructsRmrkEquippableList, UpDataStructsRmrkFixedPart, UpDataStructsRmrkNftChild, UpDataStructsRmrkNftInfo, UpDataStructsRmrkPartType, UpDataStructsRmrkPropertyInfo, UpDataStructsRmrkResourceInfo, UpDataStructsRmrkResourceTypes, UpDataStructsRmrkRoyaltyInfo, UpDataStructsRmrkSlotPart, UpDataStructsRmrkSlotResource, UpDataStructsRmrkTheme, UpDataStructsRmrkThemeProperty, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default'; import type { Data, StorageKey } from '@polkadot/types'; -import type { BitVec, Bool, Bytes, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; +import type { BitVec, Bool, Bytes, I128, I16, I256, I32, I64, I8, Json, Null, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets'; import type { BlockAttestations, IncludedBlocks, MoreAttestations } from '@polkadot/types/interfaces/attestations'; import type { RawAuraPreDigest } from '@polkadot/types/interfaces/aura'; @@ -36,7 +36,7 @@ import type { AuthIndex, AuthoritySignature, Heartbeat, HeartbeatTo244, OpaqueMultiaddr, OpaqueNetworkState, OpaquePeerId } from '@polkadot/types/interfaces/imOnline'; import type { CallIndex, LotteryConfig } from '@polkadot/types/interfaces/lottery'; import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata'; -import type { MmrLeafBatchProof, MmrLeafProof } from '@polkadot/types/interfaces/mmr'; +import type { MmrLeafProof } from '@polkadot/types/interfaces/mmr'; import type { StorageKind } from '@polkadot/types/interfaces/offchain'; import type { DeferredOffenceOf, Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences'; import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, Scheduling, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains'; @@ -661,7 +661,6 @@ MetadataV14: MetadataV14; MetadataV9: MetadataV9; MigrationStatusResult: MigrationStatusResult; - MmrLeafBatchProof: MmrLeafBatchProof; MmrLeafProof: MmrLeafProof; MmrRootHash: MmrRootHash; ModuleConstantMetadataV10: ModuleConstantMetadataV10; @@ -728,7 +727,6 @@ OpenTipTip: OpenTipTip; OpenTipTo225: OpenTipTo225; OperatingMode: OperatingMode; - OptionBool: OptionBool; Origin: Origin; OriginCaller: OriginCaller; OriginKindV0: OriginKindV0; -- gitstuff