difftreelog
feat add ApproveFrom eth mirror
in: master
26 files changed
pallets/common/src/lib.rsdiffbeforeafterboth--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -746,6 +746,8 @@
ApprovedValueTooLow,
/// Tried to approve more than owned
CantApproveMoreThanOwned,
+ /// Only spending from eth mirror could be approved
+ AddressIsNotEthMirror,
/// Can't transfer tokens to ethereum zero address
AddressIsZero,
@@ -1797,6 +1799,9 @@
/// The price of setting the permission of the operation from another user.
fn approve() -> Weight;
+ /// The price of setting the permission of the operation from another user for eth mirror.
+ fn approve_from() -> Weight;
+
/// Transfer price from another user.
fn transfer_from() -> Weight;
@@ -2008,6 +2013,22 @@
amount: u128,
) -> DispatchResultWithPostInfo;
+ /// Grant access to another account to transfer parts of the token owned by the calling user's eth mirror via [Self::transfer_from].
+ ///
+ /// * `sender` - The user who grants access to the token.
+ /// * `from` - Spender's eth mirror.
+ /// * `to` - The user to whom the rights are granted.
+ /// * `token` - The token to which access is granted.
+ /// * `amount` - The amount of pieces that another user can dispose of.
+ fn approve_from(
+ &self,
+ sender: T::CrossAccountId,
+ from: T::CrossAccountId,
+ to: T::CrossAccountId,
+ token: TokenId,
+ amount: u128,
+ ) -> DispatchResultWithPostInfo;
+
/// Send parts of a token owned by another user.
///
/// Before calling this method, you must grant rights to the calling user via [`Self::approve`].
pallets/evm-contract-helpers/src/stubs/ContractHelpers.rawdiffbeforeafterbothbinary blob — no preview
pallets/evm-contract-helpers/src/stubs/ContractHelpers.soldiffbeforeafterboth--- a/pallets/evm-contract-helpers/src/stubs/ContractHelpers.sol
+++ b/pallets/evm-contract-helpers/src/stubs/ContractHelpers.sol
@@ -283,8 +283,8 @@
/// Ethereum representation of Optional value with CrossAddress.
struct OptionCrossAddress {
- /// TODO: field description
+ /// Whether or not this CrossAdress is valid and has meaning.
bool status;
- /// TODO: field description
+ /// The underlying CrossAddress value. If the status is false, can be set to whatever.
CrossAddress value;
}
pallets/fungible/src/benchmarking.rsdiffbeforeafterboth--- a/pallets/fungible/src/benchmarking.rs
+++ b/pallets/fungible/src/benchmarking.rs
@@ -82,6 +82,16 @@
<Pallet<T>>::create_item(&collection, &owner, (sender.clone(), 200), &Unlimited)?;
}: {<Pallet<T>>::set_allowance(&collection, &sender, &spender, 100)?}
+ approve_from {
+ bench_init!{
+ owner: sub; collection: collection(owner);
+ owner: cross_from_sub; sender: cross_sub; spender: cross_sub;
+
+ };
+ let owner_eth = T::CrossAccountId::from_eth(*sender.as_eth());
+ <Pallet<T>>::create_item(&collection, &owner, (owner_eth.clone(), 200), &Unlimited)?;
+ }: {<Pallet<T>>::set_allowance_for(&collection, &sender, &owner_eth, &spender, 100)?}
+
transfer_from {
bench_init!{
owner: sub; collection: collection(owner);
pallets/fungible/src/common.rsdiffbeforeafterboth--- a/pallets/fungible/src/common.rs
+++ b/pallets/fungible/src/common.rs
@@ -87,6 +87,10 @@
<SelfWeightOf<T>>::approve()
}
+ fn approve_from() -> Weight {
+ <SelfWeightOf<T>>::approve_from()
+ }
+
fn transfer_from() -> Weight {
<SelfWeightOf<T>>::transfer_from()
}
@@ -254,6 +258,25 @@
)
}
+ fn approve_from(
+ &self,
+ sender: T::CrossAccountId,
+ from: T::CrossAccountId,
+ to: T::CrossAccountId,
+ token: TokenId,
+ amount: u128,
+ ) -> DispatchResultWithPostInfo {
+ ensure!(
+ token == TokenId::default(),
+ <Error<T>>::FungibleItemsHaveNoId
+ );
+
+ with_weight(
+ <Pallet<T>>::set_allowance_for(self, &sender, &from, &to, amount),
+ <CommonWeights<T>>::approve_from(),
+ )
+ }
+
fn transfer_from(
&self,
sender: T::CrossAccountId,
pallets/fungible/src/lib.rsdiffbeforeafterboth--- a/pallets/fungible/src/lib.rs
+++ b/pallets/fungible/src/lib.rs
@@ -613,6 +613,45 @@
Ok(())
}
+ /// Set allowance for the spender to `transfer` or `burn` owner's tokens from eth mirror.
+ ///
+ /// - `collection`: Collection that contains the token
+ /// - `sender`: Owner of tokens that sets the allowance.
+ /// - `from`: Owner's eth mirror.
+ /// - `to`: Recipient of the allowance rights.
+ /// - `amount`: Amount of tokens the spender is allowed to `transfer` or `burn`.
+ pub fn set_allowance_for(
+ collection: &FungibleHandle<T>,
+ sender: &T::CrossAccountId,
+ from: &T::CrossAccountId,
+ to: &T::CrossAccountId,
+ amount: u128,
+ ) -> DispatchResult {
+ if collection.permissions.access() == AccessMode::AllowList {
+ collection.check_allowlist(sender)?;
+ collection.check_allowlist(from)?;
+ collection.check_allowlist(to)?;
+ }
+
+ ensure!(
+ *sender.as_eth() == *from.as_eth(),
+ <CommonError<T>>::AddressIsNotEthMirror
+ );
+
+ if <Balance<T>>::get((collection.id, from)) < amount {
+ ensure!(
+ collection.limits.owner_can_transfer()
+ && (collection.is_owner_or_admin(sender) || collection.is_owner_or_admin(from)),
+ <CommonError<T>>::CantApproveMoreThanOwned
+ );
+ }
+
+ // =========
+
+ Self::set_allowance_unchecked(collection, from, to, amount);
+ Ok(())
+ }
+
/// Checks if a non-owner has (enough) allowance from the owner to perform operations on the tokens.
/// Returns the expected remaining allowance - it should be set manually if the transaction proceeds.
///
pallets/fungible/src/weights.rsdiffbeforeafterboth--- a/pallets/fungible/src/weights.rs
+++ b/pallets/fungible/src/weights.rs
@@ -39,6 +39,7 @@
fn burn_item() -> Weight;
fn transfer() -> Weight;
fn approve() -> Weight;
+ fn approve_from() -> Weight;
fn transfer_from() -> Weight;
fn burn_from() -> Weight;
}
@@ -84,6 +85,13 @@
.saturating_add(T::DbWeight::get().reads(1 as u64))
.saturating_add(T::DbWeight::get().writes(1 as u64))
}
+ // Storage: Fungible Balance (r:1 w:0)
+ // Storage: Fungible Allowance (r:0 w:1)
+ fn approve_from() -> Weight {
+ Weight::from_ref_time(19_817_000 as u64)
+ .saturating_add(T::DbWeight::get().reads(1 as u64))
+ .saturating_add(T::DbWeight::get().writes(1 as u64))
+ }
// Storage: Fungible Allowance (r:1 w:1)
// Storage: Fungible Balance (r:2 w:2)
fn transfer_from() -> Weight {
@@ -141,6 +149,13 @@
.saturating_add(RocksDbWeight::get().reads(1 as u64))
.saturating_add(RocksDbWeight::get().writes(1 as u64))
}
+ // Storage: Fungible Balance (r:1 w:0)
+ // Storage: Fungible Allowance (r:0 w:1)
+ fn approve_from() -> Weight {
+ Weight::from_ref_time(19_817_000 as u64)
+ .saturating_add(RocksDbWeight::get().reads(1 as u64))
+ .saturating_add(RocksDbWeight::get().writes(1 as u64))
+ }
// Storage: Fungible Allowance (r:1 w:1)
// Storage: Fungible Balance (r:2 w:2)
fn transfer_from() -> Weight {
pallets/nonfungible/src/benchmarking.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/benchmarking.rs
+++ b/pallets/nonfungible/src/benchmarking.rs
@@ -134,6 +134,15 @@
let item = create_max_item(&collection, &owner, sender.clone())?;
}: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}
+ approve_from {
+ bench_init!{
+ owner: sub; collection: collection(owner);
+ owner: cross_from_sub; sender: cross_sub; spender: cross_sub;
+ };
+ let owner_eth = T::CrossAccountId::from_eth(*sender.as_eth());
+ let item = create_max_item(&collection, &owner, owner_eth.clone())?;
+ }: {<Pallet<T>>::set_allowance_for(&collection, &sender, &owner_eth, item, Some(&spender))?}
+
transfer_from {
bench_init!{
owner: sub; collection: collection(owner);
pallets/nonfungible/src/common.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -102,6 +102,10 @@
<SelfWeightOf<T>>::approve()
}
+ fn approve_from() -> Weight {
+ <SelfWeightOf<T>>::approve_from()
+ }
+
fn transfer_from() -> Weight {
<SelfWeightOf<T>>::transfer_from()
}
@@ -353,6 +357,26 @@
)
}
+ fn approve_from(
+ &self,
+ sender: T::CrossAccountId,
+ from: T::CrossAccountId,
+ to: T::CrossAccountId,
+ token: TokenId,
+ amount: u128,
+ ) -> DispatchResultWithPostInfo {
+ ensure!(amount <= 1, <Error<T>>::NonfungibleItemsHaveNoAmount);
+
+ with_weight(
+ if amount == 1 {
+ <Pallet<T>>::set_allowance_for(self, &sender, &from, token, Some(&to))
+ } else {
+ <Pallet<T>>::set_allowance_for(self, &sender, &from, token, None)
+ },
+ <CommonWeights<T>>::approve_from(),
+ )
+ }
+
fn transfer_from(
&self,
sender: T::CrossAccountId,
pallets/nonfungible/src/lib.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -1171,6 +1171,51 @@
Ok(())
}
+ /// Set allowance for the spender to `transfer` or `burn` sender's token from eth mirror.
+ ///
+ /// - `from`: Address of sender's eth mirror.
+ /// - `to`: Adress of spender.
+ /// - `token`: Token the spender is allowed to `transfer` or `burn`.
+ pub fn set_allowance_for(
+ collection: &NonfungibleHandle<T>,
+ sender: &T::CrossAccountId,
+ from: &T::CrossAccountId,
+ token: TokenId,
+ to: Option<&T::CrossAccountId>,
+ ) -> DispatchResult {
+ if collection.permissions.access() == AccessMode::AllowList {
+ collection.check_allowlist(sender)?;
+ collection.check_allowlist(from)?;
+ if let Some(to) = to {
+ collection.check_allowlist(to)?;
+ }
+ }
+
+ if let Some(to) = to {
+ <PalletCommon<T>>::ensure_correct_receiver(to)?;
+ }
+
+ ensure!(
+ *sender.as_eth() == *from.as_eth(),
+ <CommonError<T>>::AddressIsNotEthMirror
+ );
+
+ let token_data =
+ <TokenData<T>>::get((collection.id, token)).ok_or(<CommonError<T>>::TokenNotFound)?;
+ if token_data.owner != *from {
+ ensure!(
+ collection.limits.owner_can_transfer()
+ && (collection.is_owner_or_admin(sender) || collection.is_owner_or_admin(from)),
+ <CommonError<T>>::CantApproveMoreThanOwned
+ );
+ }
+
+ // =========
+
+ Self::set_allowance_unchecked(collection, from, token, to, false);
+ Ok(())
+ }
+
/// Checks allowance for the spender to use the token.
fn check_allowed(
collection: &NonfungibleHandle<T>,
pallets/nonfungible/src/weights.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/weights.rs
+++ b/pallets/nonfungible/src/weights.rs
@@ -42,6 +42,7 @@
fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight;
fn transfer() -> Weight;
fn approve() -> Weight;
+ fn approve_from() -> Weight;
fn transfer_from() -> Weight;
fn burn_from() -> Weight;
fn set_token_property_permissions(b: u32, ) -> Weight;
@@ -147,6 +148,13 @@
.saturating_add(T::DbWeight::get().reads(2 as u64))
.saturating_add(T::DbWeight::get().writes(1 as u64))
}
+ // Storage: Nonfungible TokenData (r:1 w:0)
+ // Storage: Nonfungible Allowance (r:1 w:1)
+ fn approve_from() -> Weight {
+ Weight::from_ref_time(18_965_000 as u64)
+ .saturating_add(T::DbWeight::get().reads(2 as u64))
+ .saturating_add(T::DbWeight::get().writes(1 as u64))
+ }
// Storage: Nonfungible Allowance (r:1 w:1)
// Storage: Nonfungible TokenData (r:1 w:1)
// Storage: Nonfungible AccountBalance (r:2 w:2)
@@ -310,6 +318,13 @@
.saturating_add(RocksDbWeight::get().reads(2 as u64))
.saturating_add(RocksDbWeight::get().writes(1 as u64))
}
+ // Storage: Nonfungible TokenData (r:1 w:0)
+ // Storage: Nonfungible Allowance (r:1 w:1)
+ fn approve_from() -> Weight {
+ Weight::from_ref_time(18_965_000 as u64)
+ .saturating_add(RocksDbWeight::get().reads(2 as u64))
+ .saturating_add(RocksDbWeight::get().writes(1 as u64))
+ }
// Storage: Nonfungible Allowance (r:1 w:1)
// Storage: Nonfungible TokenData (r:1 w:1)
// Storage: Nonfungible AccountBalance (r:2 w:2)
pallets/refungible/src/benchmarking.rsdiffbeforeafterboth--- a/pallets/refungible/src/benchmarking.rs
+++ b/pallets/refungible/src/benchmarking.rs
@@ -163,6 +163,15 @@
let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;
}: {<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?}
+ approve_from {
+ bench_init!{
+ owner: sub; collection: collection(owner);
+ owner: cross_from_sub; sender: cross_sub; spender: cross_sub;
+ };
+ let owner_eth = T::CrossAccountId::from_eth(*sender.as_eth());
+ let item = create_max_item(&collection, &owner, [(owner_eth.clone(), 200)])?;
+ }: {<Pallet<T>>::set_allowance_for(&collection, &sender, &owner_eth, &spender, item, 100)?}
+
transfer_from_normal {
bench_init!{
owner: sub; collection: collection(owner);
pallets/refungible/src/common.rsdiffbeforeafterboth--- a/pallets/refungible/src/common.rs
+++ b/pallets/refungible/src/common.rs
@@ -127,6 +127,10 @@
<SelfWeightOf<T>>::approve()
}
+ fn approve_from() -> Weight {
+ <SelfWeightOf<T>>::approve_from()
+ }
+
fn transfer_from() -> Weight {
max_weight_of!(
transfer_from_normal(),
@@ -314,6 +318,20 @@
)
}
+ fn approve_from(
+ &self,
+ sender: T::CrossAccountId,
+ from: T::CrossAccountId,
+ to: T::CrossAccountId,
+ token_id: TokenId,
+ amount: u128,
+ ) -> DispatchResultWithPostInfo {
+ with_weight(
+ <Pallet<T>>::set_allowance_for(self, &sender, &from, &to, token_id, amount),
+ <CommonWeights<T>>::approve_from(),
+ )
+ }
+
fn transfer_from(
&self,
sender: T::CrossAccountId,
pallets/refungible/src/lib.rsdiffbeforeafterboth--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -1102,6 +1102,47 @@
Ok(())
}
+ /// Set allowance to spend from sender's eth mirror
+ ///
+ /// - `from`: Address of sender's eth mirror.
+ /// - `to`: Adress of spender.
+ /// - `amount`: Amount of token pieces the spender is allowed to `transfer` or `burn.
+ pub fn set_allowance_for(
+ collection: &RefungibleHandle<T>,
+ sender: &T::CrossAccountId,
+ from: &T::CrossAccountId,
+ to: &T::CrossAccountId,
+ token_id: TokenId,
+ amount: u128,
+ ) -> DispatchResult {
+ if collection.permissions.access() == AccessMode::AllowList {
+ collection.check_allowlist(sender)?;
+ collection.check_allowlist(from)?;
+ collection.check_allowlist(to)?;
+ }
+
+ <PalletCommon<T>>::ensure_correct_receiver(to)?;
+
+ ensure!(
+ *sender.as_eth() == *from.as_eth(),
+ <CommonError<T>>::AddressIsNotEthMirror
+ );
+
+ if <Balance<T>>::get((collection.id, token_id, from)) < amount {
+ ensure!(
+ collection.limits.owner_can_transfer()
+ && (collection.is_owner_or_admin(sender) || collection.is_owner_or_admin(from))
+ && Self::token_exists(collection, token_id),
+ <CommonError<T>>::CantApproveMoreThanOwned
+ );
+ }
+
+ // =========
+
+ Self::set_allowance_unchecked(collection, from, to, token_id, amount);
+ Ok(())
+ }
+
/// Returns allowance, which should be set after transaction
fn check_allowed(
collection: &RefungibleHandle<T>,
pallets/refungible/src/weights.rsdiffbeforeafterboth--- a/pallets/refungible/src/weights.rs
+++ b/pallets/refungible/src/weights.rs
@@ -45,6 +45,7 @@
fn transfer_removing() -> Weight;
fn transfer_creating_removing() -> Weight;
fn approve() -> Weight;
+ fn approve_from() -> Weight;
fn transfer_from_normal() -> Weight;
fn transfer_from_creating() -> Weight;
fn transfer_from_removing() -> Weight;
@@ -175,6 +176,13 @@
.saturating_add(T::DbWeight::get().reads(1 as u64))
.saturating_add(T::DbWeight::get().writes(1 as u64))
}
+ // Storage: Refungible Balance (r:1 w:0)
+ // Storage: Refungible Allowance (r:0 w:1)
+ fn approve_from() -> Weight {
+ Weight::from_ref_time(20_649_000 as u64)
+ .saturating_add(T::DbWeight::get().reads(1 as u64))
+ .saturating_add(T::DbWeight::get().writes(1 as u64))
+ }
// Storage: Refungible Allowance (r:1 w:1)
// Storage: Refungible CollectionAllowance (r:1 w:0)
// Storage: Refungible Balance (r:2 w:2)
@@ -400,6 +408,13 @@
.saturating_add(RocksDbWeight::get().reads(1 as u64))
.saturating_add(RocksDbWeight::get().writes(1 as u64))
}
+ // Storage: Refungible Balance (r:1 w:0)
+ // Storage: Refungible Allowance (r:0 w:1)
+ fn approve_from() -> Weight {
+ Weight::from_ref_time(20_649_000 as u64)
+ .saturating_add(RocksDbWeight::get().reads(1 as u64))
+ .saturating_add(RocksDbWeight::get().writes(1 as u64))
+ }
// Storage: Refungible Allowance (r:1 w:1)
// Storage: Refungible CollectionAllowance (r:1 w:0)
// Storage: Refungible Balance (r:2 w:2)
pallets/unique/src/lib.rsdiffbeforeafterboth--- a/pallets/unique/src/lib.rs
+++ b/pallets/unique/src/lib.rs
@@ -851,6 +851,29 @@
dispatch_tx::<T, _>(collection_id, |d| d.approve(sender, spender, item_id, amount))
}
+ /// Allow a non-permissioned address to transfer or burn an item from owner's eth mirror.
+ ///
+ /// # Permissions
+ ///
+ /// * Collection owner
+ /// * Collection admin
+ /// * Current item owner
+ ///
+ /// # Arguments
+ ///
+ /// * `from`: Owner's account eth mirror
+ /// * `to`: Account to be approved to make specific transactions on non-owned tokens.
+ /// * `collection_id`: ID of the collection the item belongs to.
+ /// * `item_id`: ID of the item transactions on which are now approved.
+ /// * `amount`: Number of pieces of the item approved for a transaction (maximum of 1 for NFTs).
+ /// Set to 0 to revoke the approval.
+ #[weight = T::CommonWeightInfo::approve_from()]
+ pub fn approve_from(origin, from:T::CrossAccountId, to: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResultWithPostInfo {
+ let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
+
+ dispatch_tx::<T, _>(collection_id, |d| d.approve_from(sender, from, to, item_id, amount))
+ }
+
/// Change ownership of an item on behalf of the owner as a non-owner account.
///
/// See the [`approve`][`Pallet::approve`] method for additional information.
runtime/common/identity.rsdiffbeforeafterboth--- a/runtime/common/identity.rs
+++ b/runtime/common/identity.rs
@@ -21,9 +21,7 @@
use sp_runtime::{
traits::{DispatchInfoOf, SignedExtension},
- transaction_validity::{
- TransactionValidity, ValidTransaction, InvalidTransaction, TransactionValidityError,
- },
+ transaction_validity::{TransactionValidity, ValidTransaction, TransactionValidityError},
};
#[derive(Debug, Encode, Decode, PartialEq, Eq, Clone, TypeInfo)]
runtime/common/weights.rsdiffbeforeafterboth--- a/runtime/common/weights.rs
+++ b/runtime/common/weights.rs
@@ -101,6 +101,10 @@
dispatch_weight::<T>() + max_weight_of!(approve())
}
+ fn approve_from() -> Weight {
+ dispatch_weight::<T>() + max_weight_of!(approve_from())
+ }
+
fn transfer_from() -> Weight {
dispatch_weight::<T>() + max_weight_of!(transfer_from())
}
tests/src/approve.test.tsdiffbeforeafterboth--- a/tests/src/approve.test.ts
+++ b/tests/src/approve.test.ts
@@ -16,336 +16,521 @@
import {IKeyringPair} from '@polkadot/types/types';
import {expect, itSub, Pallets, usingPlaygrounds} from './util';
+import {CrossAccountId} from './util/playgrounds/unique';
+
-describe('Integration Test approve(spender, collection_id, item_id, amount):', () => {
- let alice: IKeyringPair;
- let bob: IKeyringPair;
- let charlie: IKeyringPair;
+[
+ {method: 'approveToken', account: (account: IKeyringPair) => CrossAccountId.fromKeyring(account)},
+ {method: 'approveTokenFromEth', account: (account: IKeyringPair) => CrossAccountId.fromKeyring(account).toEthereum()},
+].map(testCase => {
+ describe(`Integration Test ${testCase.method}(spender, collection_id, item_id, amount):`, () => {
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
- before(async () => {
- await usingPlaygrounds(async (helper, privateKey) => {
- const donor = await privateKey({filename: __filename});
- [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ before(async () => {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ const donor = await privateKey({filename: __filename});
+ [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ });
});
- });
- itSub('[nft] Execute the extrinsic and check approvedList', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});
- await helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address});
- expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: bob.address})).to.be.true;
- });
+ itSub('[nft] Execute the extrinsic and check approvedList', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(alice)});
+ await (helper.nft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address});
+ expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: bob.address})).to.be.true;
+ });
+
+ itSub('[fungible] Execute the extrinsic and check approvedList', async ({helper}) => {
+ const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
+ await helper.ft.mintTokens(alice, collectionId, 10n, testCase.account(alice));
+ const tokenId = await helper.ft.getLastTokenId(collectionId);
+ await (helper.ft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address});
+ const amount = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, testCase.account(alice));
+ expect(amount).to.be.equal(BigInt(1));
+ });
+
+ itSub.ifWithPallets('[refungible] Execute the extrinsic and check approvedList', [Pallets.ReFungible], async ({helper}) => {
+ const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(alice), pieces: 100n});
+ await (helper.rft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address});
+ const amount = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, testCase.account(alice));
+ expect(amount).to.be.equal(BigInt(1));
+ });
+
+ itSub('[nft] Remove approval by using 0 amount', async ({helper}) => {
+ const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const collectionId = collection.collectionId;
+ const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(alice)});
+ await (helper.nft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address});
+ expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: bob.address})).to.be.true;
+ await (helper.nft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address}, 0n);
+ expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: bob.address})).to.be.false;
+ });
- itSub('[fungible] Execute the extrinsic and check approvedList', async ({helper}) => {
- const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
- await helper.ft.mintTokens(alice, collectionId, 10n, {Substrate: alice.address});
- const tokenId = await helper.ft.getLastTokenId(collectionId);
- await helper.ft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address});
- const amount = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- expect(amount).to.be.equal(BigInt(1));
- });
+ itSub('[fungible] Remove approval by using 0 amount', async ({helper}) => {
+ const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
+ await helper.ft.mintTokens(alice, collectionId, 10n, testCase.account(alice));
+ const tokenId = await helper.ft.getLastTokenId(collectionId);
+ await (helper.ft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address});
+ const amountBefore = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, testCase.account(alice));
+ expect(amountBefore).to.be.equal(BigInt(1));
- itSub.ifWithPallets('[refungible] Execute the extrinsic and check approvedList', [Pallets.ReFungible], async ({helper}) => {
- const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: alice.address, pieces: 100n});
- await helper.rft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address});
- const amount = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- expect(amount).to.be.equal(BigInt(1));
- });
+ await (helper.ft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address}, 0n);
+ const amountAfter = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, testCase.account(alice));
+ expect(amountAfter).to.be.equal(BigInt(0));
+ });
- itSub('[nft] Remove approval by using 0 amount', async ({helper}) => {
- const collection = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const collectionId = collection.collectionId;
- const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});
- await helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address});
- expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: bob.address})).to.be.true;
- await helper.signTransaction(alice, helper.constructApiCall('api.tx.unique.approve', [{Substrate: bob.address}, collectionId, tokenId, 0]));
- expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: bob.address})).to.be.false;
- });
+ itSub.ifWithPallets('[refungible] Remove approval by using 0 amount', [Pallets.ReFungible], async ({helper}) => {
+ const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(alice), pieces: 100n});
+ await (helper.rft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address});
+ const amountBefore = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, testCase.account(alice));
+ expect(amountBefore).to.be.equal(BigInt(1));
- itSub('[fungible] Remove approval by using 0 amount', async ({helper}) => {
- const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
- await helper.ft.mintTokens(alice, collectionId, 10n, {Substrate: alice.address});
- const tokenId = await helper.ft.getLastTokenId(collectionId);
- await helper.ft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address});
- const amountBefore = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- expect(amountBefore).to.be.equal(BigInt(1));
+ await (helper.rft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address}, 0n);
+ const amountAfter = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, testCase.account(alice));
+ expect(amountAfter).to.be.equal(BigInt(0));
+ });
- await helper.ft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address}, 0n);
- const amountAfter = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- expect(amountAfter).to.be.equal(BigInt(0));
+ itSub('can`t be called by collection owner on non-owned item when OwnerCanTransfer == false', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(bob)});
+ const result = (helper.nft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: charlie.address});
+ await expect(result).to.be.rejected;
+ });
});
- itSub.ifWithPallets('[refungible] Remove approval by using 0 amount', [Pallets.ReFungible], async ({helper}) => {
- const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: alice.address, pieces: 100n});
- await helper.rft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address});
- const amountBefore = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- expect(amountBefore).to.be.equal(BigInt(1));
+ describe(`[${testCase.method}] Normal user can approve other users to transfer:`, () => {
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
- await helper.rft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address}, 0n);
- const amountAfter = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- expect(amountAfter).to.be.equal(BigInt(0));
- });
+ before(async () => {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ const donor = await privateKey({filename: __filename});
+ [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ });
+ });
- itSub('can`t be called by collection owner on non-owned item when OwnerCanTransfer == false', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: bob.address});
- const approveTokenTx = () => helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: charlie.address});
- await expect(approveTokenTx()).to.be.rejected;
- });
-});
+ itSub('NFT', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(bob)});
+ await (helper.nft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address});
+ expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: charlie.address})).to.be.true;
+ });
-describe('Normal user can approve other users to transfer:', () => {
- let alice: IKeyringPair;
- let bob: IKeyringPair;
- let charlie: IKeyringPair;
+ itSub('Fungible up to an approved amount', async ({helper}) => {
+ const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
+ await helper.ft.mintTokens(alice, collectionId, 10n, testCase.account(bob));
+ const tokenId = await helper.ft.getLastTokenId(collectionId);
+ await (helper.ft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address});
+ const amount = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: charlie.address}, testCase.account(bob));
+ expect(amount).to.be.equal(BigInt(1));
+ });
- before(async () => {
- await usingPlaygrounds(async (helper, privateKey) => {
- const donor = await privateKey({filename: __filename});
- [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ itSub.ifWithPallets('ReFungible up to an approved amount', [Pallets.ReFungible], async ({helper}) => {
+ const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(bob), pieces: 100n});
+ await (helper.rft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address}, 100n);
+ const amount = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: charlie.address}, testCase.account(bob));
+ expect(amount).to.be.equal(BigInt(100n));
});
});
- itSub('NFT', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: bob.address});
- await helper.nft.approveToken(bob, collectionId, tokenId, {Substrate: charlie.address});
- expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: charlie.address})).to.be.true;
- });
+ describe(`[${testCase.method}] Approved users can transferFrom up to approved amount:`, () => {
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
- itSub('Fungible up to an approved amount', async ({helper}) => {
- const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
- await helper.ft.mintTokens(alice, collectionId, 10n, bob.address);
- const tokenId = await helper.ft.getLastTokenId(collectionId);
- await helper.ft.approveToken(bob, collectionId, tokenId, {Substrate: charlie.address});
- const amount = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: charlie.address}, {Substrate: bob.address});
- expect(amount).to.be.equal(BigInt(1));
- });
+ before(async () => {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ const donor = await privateKey({filename: __filename});
+ [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ });
+ });
- itSub.ifWithPallets('ReFungible up to an approved amount', [Pallets.ReFungible], async ({helper}) => {
- const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: bob.address, pieces: 100n});
- await helper.rft.approveToken(bob, collectionId, tokenId, {Substrate: charlie.address}, 100n);
- const amount = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: charlie.address}, {Substrate: bob.address});
- expect(amount).to.be.equal(BigInt(100n));
+ itSub('NFT', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(bob)});
+ await (helper.nft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address});
+ await helper.nft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address});
+ const owner = await helper.nft.getTokenOwner(collectionId, tokenId);
+ expect(owner.Substrate).to.be.equal(alice.address);
+ });
+
+ itSub('Fungible up to an approved amount', async ({helper}) => {
+ const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
+ await helper.ft.mintTokens(alice, collectionId, 10n, testCase.account(bob));
+ const tokenId = await helper.ft.getLastTokenId(collectionId);
+ await (helper.ft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address});
+ const before = await helper.ft.getBalance(collectionId, {Substrate: alice.address});
+ await helper.ft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address}, 1n);
+ const after = await helper.ft.getBalance(collectionId, {Substrate: alice.address});
+ expect(after - before).to.be.equal(BigInt(1));
+ });
+
+ itSub.ifWithPallets('ReFungible up to an approved amount', [Pallets.ReFungible], async ({helper}) => {
+ const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(bob), pieces: 100n});
+ await (helper.rft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address});
+ const before = await helper.rft.getTokenBalance(collectionId, tokenId, {Substrate: alice.address});
+ await helper.rft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address}, 1n);
+ const after = await helper.rft.getTokenBalance(collectionId, tokenId, {Substrate: alice.address});
+ expect(after - before).to.be.equal(BigInt(1));
+ });
});
-});
-describe('Approved users can transferFrom up to approved amount:', () => {
- let alice: IKeyringPair;
- let bob: IKeyringPair;
- let charlie: IKeyringPair;
+ describe(`[${testCase.method}] Approved users cannot use transferFrom to repeat transfers if approved amount was already transferred:`, () => {
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
+
+ before(async () => {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ const donor = await privateKey({filename: __filename});
+ [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ });
+ });
+
+ itSub('NFT', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(bob)});
+ await (helper.nft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address});
+ await helper.nft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address});
+ const owner = await helper.nft.getTokenOwner(collectionId, tokenId);
+ expect(owner.Substrate).to.be.equal(alice.address);
+ const transferTokenFromTx = () => helper.nft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address});
+ await expect(transferTokenFromTx()).to.be.rejected;
+ });
+
+ itSub('Fungible up to an approved amount', async ({helper}) => {
+ const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
+ await helper.ft.mintTokens(alice, collectionId, 10n, testCase.account(bob));
+ const tokenId = await helper.ft.getLastTokenId(collectionId);
+ await (helper.ft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address});
+ const before = await helper.ft.getBalance(collectionId, {Substrate: alice.address});
+ await helper.ft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address}, 1n);
+ const after = await helper.ft.getBalance(collectionId, {Substrate: alice.address});
+ expect(after - before).to.be.equal(BigInt(1));
+
+ const transferTokenFromTx = () => helper.ft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address}, 1n);
+ await expect(transferTokenFromTx()).to.be.rejected;
+ });
- before(async () => {
- await usingPlaygrounds(async (helper, privateKey) => {
- const donor = await privateKey({filename: __filename});
- [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ itSub.ifWithPallets('ReFungible up to an approved amount', [Pallets.ReFungible], async ({helper}) => {
+ const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(bob), pieces: 100n});
+ await (helper.ft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address}, 100n);
+ const before = await helper.rft.getTokenBalance(collectionId, tokenId, {Substrate: alice.address});
+ await helper.rft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address}, 100n);
+ const after = await helper.rft.getTokenBalance(collectionId, tokenId, {Substrate: alice.address});
+ expect(after - before).to.be.equal(BigInt(100));
+ const transferTokenFromTx = () => helper.rft.transferTokenFrom(charlie, collectionId, tokenId, testCase.account(bob), {Substrate: alice.address}, 100n);
+ await expect(transferTokenFromTx()).to.be.rejected;
});
});
- itSub('NFT', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: bob.address});
- await helper.nft.approveToken(bob, collectionId, tokenId, {Substrate: charlie.address});
- await helper.nft.transferTokenFrom(charlie, collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- const owner = await helper.nft.getTokenOwner(collectionId, tokenId);
- expect(owner.Substrate).to.be.equal(alice.address);
+ describe(`[${testCase.method}] Approved amount decreases by the transferred amount:`, () => {
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
+ let dave: IKeyringPair;
+
+ before(async () => {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ const donor = await privateKey({filename: __filename});
+ [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor);
+ });
+ });
+
+ itSub('If a user B is approved to transfer 10 Fungible tokens from user A, they can transfer 2 tokens to user C, which will result in decreasing approval from 10 to 8. Then user B can transfer 8 tokens to user D.', async ({helper}) => {
+ const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
+ await helper.ft.mintTokens(alice, collectionId, 10n, testCase.account(alice));
+ const tokenId = await helper.ft.getLastTokenId(collectionId);
+ await (helper.ft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address}, 10n);
+
+ const charlieBefore = await helper.ft.getBalance(collectionId, {Substrate: charlie.address});
+ await helper.ft.transferTokenFrom(bob, collectionId, tokenId, testCase.account(alice), {Substrate: charlie.address}, 2n);
+ const charlieAfter = await helper.ft.getBalance(collectionId, {Substrate: charlie.address});
+ expect(charlieAfter - charlieBefore).to.be.equal(BigInt(2));
+
+ const daveBefore = await helper.ft.getBalance(collectionId, {Substrate: dave.address});
+ await helper.ft.transferTokenFrom(bob, collectionId, tokenId, testCase.account(alice), {Substrate: dave.address}, 8n);
+ const daveAfter = await helper.ft.getBalance(collectionId, {Substrate: dave.address});
+ expect(daveAfter - daveBefore).to.be.equal(BigInt(8));
+ });
});
- itSub('Fungible up to an approved amount', async ({helper}) => {
- const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
- await helper.ft.mintTokens(alice, collectionId, 10n, bob.address);
- const tokenId = await helper.ft.getLastTokenId(collectionId);
- await helper.ft.approveToken(bob, collectionId, tokenId, {Substrate: charlie.address});
- const before = await helper.ft.getBalance(collectionId, {Substrate: alice.address});
- await helper.ft.transferTokenFrom(charlie, collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address}, 1n);
- const after = await helper.ft.getBalance(collectionId, {Substrate: alice.address});
- expect(after - before).to.be.equal(BigInt(1));
+ describe(`[${testCase.method}] User may clear the approvals to approving for 0 amount:`, () => {
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
+
+ before(async () => {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ const donor = await privateKey({filename: __filename});
+ [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ });
+ });
+
+ itSub('NFT', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(alice)});
+ await (helper.nft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address});
+ expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: bob.address})).to.be.true;
+ await (helper.nft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address}, 0n);
+ expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: bob.address})).to.be.false;
+ const transferTokenFromTx = () => helper.nft.transferTokenFrom(bob, collectionId, tokenId, {Substrate: bob.address}, {Substrate: bob.address});
+ await expect(transferTokenFromTx()).to.be.rejected;
+ });
+
+ itSub('Fungible', async ({helper}) => {
+ const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
+ await helper.ft.mintTokens(alice, collectionId, 10n, testCase.account(alice));
+ const tokenId = await helper.ft.getLastTokenId(collectionId);
+ await (helper.ft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address});
+ const amountBefore = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, testCase.account(alice));
+ expect(amountBefore).to.be.equal(BigInt(1));
+
+ await (helper.ft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address}, 0n);
+ const amountAfter = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, testCase.account(alice));
+ expect(amountAfter).to.be.equal(BigInt(0));
+
+ const transferTokenFromTx = () => helper.ft.transferTokenFrom(bob, collectionId, tokenId, {Substrate: bob.address}, {Substrate: charlie.address}, 1n);
+ await expect(transferTokenFromTx()).to.be.rejected;
+ });
+
+ itSub.ifWithPallets('ReFungible', [Pallets.ReFungible], async ({helper}) => {
+ const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(alice), pieces: 100n});
+ await (helper.rft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address});
+ const amountBefore = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, testCase.account(alice));
+ expect(amountBefore).to.be.equal(BigInt(1));
+
+ await (helper.rft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address}, 0n);
+ const amountAfter = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, testCase.account(alice));
+ expect(amountAfter).to.be.equal(BigInt(0));
+
+ const transferTokenFromTx = () => helper.rft.transferTokenFrom(bob, collectionId, tokenId, {Substrate: bob.address}, {Substrate: charlie.address}, 100n);
+ await expect(transferTokenFromTx()).to.be.rejected;
+ });
});
- itSub.ifWithPallets('ReFungible up to an approved amount', [Pallets.ReFungible], async ({helper}) => {
- const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: bob.address, pieces: 100n});
- await helper.rft.approveToken(bob, collectionId, tokenId, {Substrate: charlie.address});
- const before = await helper.rft.getTokenBalance(collectionId, tokenId, {Substrate: alice.address});
- await helper.rft.transferTokenFrom(charlie, collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address}, 1n);
- const after = await helper.rft.getTokenBalance(collectionId, tokenId, {Substrate: alice.address});
- expect(after - before).to.be.equal(BigInt(1));
+ describe(`[${testCase.method}] User cannot approve for the amount greater than they own:`, () => {
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
+
+ before(async () => {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ const donor = await privateKey({filename: __filename});
+ [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ });
+ });
+
+ itSub('1 for NFT', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(bob)});
+ const result = (helper.nft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address}, 2n);
+ await expect(result).to.be.rejected;
+ expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: charlie.address})).to.be.false;
+ });
+
+ itSub('Fungible', async ({helper}) => {
+ const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
+ await helper.ft.mintTokens(alice, collectionId, 10n, testCase.account(alice));
+ const tokenId = await helper.ft.getLastTokenId(collectionId);
+ const result = (helper.ft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address}, 11n);
+ await expect(result).to.be.rejected;
+ });
+
+ itSub.ifWithPallets('ReFungible', [Pallets.ReFungible], async ({helper}) => {
+ const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(alice), pieces: 100n});
+ const result = (helper.rft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: bob.address}, 101n);
+ await expect(result).to.be.rejected;
+ });
});
-});
-describe('Approved users cannot use transferFrom to repeat transfers if approved amount was already transferred:', () => {
- let alice: IKeyringPair;
- let bob: IKeyringPair;
- let charlie: IKeyringPair;
+ describe(`[${testCase.method}] Integration Test approve(spender, collection_id, item_id, amount) with collection admin permissions:`, () => {
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
+
+ before(async () => {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ const donor = await privateKey({filename: __filename});
+ [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ });
+ });
- before(async () => {
- await usingPlaygrounds(async (helper, privateKey) => {
- const donor = await privateKey({filename: __filename});
- [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ itSub('can be called by collection admin on non-owned item', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(alice)});
+ await helper.collection.addAdmin(alice, collectionId, {Substrate: bob.address});
+ const result = (helper.nft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: charlie.address});
+ await expect(result).to.be.rejected;
});
});
- itSub('NFT', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: bob.address});
- await helper.nft.approveToken(bob, collectionId, tokenId, {Substrate: charlie.address});
- await helper.nft.transferTokenFrom(charlie, collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- const owner = await helper.nft.getTokenOwner(collectionId, tokenId);
- expect(owner.Substrate).to.be.equal(alice.address);
- const transferTokenFromTx = () => helper.nft.transferTokenFrom(charlie, collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- await expect(transferTokenFromTx()).to.be.rejected;
- });
+ describe(`[${testCase.method}] Negative Integration Test approve(spender, collection_id, item_id, amount):`, () => {
+ let alice: IKeyringPair;
+ let bob: IKeyringPair;
+ let charlie: IKeyringPair;
- itSub('Fungible up to an approved amount', async ({helper}) => {
- const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
- await helper.ft.mintTokens(alice, collectionId, 10n, bob.address);
- const tokenId = await helper.ft.getLastTokenId(collectionId);
- await helper.ft.approveToken(bob, collectionId, tokenId, {Substrate: charlie.address});
- const before = await helper.ft.getBalance(collectionId, {Substrate: alice.address});
- await helper.ft.transferTokenFrom(charlie, collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address}, 1n);
- const after = await helper.ft.getBalance(collectionId, {Substrate: alice.address});
- expect(after - before).to.be.equal(BigInt(1));
+ before(async () => {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ const donor = await privateKey({filename: __filename});
+ [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ });
+ });
- const transferTokenFromTx = () => helper.ft.transferTokenFrom(charlie, collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address}, 1n);
- await expect(transferTokenFromTx()).to.be.rejected;
- });
+ itSub('[nft] Approve for a collection that does not exist', async ({helper}) => {
+ const collectionId = 1 << 32 - 1;
+ await expect((helper.nft as any)[testCase.method](bob, collectionId, 1, {Substrate: charlie.address})).to.be.rejected;
+ });
+
+ itSub('[fungible] Approve for a collection that does not exist', async ({helper}) => {
+ const collectionId = 1 << 32 - 1;
+ const approveTx = () => (helper.ft as any)[testCase.method](bob, collectionId, 1, {Substrate: charlie.address});
+ await expect(approveTx()).to.be.rejected;
+ });
- itSub.ifWithPallets('ReFungible up to an approved amount', [Pallets.ReFungible], async ({helper}) => {
- const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: bob.address, pieces: 100n});
- await helper.rft.approveToken(bob, collectionId, tokenId, {Substrate: charlie.address}, 100n);
- const before = await helper.rft.getTokenBalance(collectionId, tokenId, {Substrate: alice.address});
- await helper.rft.transferTokenFrom(charlie, collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address}, 100n);
- const after = await helper.rft.getTokenBalance(collectionId, tokenId, {Substrate: alice.address});
- expect(after - before).to.be.equal(BigInt(100));
- const transferTokenFromTx = () => helper.rft.transferTokenFrom(charlie, collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address}, 100n);
- await expect(transferTokenFromTx()).to.be.rejected;
- });
-});
+ itSub.ifWithPallets('[refungible] Approve for a collection that does not exist', [Pallets.ReFungible], async ({helper}) => {
+ const collectionId = 1 << 32 - 1;
+ const approveTx = () => (helper.rft as any)[testCase.method](bob, collectionId, 1, {Substrate: charlie.address});
+ await expect(approveTx()).to.be.rejected;
+ });
-describe('Approved amount decreases by the transferred amount:', () => {
- let alice: IKeyringPair;
- let bob: IKeyringPair;
- let charlie: IKeyringPair;
- let dave: IKeyringPair;
+ itSub('[nft] Approve for a collection that was destroyed', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ await helper.nft.burn(alice, collectionId);
+ const approveTx = () => (helper.nft as any)[testCase.method](alice, collectionId, 1, {Substrate: bob.address});
+ await expect(approveTx()).to.be.rejected;
+ });
- before(async () => {
- await usingPlaygrounds(async (helper, privateKey) => {
- const donor = await privateKey({filename: __filename});
- [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor);
+ itSub('[fungible] Approve for a collection that was destroyed', async ({helper}) => {
+ const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ await helper.ft.burn(alice, collectionId);
+ const approveTx = () => (helper.ft as any)[testCase.method](alice, collectionId, 1, {Substrate: bob.address});
+ await expect(approveTx()).to.be.rejected;
});
- });
- itSub('If a user B is approved to transfer 10 Fungible tokens from user A, they can transfer 2 tokens to user C, which will result in decreasing approval from 10 to 8. Then user B can transfer 8 tokens to user D.', async ({helper}) => {
- const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
- await helper.ft.mintTokens(alice, collectionId, 10n, alice.address);
- const tokenId = await helper.ft.getLastTokenId(collectionId);
- await helper.ft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address}, 10n);
+ itSub.ifWithPallets('[refungible] Approve for a collection that was destroyed', [Pallets.ReFungible], async ({helper}) => {
+ const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ await helper.rft.burn(alice, collectionId);
+ const approveTx = () => (helper.rft as any)[testCase.method](alice, collectionId, 1, {Substrate: bob.address});
+ await expect(approveTx()).to.be.rejected;
+ });
- const charlieBefore = await helper.ft.getBalance(collectionId, {Substrate: charlie.address});
- await helper.ft.transferTokenFrom(bob, collectionId, tokenId, {Substrate: alice.address}, {Substrate: charlie.address}, 2n);
- const charlieAfter = await helper.ft.getBalance(collectionId, {Substrate: charlie.address});
- expect(charlieAfter - charlieBefore).to.be.equal(BigInt(2));
+ itSub('[nft] Approve transfer of a token that does not exist', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const approveTx = () => (helper.nft as any)[testCase.method](alice, collectionId, 2, {Substrate: bob.address});
+ await expect(approveTx()).to.be.rejected;
+ });
- const daveBefore = await helper.ft.getBalance(collectionId, {Substrate: dave.address});
- await helper.ft.transferTokenFrom(bob, collectionId, tokenId, {Substrate: alice.address}, {Substrate: dave.address}, 8n);
- const daveAfter = await helper.ft.getBalance(collectionId, {Substrate: dave.address});
- expect(daveAfter - daveBefore).to.be.equal(BigInt(8));
- });
-});
+ itSub.ifWithPallets('[refungible] Approve transfer of a token that does not exist', [Pallets.ReFungible], async ({helper}) => {
+ const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const approveTx = () => (helper.rft as any)[testCase.method](alice, collectionId, 2, {Substrate: bob.address});
+ await expect(approveTx()).to.be.rejected;
+ });
-describe('User may clear the approvals to approving for 0 amount:', () => {
- let alice: IKeyringPair;
- let bob: IKeyringPair;
- let charlie: IKeyringPair;
+ itSub('[nft] Approve using the address that does not own the approved token', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(alice)});
+ const approveTx = () => (helper.nft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: alice.address});
+ await expect(approveTx()).to.be.rejected;
+ });
- before(async () => {
- await usingPlaygrounds(async (helper, privateKey) => {
- const donor = await privateKey({filename: __filename});
- [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ itSub('[fungible] Approve using the address that does not own the approved token', async ({helper}) => {
+ const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ await helper.ft.mintTokens(alice, collectionId, 10n, testCase.account(alice));
+ const tokenId = await helper.ft.getLastTokenId(collectionId);
+ const approveTx = () => (helper.ft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: alice.address});
+ await expect(approveTx()).to.be.rejected;
});
- });
- itSub('NFT', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});
- await helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address});
- expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: bob.address})).to.be.true;
- await helper.signTransaction(alice, helper.constructApiCall('api.tx.unique.approve', [{Substrate: bob.address}, collectionId, tokenId, 0]));
- expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: bob.address})).to.be.false;
- const transferTokenFromTx = () => helper.nft.transferTokenFrom(bob, collectionId, tokenId, {Substrate: bob.address}, {Substrate: bob.address});
- await expect(transferTokenFromTx()).to.be.rejected;
- });
+ itSub.ifWithPallets('[refungible] Approve using the address that does not own the approved token', [Pallets.ReFungible], async ({helper}) => {
+ const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(alice), pieces: 100n});
+ const approveTx = () => (helper.rft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: alice.address});
+ await expect(approveTx()).to.be.rejected;
+ });
- itSub('Fungible', async ({helper}) => {
- const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
- await helper.ft.mintTokens(alice, collectionId, 10n, alice.address);
- const tokenId = await helper.ft.getLastTokenId(collectionId);
- await helper.ft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address});
- const amountBefore = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- expect(amountBefore).to.be.equal(BigInt(1));
+ itSub.ifWithPallets('should fail if approved more ReFungibles than owned', [Pallets.ReFungible], async ({helper}) => {
+ const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: alice.address, pieces: 100n});
+ await helper.rft.transferToken(alice, collectionId, tokenId, testCase.account(bob), 100n);
+ await (helper.rft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: alice.address}, 100n);
- await helper.ft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address}, 0n);
- const amountAfter = await helper.ft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- expect(amountAfter).to.be.equal(BigInt(0));
+ const approveTx = () => (helper.rft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: alice.address}, 101n);
+ await expect(approveTx()).to.be.rejected;
+ });
- const transferTokenFromTx = () => helper.ft.transferTokenFrom(bob, collectionId, tokenId, {Substrate: bob.address}, {Substrate: charlie.address}, 1n);
- await expect(transferTokenFromTx()).to.be.rejected;
- });
+ itSub('should fail if approved more Fungibles than owned', async ({helper}) => {
+ const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ await helper.ft.mintTokens(alice, collectionId, 10n, alice.address);
+ const tokenId = await helper.ft.getLastTokenId(collectionId);
- itSub.ifWithPallets('ReFungible', [Pallets.ReFungible], async ({helper}) => {
- const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: alice.address, pieces: 100n});
- await helper.rft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address});
- const amountBefore = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- expect(amountBefore).to.be.equal(BigInt(1));
+ await helper.ft.transferToken(alice, collectionId, tokenId, testCase.account(bob), 10n);
+ await (helper.ft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: alice.address}, 10n);
+ const approveTx = () => (helper.ft as any)[testCase.method](bob, collectionId, tokenId, {Substrate: alice.address}, 11n);
+ await expect(approveTx()).to.be.rejected;
+ });
- await helper.rft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address}, 0n);
- const amountAfter = await helper.rft.getTokenApprovedPieces(collectionId, tokenId, {Substrate: bob.address}, {Substrate: alice.address});
- expect(amountAfter).to.be.equal(BigInt(0));
+ itSub('fails when called by collection owner on non-owned item when OwnerCanTransfer == false', async ({helper}) => {
+ const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
+ const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: testCase.account(bob)});
+ await helper.collection.setLimits(alice, collectionId, {ownerCanTransfer: false});
- const transferTokenFromTx = () => helper.rft.transferTokenFrom(bob, collectionId, tokenId, {Substrate: bob.address}, {Substrate: charlie.address}, 100n);
- await expect(transferTokenFromTx()).to.be.rejected;
+ const approveTx = () => (helper.nft as any)[testCase.method](alice, collectionId, tokenId, {Substrate: charlie.address});
+ await expect(approveTx()).to.be.rejected;
+ });
});
});
-describe('User cannot approve for the amount greater than they own:', () => {
+describe('Normal user can approve other users to be wallet operator:', () => {
let alice: IKeyringPair;
let bob: IKeyringPair;
- let charlie: IKeyringPair;
before(async () => {
await usingPlaygrounds(async (helper, privateKey) => {
const donor = await privateKey({filename: __filename});
- [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+ [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
});
});
- itSub('1 for NFT', async ({helper}) => {
+ itSub('[nft] Enable and disable approval', async ({helper}) => {
const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: bob.address});
- const approveTx = () => helper.signTransaction(bob, helper.constructApiCall('api.tx.unique.approve', [{Substrate: charlie.address}, collectionId, tokenId, 2]));
- await expect(approveTx()).to.be.rejected;
- expect(await helper.nft.isTokenApproved(collectionId, tokenId, {Substrate: charlie.address})).to.be.false;
- });
- itSub('Fungible', async ({helper}) => {
- const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'}, 0);
- await helper.ft.mintTokens(alice, collectionId, 10n, alice.address);
- const tokenId = await helper.ft.getLastTokenId(collectionId);
- const approveTx = () => helper.ft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address}, 11n);
- await expect(approveTx()).to.be.rejected;
+ const checkBeforeApproval = await helper.nft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+ expect(checkBeforeApproval).to.be.false;
+
+ await helper.nft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, true);
+ const checkAfterApproval = await helper.nft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+ expect(checkAfterApproval).to.be.true;
+
+ await helper.nft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, false);
+ const checkAfterDisapproval = await helper.nft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+ expect(checkAfterDisapproval).to.be.false;
});
- itSub.ifWithPallets('ReFungible', [Pallets.ReFungible], async ({helper}) => {
+ itSub.ifWithPallets('[rft] Enable and disable approval', [Pallets.ReFungible], async ({helper}) => {
const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: alice.address, pieces: 100n});
- const approveTx = () => helper.rft.approveToken(alice, collectionId, tokenId, {Substrate: bob.address}, 101n);
- await expect(approveTx()).to.be.rejected;
+
+ const checkBeforeApproval = await helper.rft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+ expect(checkBeforeApproval).to.be.false;
+
+ await helper.rft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, true);
+ const checkAfterApproval = await helper.rft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+ expect(checkAfterApproval).to.be.true;
+
+ await helper.rft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, false);
+ const checkAfterDisapproval = await helper.rft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
+ expect(checkAfterDisapproval).to.be.false;
});
});
@@ -464,184 +649,5 @@
await token.approve(dave, {Substrate: bob.address}, 50n);
await expect(token.approve(dave, {Substrate: charlie.address}, 51n))
.to.be.rejectedWith('this test would fail (since it is skipped), replace this expecting message with what would have been received');
- });
-});
-
-describe('Integration Test approve(spender, collection_id, item_id, amount) with collection admin permissions:', () => {
- let alice: IKeyringPair;
- let bob: IKeyringPair;
- let charlie: IKeyringPair;
-
- before(async () => {
- await usingPlaygrounds(async (helper, privateKey) => {
- const donor = await privateKey({filename: __filename});
- [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
- });
- });
-
- itSub('can be called by collection admin on non-owned item', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});
- await helper.collection.addAdmin(alice, collectionId, {Substrate: bob.address});
- const approveTx = () => helper.nft.approveToken(bob, collectionId, tokenId, {Substrate: charlie.address});
- await expect(approveTx()).to.be.rejected;
- });
-});
-
-describe('Negative Integration Test approve(spender, collection_id, item_id, amount):', () => {
- let alice: IKeyringPair;
- let bob: IKeyringPair;
- let charlie: IKeyringPair;
-
- before(async () => {
- await usingPlaygrounds(async (helper, privateKey) => {
- const donor = await privateKey({filename: __filename});
- [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
- });
- });
-
- itSub('[nft] Approve for a collection that does not exist', async ({helper}) => {
- const collectionId = 1 << 32 - 1;
- const approveTx = () => helper.nft.approveToken(bob, collectionId, 1, {Substrate: charlie.address});
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub('[fungible] Approve for a collection that does not exist', async ({helper}) => {
- const collectionId = 1 << 32 - 1;
- const approveTx = () => helper.ft.approveToken(bob, collectionId, 1, {Substrate: charlie.address});
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub.ifWithPallets('[refungible] Approve for a collection that does not exist', [Pallets.ReFungible], async ({helper}) => {
- const collectionId = 1 << 32 - 1;
- const approveTx = () => helper.rft.approveToken(bob, collectionId, 1, {Substrate: charlie.address});
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub('[nft] Approve for a collection that was destroyed', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- await helper.nft.burn(alice, collectionId);
- const approveTx = () => helper.nft.approveToken(alice, collectionId, 1, {Substrate: bob.address});
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub('[fungible] Approve for a collection that was destroyed', async ({helper}) => {
- const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- await helper.ft.burn(alice, collectionId);
- const approveTx = () => helper.ft.approveToken(alice, collectionId, 1, {Substrate: bob.address});
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub.ifWithPallets('[refungible] Approve for a collection that was destroyed', [Pallets.ReFungible], async ({helper}) => {
- const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- await helper.rft.burn(alice, collectionId);
- const approveTx = () => helper.rft.approveToken(alice, collectionId, 1, {Substrate: bob.address});
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub('[nft] Approve transfer of a token that does not exist', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const approveTx = () => helper.nft.approveToken(alice, collectionId, 2, {Substrate: bob.address});
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub.ifWithPallets('[refungible] Approve transfer of a token that does not exist', [Pallets.ReFungible], async ({helper}) => {
- const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const approveTx = () => helper.rft.approveToken(alice, collectionId, 2, {Substrate: bob.address});
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub('[nft] Approve using the address that does not own the approved token', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: alice.address});
- const approveTx = () => helper.nft.approveToken(bob, collectionId, tokenId, {Substrate: alice.address});
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub('[fungible] Approve using the address that does not own the approved token', async ({helper}) => {
- const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- await helper.ft.mintTokens(alice, collectionId, 10n, alice.address);
- const tokenId = await helper.ft.getLastTokenId(collectionId);
- const approveTx = () => helper.ft.approveToken(bob, collectionId, tokenId, {Substrate: alice.address});
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub.ifWithPallets('[refungible] Approve using the address that does not own the approved token', [Pallets.ReFungible], async ({helper}) => {
- const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: alice.address, pieces: 100n});
- const approveTx = () => helper.rft.approveToken(bob, collectionId, tokenId, {Substrate: alice.address});
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub.ifWithPallets('should fail if approved more ReFungibles than owned', [Pallets.ReFungible], async ({helper}) => {
- const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.rft.mintToken(alice, {collectionId: collectionId, owner: alice.address, pieces: 100n});
- await helper.rft.transferToken(alice, collectionId, tokenId, {Substrate: bob.address}, 100n);
- await helper.rft.approveToken(bob, collectionId, tokenId, {Substrate: alice.address}, 100n);
-
- const approveTx = () => helper.rft.approveToken(bob, collectionId, tokenId, {Substrate: alice.address}, 101n);
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub('should fail if approved more Fungibles than owned', async ({helper}) => {
- const {collectionId} = await helper.ft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- await helper.ft.mintTokens(alice, collectionId, 10n, alice.address);
- const tokenId = await helper.ft.getLastTokenId(collectionId);
-
- await helper.ft.transferToken(alice, collectionId, tokenId, {Substrate: bob.address}, 10n);
- await helper.ft.approveToken(bob, collectionId, tokenId, {Substrate: alice.address}, 10n);
- const approveTx = () => helper.ft.approveToken(bob, collectionId, tokenId, {Substrate: alice.address}, 11n);
- await expect(approveTx()).to.be.rejected;
- });
-
- itSub('fails when called by collection owner on non-owned item when OwnerCanTransfer == false', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
- const {tokenId} = await helper.nft.mintToken(alice, {collectionId: collectionId, owner: bob.address});
- await helper.collection.setLimits(alice, collectionId, {ownerCanTransfer: false});
-
- const approveTx = () => helper.nft.approveToken(alice, collectionId, tokenId, {Substrate: charlie.address});
- await expect(approveTx()).to.be.rejected;
- });
-});
-
-describe('Normal user can approve other users to be wallet operator:', () => {
- let alice: IKeyringPair;
- let bob: IKeyringPair;
-
- before(async () => {
- await usingPlaygrounds(async (helper, privateKey) => {
- const donor = await privateKey({filename: __filename});
- [alice, bob] = await helper.arrange.createAccounts([100n, 100n], donor);
- });
- });
-
- itSub('[nft] Enable and disable approval', async ({helper}) => {
- const {collectionId} = await helper.nft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
-
- const checkBeforeApproval = await helper.nft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
- expect(checkBeforeApproval).to.be.false;
-
- await helper.nft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, true);
- const checkAfterApproval = await helper.nft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
- expect(checkAfterApproval).to.be.true;
-
- await helper.nft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, false);
- const checkAfterDisapproval = await helper.nft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
- expect(checkAfterDisapproval).to.be.false;
- });
-
- itSub.ifWithPallets('[rft] Enable and disable approval', [Pallets.ReFungible], async ({helper}) => {
- const {collectionId} = await helper.rft.mintCollection(alice, {name: 'col', description: 'descr', tokenPrefix: 'COL'});
-
- const checkBeforeApproval = await helper.rft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
- expect(checkBeforeApproval).to.be.false;
-
- await helper.rft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, true);
- const checkAfterApproval = await helper.rft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
- expect(checkAfterApproval).to.be.true;
-
- await helper.rft.setAllowanceForAll(alice, collectionId, {Substrate: bob.address}, false);
- const checkAfterDisapproval = await helper.rft.allowanceForAll(collectionId, {Substrate: alice.address}, {Substrate: bob.address});
- expect(checkAfterDisapproval).to.be.false;
});
});
tests/src/eth/api/ContractHelpers.soldiffbeforeafterboth--- a/tests/src/eth/api/ContractHelpers.sol
+++ b/tests/src/eth/api/ContractHelpers.sol
@@ -183,9 +183,9 @@
/// Ethereum representation of Optional value with CrossAddress.
struct OptionCrossAddress {
- /// TODO: field description
+ /// Whether or not this CrossAdress is valid and has meaning.
bool status;
- /// TODO: field description
+ /// The underlying CrossAddress value. If the status is false, can be set to whatever.
CrossAddress value;
}
tests/src/interfaces/augment-api-errors.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-errors.ts
+++ b/tests/src/interfaces/augment-api-errors.ts
@@ -85,6 +85,10 @@
**/
AccountTokenLimitExceeded: AugmentedError<ApiType>;
/**
+ * Only spending from eth mirror could be approved
+ **/
+ AddressIsNotEthMirror: AugmentedError<ApiType>;
+ /**
* Can't transfer tokens to ethereum zero address
**/
AddressIsZero: AugmentedError<ApiType>;
tests/src/interfaces/augment-api-tx.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-tx.ts
+++ b/tests/src/interfaces/augment-api-tx.ts
@@ -1214,6 +1214,25 @@
**/
approve: AugmentedSubmittable<(spender: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [PalletEvmAccountBasicCrossAccountIdRepr, u32, u32, u128]>;
/**
+ * Allow a non-permissioned address to transfer or burn an item from owner's eth mirror.
+ *
+ * # Permissions
+ *
+ * * Collection owner
+ * * Collection admin
+ * * Current item owner
+ *
+ * # Arguments
+ *
+ * * `from`: Owner's account eth mirror
+ * * `to`: Account to be approved to make specific transactions on non-owned tokens.
+ * * `collection_id`: ID of the collection the item belongs to.
+ * * `item_id`: ID of the item transactions on which are now approved.
+ * * `amount`: Number of pieces of the item approved for a transaction (maximum of 1 for NFTs).
+ * Set to 0 to revoke the approval.
+ **/
+ approveFrom: AugmentedSubmittable<(from: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, to: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u32, u32, u128]>;
+ /**
* Destroy a token on behalf of the owner as a non-owner account.
*
* See also: [`approve`][`Pallet::approve`].
tests/src/interfaces/default/types.tsdiffbeforeafterboth1// Auto-generated via `yarn polkadot-types-from-defs`, do not edit2/* eslint-disable */34import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';5import type { ITuple } from '@polkadot/types-codec/types';6import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';7import type { Event } from '@polkadot/types/interfaces/system';89/** @name CumulusPalletDmpQueueCall */10export interface CumulusPalletDmpQueueCall extends Enum {11 readonly isServiceOverweight: boolean;12 readonly asServiceOverweight: {13 readonly index: u64;14 readonly weightLimit: u64;15 } & Struct;16 readonly type: 'ServiceOverweight';17}1819/** @name CumulusPalletDmpQueueConfigData */20export interface CumulusPalletDmpQueueConfigData extends Struct {21 readonly maxIndividual: SpWeightsWeightV2Weight;22}2324/** @name CumulusPalletDmpQueueError */25export interface CumulusPalletDmpQueueError extends Enum {26 readonly isUnknown: boolean;27 readonly isOverLimit: boolean;28 readonly type: 'Unknown' | 'OverLimit';29}3031/** @name CumulusPalletDmpQueueEvent */32export interface CumulusPalletDmpQueueEvent extends Enum {33 readonly isInvalidFormat: boolean;34 readonly asInvalidFormat: {35 readonly messageId: U8aFixed;36 } & Struct;37 readonly isUnsupportedVersion: boolean;38 readonly asUnsupportedVersion: {39 readonly messageId: U8aFixed;40 } & Struct;41 readonly isExecutedDownward: boolean;42 readonly asExecutedDownward: {43 readonly messageId: U8aFixed;44 readonly outcome: XcmV2TraitsOutcome;45 } & Struct;46 readonly isWeightExhausted: boolean;47 readonly asWeightExhausted: {48 readonly messageId: U8aFixed;49 readonly remainingWeight: SpWeightsWeightV2Weight;50 readonly requiredWeight: SpWeightsWeightV2Weight;51 } & Struct;52 readonly isOverweightEnqueued: boolean;53 readonly asOverweightEnqueued: {54 readonly messageId: U8aFixed;55 readonly overweightIndex: u64;56 readonly requiredWeight: SpWeightsWeightV2Weight;57 } & Struct;58 readonly isOverweightServiced: boolean;59 readonly asOverweightServiced: {60 readonly overweightIndex: u64;61 readonly weightUsed: SpWeightsWeightV2Weight;62 } & Struct;63 readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced';64}6566/** @name CumulusPalletDmpQueuePageIndexData */67export interface CumulusPalletDmpQueuePageIndexData extends Struct {68 readonly beginUsed: u32;69 readonly endUsed: u32;70 readonly overweightCount: u64;71}7273/** @name CumulusPalletParachainSystemCall */74export interface CumulusPalletParachainSystemCall extends Enum {75 readonly isSetValidationData: boolean;76 readonly asSetValidationData: {77 readonly data: CumulusPrimitivesParachainInherentParachainInherentData;78 } & Struct;79 readonly isSudoSendUpwardMessage: boolean;80 readonly asSudoSendUpwardMessage: {81 readonly message: Bytes;82 } & Struct;83 readonly isAuthorizeUpgrade: boolean;84 readonly asAuthorizeUpgrade: {85 readonly codeHash: H256;86 } & Struct;87 readonly isEnactAuthorizedUpgrade: boolean;88 readonly asEnactAuthorizedUpgrade: {89 readonly code: Bytes;90 } & Struct;91 readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade';92}9394/** @name CumulusPalletParachainSystemError */95export interface CumulusPalletParachainSystemError extends Enum {96 readonly isOverlappingUpgrades: boolean;97 readonly isProhibitedByPolkadot: boolean;98 readonly isTooBig: boolean;99 readonly isValidationDataNotAvailable: boolean;100 readonly isHostConfigurationNotAvailable: boolean;101 readonly isNotScheduled: boolean;102 readonly isNothingAuthorized: boolean;103 readonly isUnauthorized: boolean;104 readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized';105}106107/** @name CumulusPalletParachainSystemEvent */108export interface CumulusPalletParachainSystemEvent extends Enum {109 readonly isValidationFunctionStored: boolean;110 readonly isValidationFunctionApplied: boolean;111 readonly asValidationFunctionApplied: {112 readonly relayChainBlockNum: u32;113 } & Struct;114 readonly isValidationFunctionDiscarded: boolean;115 readonly isUpgradeAuthorized: boolean;116 readonly asUpgradeAuthorized: {117 readonly codeHash: H256;118 } & Struct;119 readonly isDownwardMessagesReceived: boolean;120 readonly asDownwardMessagesReceived: {121 readonly count: u32;122 } & Struct;123 readonly isDownwardMessagesProcessed: boolean;124 readonly asDownwardMessagesProcessed: {125 readonly weightUsed: SpWeightsWeightV2Weight;126 readonly dmqHead: H256;127 } & Struct;128 readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed';129}130131/** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot */132export interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct {133 readonly dmqMqcHead: H256;134 readonly relayDispatchQueueSize: ITuple<[u32, u32]>;135 readonly ingressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;136 readonly egressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;137}138139/** @name CumulusPalletXcmCall */140export interface CumulusPalletXcmCall extends Null {}141142/** @name CumulusPalletXcmError */143export interface CumulusPalletXcmError extends Null {}144145/** @name CumulusPalletXcmEvent */146export interface CumulusPalletXcmEvent extends Enum {147 readonly isInvalidFormat: boolean;148 readonly asInvalidFormat: U8aFixed;149 readonly isUnsupportedVersion: boolean;150 readonly asUnsupportedVersion: U8aFixed;151 readonly isExecutedDownward: boolean;152 readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;153 readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward';154}155156/** @name CumulusPalletXcmpQueueCall */157export interface CumulusPalletXcmpQueueCall extends Enum {158 readonly isServiceOverweight: boolean;159 readonly asServiceOverweight: {160 readonly index: u64;161 readonly weightLimit: u64;162 } & Struct;163 readonly isSuspendXcmExecution: boolean;164 readonly isResumeXcmExecution: boolean;165 readonly isUpdateSuspendThreshold: boolean;166 readonly asUpdateSuspendThreshold: {167 readonly new_: u32;168 } & Struct;169 readonly isUpdateDropThreshold: boolean;170 readonly asUpdateDropThreshold: {171 readonly new_: u32;172 } & Struct;173 readonly isUpdateResumeThreshold: boolean;174 readonly asUpdateResumeThreshold: {175 readonly new_: u32;176 } & Struct;177 readonly isUpdateThresholdWeight: boolean;178 readonly asUpdateThresholdWeight: {179 readonly new_: u64;180 } & Struct;181 readonly isUpdateWeightRestrictDecay: boolean;182 readonly asUpdateWeightRestrictDecay: {183 readonly new_: u64;184 } & Struct;185 readonly isUpdateXcmpMaxIndividualWeight: boolean;186 readonly asUpdateXcmpMaxIndividualWeight: {187 readonly new_: u64;188 } & Struct;189 readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight';190}191192/** @name CumulusPalletXcmpQueueError */193export interface CumulusPalletXcmpQueueError extends Enum {194 readonly isFailedToSend: boolean;195 readonly isBadXcmOrigin: boolean;196 readonly isBadXcm: boolean;197 readonly isBadOverweightIndex: boolean;198 readonly isWeightOverLimit: boolean;199 readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit';200}201202/** @name CumulusPalletXcmpQueueEvent */203export interface CumulusPalletXcmpQueueEvent extends Enum {204 readonly isSuccess: boolean;205 readonly asSuccess: {206 readonly messageHash: Option<H256>;207 readonly weight: SpWeightsWeightV2Weight;208 } & Struct;209 readonly isFail: boolean;210 readonly asFail: {211 readonly messageHash: Option<H256>;212 readonly error: XcmV2TraitsError;213 readonly weight: SpWeightsWeightV2Weight;214 } & Struct;215 readonly isBadVersion: boolean;216 readonly asBadVersion: {217 readonly messageHash: Option<H256>;218 } & Struct;219 readonly isBadFormat: boolean;220 readonly asBadFormat: {221 readonly messageHash: Option<H256>;222 } & Struct;223 readonly isUpwardMessageSent: boolean;224 readonly asUpwardMessageSent: {225 readonly messageHash: Option<H256>;226 } & Struct;227 readonly isXcmpMessageSent: boolean;228 readonly asXcmpMessageSent: {229 readonly messageHash: Option<H256>;230 } & Struct;231 readonly isOverweightEnqueued: boolean;232 readonly asOverweightEnqueued: {233 readonly sender: u32;234 readonly sentAt: u32;235 readonly index: u64;236 readonly required: SpWeightsWeightV2Weight;237 } & Struct;238 readonly isOverweightServiced: boolean;239 readonly asOverweightServiced: {240 readonly index: u64;241 readonly used: SpWeightsWeightV2Weight;242 } & Struct;243 readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced';244}245246/** @name CumulusPalletXcmpQueueInboundChannelDetails */247export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct {248 readonly sender: u32;249 readonly state: CumulusPalletXcmpQueueInboundState;250 readonly messageMetadata: Vec<ITuple<[u32, PolkadotParachainPrimitivesXcmpMessageFormat]>>;251}252253/** @name CumulusPalletXcmpQueueInboundState */254export interface CumulusPalletXcmpQueueInboundState extends Enum {255 readonly isOk: boolean;256 readonly isSuspended: boolean;257 readonly type: 'Ok' | 'Suspended';258}259260/** @name CumulusPalletXcmpQueueOutboundChannelDetails */261export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct {262 readonly recipient: u32;263 readonly state: CumulusPalletXcmpQueueOutboundState;264 readonly signalsExist: bool;265 readonly firstIndex: u16;266 readonly lastIndex: u16;267}268269/** @name CumulusPalletXcmpQueueOutboundState */270export interface CumulusPalletXcmpQueueOutboundState extends Enum {271 readonly isOk: boolean;272 readonly isSuspended: boolean;273 readonly type: 'Ok' | 'Suspended';274}275276/** @name CumulusPalletXcmpQueueQueueConfigData */277export interface CumulusPalletXcmpQueueQueueConfigData extends Struct {278 readonly suspendThreshold: u32;279 readonly dropThreshold: u32;280 readonly resumeThreshold: u32;281 readonly thresholdWeight: SpWeightsWeightV2Weight;282 readonly weightRestrictDecay: SpWeightsWeightV2Weight;283 readonly xcmpMaxIndividualWeight: SpWeightsWeightV2Weight;284}285286/** @name CumulusPrimitivesParachainInherentParachainInherentData */287export interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct {288 readonly validationData: PolkadotPrimitivesV2PersistedValidationData;289 readonly relayChainState: SpTrieStorageProof;290 readonly downwardMessages: Vec<PolkadotCorePrimitivesInboundDownwardMessage>;291 readonly horizontalMessages: BTreeMap<u32, Vec<PolkadotCorePrimitivesInboundHrmpMessage>>;292}293294/** @name EthbloomBloom */295export interface EthbloomBloom extends U8aFixed {}296297/** @name EthereumBlock */298export interface EthereumBlock extends Struct {299 readonly header: EthereumHeader;300 readonly transactions: Vec<EthereumTransactionTransactionV2>;301 readonly ommers: Vec<EthereumHeader>;302}303304/** @name EthereumHeader */305export interface EthereumHeader extends Struct {306 readonly parentHash: H256;307 readonly ommersHash: H256;308 readonly beneficiary: H160;309 readonly stateRoot: H256;310 readonly transactionsRoot: H256;311 readonly receiptsRoot: H256;312 readonly logsBloom: EthbloomBloom;313 readonly difficulty: U256;314 readonly number: U256;315 readonly gasLimit: U256;316 readonly gasUsed: U256;317 readonly timestamp: u64;318 readonly extraData: Bytes;319 readonly mixHash: H256;320 readonly nonce: EthereumTypesHashH64;321}322323/** @name EthereumLog */324export interface EthereumLog extends Struct {325 readonly address: H160;326 readonly topics: Vec<H256>;327 readonly data: Bytes;328}329330/** @name EthereumReceiptEip658ReceiptData */331export interface EthereumReceiptEip658ReceiptData extends Struct {332 readonly statusCode: u8;333 readonly usedGas: U256;334 readonly logsBloom: EthbloomBloom;335 readonly logs: Vec<EthereumLog>;336}337338/** @name EthereumReceiptReceiptV3 */339export interface EthereumReceiptReceiptV3 extends Enum {340 readonly isLegacy: boolean;341 readonly asLegacy: EthereumReceiptEip658ReceiptData;342 readonly isEip2930: boolean;343 readonly asEip2930: EthereumReceiptEip658ReceiptData;344 readonly isEip1559: boolean;345 readonly asEip1559: EthereumReceiptEip658ReceiptData;346 readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';347}348349/** @name EthereumTransactionAccessListItem */350export interface EthereumTransactionAccessListItem extends Struct {351 readonly address: H160;352 readonly storageKeys: Vec<H256>;353}354355/** @name EthereumTransactionEip1559Transaction */356export interface EthereumTransactionEip1559Transaction extends Struct {357 readonly chainId: u64;358 readonly nonce: U256;359 readonly maxPriorityFeePerGas: U256;360 readonly maxFeePerGas: U256;361 readonly gasLimit: U256;362 readonly action: EthereumTransactionTransactionAction;363 readonly value: U256;364 readonly input: Bytes;365 readonly accessList: Vec<EthereumTransactionAccessListItem>;366 readonly oddYParity: bool;367 readonly r: H256;368 readonly s: H256;369}370371/** @name EthereumTransactionEip2930Transaction */372export interface EthereumTransactionEip2930Transaction extends Struct {373 readonly chainId: u64;374 readonly nonce: U256;375 readonly gasPrice: U256;376 readonly gasLimit: U256;377 readonly action: EthereumTransactionTransactionAction;378 readonly value: U256;379 readonly input: Bytes;380 readonly accessList: Vec<EthereumTransactionAccessListItem>;381 readonly oddYParity: bool;382 readonly r: H256;383 readonly s: H256;384}385386/** @name EthereumTransactionLegacyTransaction */387export interface EthereumTransactionLegacyTransaction extends Struct {388 readonly nonce: U256;389 readonly gasPrice: U256;390 readonly gasLimit: U256;391 readonly action: EthereumTransactionTransactionAction;392 readonly value: U256;393 readonly input: Bytes;394 readonly signature: EthereumTransactionTransactionSignature;395}396397/** @name EthereumTransactionTransactionAction */398export interface EthereumTransactionTransactionAction extends Enum {399 readonly isCall: boolean;400 readonly asCall: H160;401 readonly isCreate: boolean;402 readonly type: 'Call' | 'Create';403}404405/** @name EthereumTransactionTransactionSignature */406export interface EthereumTransactionTransactionSignature extends Struct {407 readonly v: u64;408 readonly r: H256;409 readonly s: H256;410}411412/** @name EthereumTransactionTransactionV2 */413export interface EthereumTransactionTransactionV2 extends Enum {414 readonly isLegacy: boolean;415 readonly asLegacy: EthereumTransactionLegacyTransaction;416 readonly isEip2930: boolean;417 readonly asEip2930: EthereumTransactionEip2930Transaction;418 readonly isEip1559: boolean;419 readonly asEip1559: EthereumTransactionEip1559Transaction;420 readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';421}422423/** @name EthereumTypesHashH64 */424export interface EthereumTypesHashH64 extends U8aFixed {}425426/** @name EvmCoreErrorExitError */427export interface EvmCoreErrorExitError extends Enum {428 readonly isStackUnderflow: boolean;429 readonly isStackOverflow: boolean;430 readonly isInvalidJump: boolean;431 readonly isInvalidRange: boolean;432 readonly isDesignatedInvalid: boolean;433 readonly isCallTooDeep: boolean;434 readonly isCreateCollision: boolean;435 readonly isCreateContractLimit: boolean;436 readonly isOutOfOffset: boolean;437 readonly isOutOfGas: boolean;438 readonly isOutOfFund: boolean;439 readonly isPcUnderflow: boolean;440 readonly isCreateEmpty: boolean;441 readonly isOther: boolean;442 readonly asOther: Text;443 readonly isInvalidCode: boolean;444 readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'InvalidCode';445}446447/** @name EvmCoreErrorExitFatal */448export interface EvmCoreErrorExitFatal extends Enum {449 readonly isNotSupported: boolean;450 readonly isUnhandledInterrupt: boolean;451 readonly isCallErrorAsFatal: boolean;452 readonly asCallErrorAsFatal: EvmCoreErrorExitError;453 readonly isOther: boolean;454 readonly asOther: Text;455 readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other';456}457458/** @name EvmCoreErrorExitReason */459export interface EvmCoreErrorExitReason extends Enum {460 readonly isSucceed: boolean;461 readonly asSucceed: EvmCoreErrorExitSucceed;462 readonly isError: boolean;463 readonly asError: EvmCoreErrorExitError;464 readonly isRevert: boolean;465 readonly asRevert: EvmCoreErrorExitRevert;466 readonly isFatal: boolean;467 readonly asFatal: EvmCoreErrorExitFatal;468 readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal';469}470471/** @name EvmCoreErrorExitRevert */472export interface EvmCoreErrorExitRevert extends Enum {473 readonly isReverted: boolean;474 readonly type: 'Reverted';475}476477/** @name EvmCoreErrorExitSucceed */478export interface EvmCoreErrorExitSucceed extends Enum {479 readonly isStopped: boolean;480 readonly isReturned: boolean;481 readonly isSuicided: boolean;482 readonly type: 'Stopped' | 'Returned' | 'Suicided';483}484485/** @name FpRpcTransactionStatus */486export interface FpRpcTransactionStatus extends Struct {487 readonly transactionHash: H256;488 readonly transactionIndex: u32;489 readonly from: H160;490 readonly to: Option<H160>;491 readonly contractAddress: Option<H160>;492 readonly logs: Vec<EthereumLog>;493 readonly logsBloom: EthbloomBloom;494}495496/** @name FrameSupportDispatchDispatchClass */497export interface FrameSupportDispatchDispatchClass extends Enum {498 readonly isNormal: boolean;499 readonly isOperational: boolean;500 readonly isMandatory: boolean;501 readonly type: 'Normal' | 'Operational' | 'Mandatory';502}503504/** @name FrameSupportDispatchDispatchInfo */505export interface FrameSupportDispatchDispatchInfo extends Struct {506 readonly weight: SpWeightsWeightV2Weight;507 readonly class: FrameSupportDispatchDispatchClass;508 readonly paysFee: FrameSupportDispatchPays;509}510511/** @name FrameSupportDispatchPays */512export interface FrameSupportDispatchPays extends Enum {513 readonly isYes: boolean;514 readonly isNo: boolean;515 readonly type: 'Yes' | 'No';516}517518/** @name FrameSupportDispatchPerDispatchClassU32 */519export interface FrameSupportDispatchPerDispatchClassU32 extends Struct {520 readonly normal: u32;521 readonly operational: u32;522 readonly mandatory: u32;523}524525/** @name FrameSupportDispatchPerDispatchClassWeight */526export interface FrameSupportDispatchPerDispatchClassWeight extends Struct {527 readonly normal: SpWeightsWeightV2Weight;528 readonly operational: SpWeightsWeightV2Weight;529 readonly mandatory: SpWeightsWeightV2Weight;530}531532/** @name FrameSupportDispatchPerDispatchClassWeightsPerClass */533export interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct {534 readonly normal: FrameSystemLimitsWeightsPerClass;535 readonly operational: FrameSystemLimitsWeightsPerClass;536 readonly mandatory: FrameSystemLimitsWeightsPerClass;537}538539/** @name FrameSupportPalletId */540export interface FrameSupportPalletId extends U8aFixed {}541542/** @name FrameSupportTokensMiscBalanceStatus */543export interface FrameSupportTokensMiscBalanceStatus extends Enum {544 readonly isFree: boolean;545 readonly isReserved: boolean;546 readonly type: 'Free' | 'Reserved';547}548549/** @name FrameSystemAccountInfo */550export interface FrameSystemAccountInfo extends Struct {551 readonly nonce: u32;552 readonly consumers: u32;553 readonly providers: u32;554 readonly sufficients: u32;555 readonly data: PalletBalancesAccountData;556}557558/** @name FrameSystemCall */559export interface FrameSystemCall extends Enum {560 readonly isRemark: boolean;561 readonly asRemark: {562 readonly remark: Bytes;563 } & Struct;564 readonly isSetHeapPages: boolean;565 readonly asSetHeapPages: {566 readonly pages: u64;567 } & Struct;568 readonly isSetCode: boolean;569 readonly asSetCode: {570 readonly code: Bytes;571 } & Struct;572 readonly isSetCodeWithoutChecks: boolean;573 readonly asSetCodeWithoutChecks: {574 readonly code: Bytes;575 } & Struct;576 readonly isSetStorage: boolean;577 readonly asSetStorage: {578 readonly items: Vec<ITuple<[Bytes, Bytes]>>;579 } & Struct;580 readonly isKillStorage: boolean;581 readonly asKillStorage: {582 readonly keys_: Vec<Bytes>;583 } & Struct;584 readonly isKillPrefix: boolean;585 readonly asKillPrefix: {586 readonly prefix: Bytes;587 readonly subkeys: u32;588 } & Struct;589 readonly isRemarkWithEvent: boolean;590 readonly asRemarkWithEvent: {591 readonly remark: Bytes;592 } & Struct;593 readonly type: 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent';594}595596/** @name FrameSystemError */597export interface FrameSystemError extends Enum {598 readonly isInvalidSpecName: boolean;599 readonly isSpecVersionNeedsToIncrease: boolean;600 readonly isFailedToExtractRuntimeVersion: boolean;601 readonly isNonDefaultComposite: boolean;602 readonly isNonZeroRefCount: boolean;603 readonly isCallFiltered: boolean;604 readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered';605}606607/** @name FrameSystemEvent */608export interface FrameSystemEvent extends Enum {609 readonly isExtrinsicSuccess: boolean;610 readonly asExtrinsicSuccess: {611 readonly dispatchInfo: FrameSupportDispatchDispatchInfo;612 } & Struct;613 readonly isExtrinsicFailed: boolean;614 readonly asExtrinsicFailed: {615 readonly dispatchError: SpRuntimeDispatchError;616 readonly dispatchInfo: FrameSupportDispatchDispatchInfo;617 } & Struct;618 readonly isCodeUpdated: boolean;619 readonly isNewAccount: boolean;620 readonly asNewAccount: {621 readonly account: AccountId32;622 } & Struct;623 readonly isKilledAccount: boolean;624 readonly asKilledAccount: {625 readonly account: AccountId32;626 } & Struct;627 readonly isRemarked: boolean;628 readonly asRemarked: {629 readonly sender: AccountId32;630 readonly hash_: H256;631 } & Struct;632 readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked';633}634635/** @name FrameSystemEventRecord */636export interface FrameSystemEventRecord extends Struct {637 readonly phase: FrameSystemPhase;638 readonly event: Event;639 readonly topics: Vec<H256>;640}641642/** @name FrameSystemExtensionsCheckGenesis */643export interface FrameSystemExtensionsCheckGenesis extends Null {}644645/** @name FrameSystemExtensionsCheckNonce */646export interface FrameSystemExtensionsCheckNonce extends Compact<u32> {}647648/** @name FrameSystemExtensionsCheckSpecVersion */649export interface FrameSystemExtensionsCheckSpecVersion extends Null {}650651/** @name FrameSystemExtensionsCheckTxVersion */652export interface FrameSystemExtensionsCheckTxVersion extends Null {}653654/** @name FrameSystemExtensionsCheckWeight */655export interface FrameSystemExtensionsCheckWeight extends Null {}656657/** @name FrameSystemLastRuntimeUpgradeInfo */658export interface FrameSystemLastRuntimeUpgradeInfo extends Struct {659 readonly specVersion: Compact<u32>;660 readonly specName: Text;661}662663/** @name FrameSystemLimitsBlockLength */664export interface FrameSystemLimitsBlockLength extends Struct {665 readonly max: FrameSupportDispatchPerDispatchClassU32;666}667668/** @name FrameSystemLimitsBlockWeights */669export interface FrameSystemLimitsBlockWeights extends Struct {670 readonly baseBlock: SpWeightsWeightV2Weight;671 readonly maxBlock: SpWeightsWeightV2Weight;672 readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass;673}674675/** @name FrameSystemLimitsWeightsPerClass */676export interface FrameSystemLimitsWeightsPerClass extends Struct {677 readonly baseExtrinsic: SpWeightsWeightV2Weight;678 readonly maxExtrinsic: Option<SpWeightsWeightV2Weight>;679 readonly maxTotal: Option<SpWeightsWeightV2Weight>;680 readonly reserved: Option<SpWeightsWeightV2Weight>;681}682683/** @name FrameSystemPhase */684export interface FrameSystemPhase extends Enum {685 readonly isApplyExtrinsic: boolean;686 readonly asApplyExtrinsic: u32;687 readonly isFinalization: boolean;688 readonly isInitialization: boolean;689 readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization';690}691692/** @name OpalRuntimeRuntime */693export interface OpalRuntimeRuntime extends Null {}694695/** @name OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls */696export interface OpalRuntimeRuntimeCommonIdentityDisableIdentityCalls extends Null {}697698/** @name OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance */699export interface OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance extends Null {}700701/** @name OrmlTokensAccountData */702export interface OrmlTokensAccountData extends Struct {703 readonly free: u128;704 readonly reserved: u128;705 readonly frozen: u128;706}707708/** @name OrmlTokensBalanceLock */709export interface OrmlTokensBalanceLock extends Struct {710 readonly id: U8aFixed;711 readonly amount: u128;712}713714/** @name OrmlTokensModuleCall */715export interface OrmlTokensModuleCall extends Enum {716 readonly isTransfer: boolean;717 readonly asTransfer: {718 readonly dest: MultiAddress;719 readonly currencyId: PalletForeignAssetsAssetIds;720 readonly amount: Compact<u128>;721 } & Struct;722 readonly isTransferAll: boolean;723 readonly asTransferAll: {724 readonly dest: MultiAddress;725 readonly currencyId: PalletForeignAssetsAssetIds;726 readonly keepAlive: bool;727 } & Struct;728 readonly isTransferKeepAlive: boolean;729 readonly asTransferKeepAlive: {730 readonly dest: MultiAddress;731 readonly currencyId: PalletForeignAssetsAssetIds;732 readonly amount: Compact<u128>;733 } & Struct;734 readonly isForceTransfer: boolean;735 readonly asForceTransfer: {736 readonly source: MultiAddress;737 readonly dest: MultiAddress;738 readonly currencyId: PalletForeignAssetsAssetIds;739 readonly amount: Compact<u128>;740 } & Struct;741 readonly isSetBalance: boolean;742 readonly asSetBalance: {743 readonly who: MultiAddress;744 readonly currencyId: PalletForeignAssetsAssetIds;745 readonly newFree: Compact<u128>;746 readonly newReserved: Compact<u128>;747 } & Struct;748 readonly type: 'Transfer' | 'TransferAll' | 'TransferKeepAlive' | 'ForceTransfer' | 'SetBalance';749}750751/** @name OrmlTokensModuleError */752export interface OrmlTokensModuleError extends Enum {753 readonly isBalanceTooLow: boolean;754 readonly isAmountIntoBalanceFailed: boolean;755 readonly isLiquidityRestrictions: boolean;756 readonly isMaxLocksExceeded: boolean;757 readonly isKeepAlive: boolean;758 readonly isExistentialDeposit: boolean;759 readonly isDeadAccount: boolean;760 readonly isTooManyReserves: boolean;761 readonly type: 'BalanceTooLow' | 'AmountIntoBalanceFailed' | 'LiquidityRestrictions' | 'MaxLocksExceeded' | 'KeepAlive' | 'ExistentialDeposit' | 'DeadAccount' | 'TooManyReserves';762}763764/** @name OrmlTokensModuleEvent */765export interface OrmlTokensModuleEvent extends Enum {766 readonly isEndowed: boolean;767 readonly asEndowed: {768 readonly currencyId: PalletForeignAssetsAssetIds;769 readonly who: AccountId32;770 readonly amount: u128;771 } & Struct;772 readonly isDustLost: boolean;773 readonly asDustLost: {774 readonly currencyId: PalletForeignAssetsAssetIds;775 readonly who: AccountId32;776 readonly amount: u128;777 } & Struct;778 readonly isTransfer: boolean;779 readonly asTransfer: {780 readonly currencyId: PalletForeignAssetsAssetIds;781 readonly from: AccountId32;782 readonly to: AccountId32;783 readonly amount: u128;784 } & Struct;785 readonly isReserved: boolean;786 readonly asReserved: {787 readonly currencyId: PalletForeignAssetsAssetIds;788 readonly who: AccountId32;789 readonly amount: u128;790 } & Struct;791 readonly isUnreserved: boolean;792 readonly asUnreserved: {793 readonly currencyId: PalletForeignAssetsAssetIds;794 readonly who: AccountId32;795 readonly amount: u128;796 } & Struct;797 readonly isReserveRepatriated: boolean;798 readonly asReserveRepatriated: {799 readonly currencyId: PalletForeignAssetsAssetIds;800 readonly from: AccountId32;801 readonly to: AccountId32;802 readonly amount: u128;803 readonly status: FrameSupportTokensMiscBalanceStatus;804 } & Struct;805 readonly isBalanceSet: boolean;806 readonly asBalanceSet: {807 readonly currencyId: PalletForeignAssetsAssetIds;808 readonly who: AccountId32;809 readonly free: u128;810 readonly reserved: u128;811 } & Struct;812 readonly isTotalIssuanceSet: boolean;813 readonly asTotalIssuanceSet: {814 readonly currencyId: PalletForeignAssetsAssetIds;815 readonly amount: u128;816 } & Struct;817 readonly isWithdrawn: boolean;818 readonly asWithdrawn: {819 readonly currencyId: PalletForeignAssetsAssetIds;820 readonly who: AccountId32;821 readonly amount: u128;822 } & Struct;823 readonly isSlashed: boolean;824 readonly asSlashed: {825 readonly currencyId: PalletForeignAssetsAssetIds;826 readonly who: AccountId32;827 readonly freeAmount: u128;828 readonly reservedAmount: u128;829 } & Struct;830 readonly isDeposited: boolean;831 readonly asDeposited: {832 readonly currencyId: PalletForeignAssetsAssetIds;833 readonly who: AccountId32;834 readonly amount: u128;835 } & Struct;836 readonly isLockSet: boolean;837 readonly asLockSet: {838 readonly lockId: U8aFixed;839 readonly currencyId: PalletForeignAssetsAssetIds;840 readonly who: AccountId32;841 readonly amount: u128;842 } & Struct;843 readonly isLockRemoved: boolean;844 readonly asLockRemoved: {845 readonly lockId: U8aFixed;846 readonly currencyId: PalletForeignAssetsAssetIds;847 readonly who: AccountId32;848 } & Struct;849 readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'BalanceSet' | 'TotalIssuanceSet' | 'Withdrawn' | 'Slashed' | 'Deposited' | 'LockSet' | 'LockRemoved';850}851852/** @name OrmlTokensReserveData */853export interface OrmlTokensReserveData extends Struct {854 readonly id: Null;855 readonly amount: u128;856}857858/** @name OrmlVestingModuleCall */859export interface OrmlVestingModuleCall extends Enum {860 readonly isClaim: boolean;861 readonly isVestedTransfer: boolean;862 readonly asVestedTransfer: {863 readonly dest: MultiAddress;864 readonly schedule: OrmlVestingVestingSchedule;865 } & Struct;866 readonly isUpdateVestingSchedules: boolean;867 readonly asUpdateVestingSchedules: {868 readonly who: MultiAddress;869 readonly vestingSchedules: Vec<OrmlVestingVestingSchedule>;870 } & Struct;871 readonly isClaimFor: boolean;872 readonly asClaimFor: {873 readonly dest: MultiAddress;874 } & Struct;875 readonly type: 'Claim' | 'VestedTransfer' | 'UpdateVestingSchedules' | 'ClaimFor';876}877878/** @name OrmlVestingModuleError */879export interface OrmlVestingModuleError extends Enum {880 readonly isZeroVestingPeriod: boolean;881 readonly isZeroVestingPeriodCount: boolean;882 readonly isInsufficientBalanceToLock: boolean;883 readonly isTooManyVestingSchedules: boolean;884 readonly isAmountLow: boolean;885 readonly isMaxVestingSchedulesExceeded: boolean;886 readonly type: 'ZeroVestingPeriod' | 'ZeroVestingPeriodCount' | 'InsufficientBalanceToLock' | 'TooManyVestingSchedules' | 'AmountLow' | 'MaxVestingSchedulesExceeded';887}888889/** @name OrmlVestingModuleEvent */890export interface OrmlVestingModuleEvent extends Enum {891 readonly isVestingScheduleAdded: boolean;892 readonly asVestingScheduleAdded: {893 readonly from: AccountId32;894 readonly to: AccountId32;895 readonly vestingSchedule: OrmlVestingVestingSchedule;896 } & Struct;897 readonly isClaimed: boolean;898 readonly asClaimed: {899 readonly who: AccountId32;900 readonly amount: u128;901 } & Struct;902 readonly isVestingSchedulesUpdated: boolean;903 readonly asVestingSchedulesUpdated: {904 readonly who: AccountId32;905 } & Struct;906 readonly type: 'VestingScheduleAdded' | 'Claimed' | 'VestingSchedulesUpdated';907}908909/** @name OrmlVestingVestingSchedule */910export interface OrmlVestingVestingSchedule extends Struct {911 readonly start: u32;912 readonly period: u32;913 readonly periodCount: u32;914 readonly perPeriod: Compact<u128>;915}916917/** @name OrmlXtokensModuleCall */918export interface OrmlXtokensModuleCall extends Enum {919 readonly isTransfer: boolean;920 readonly asTransfer: {921 readonly currencyId: PalletForeignAssetsAssetIds;922 readonly amount: u128;923 readonly dest: XcmVersionedMultiLocation;924 readonly destWeightLimit: XcmV2WeightLimit;925 } & Struct;926 readonly isTransferMultiasset: boolean;927 readonly asTransferMultiasset: {928 readonly asset: XcmVersionedMultiAsset;929 readonly dest: XcmVersionedMultiLocation;930 readonly destWeightLimit: XcmV2WeightLimit;931 } & Struct;932 readonly isTransferWithFee: boolean;933 readonly asTransferWithFee: {934 readonly currencyId: PalletForeignAssetsAssetIds;935 readonly amount: u128;936 readonly fee: u128;937 readonly dest: XcmVersionedMultiLocation;938 readonly destWeightLimit: XcmV2WeightLimit;939 } & Struct;940 readonly isTransferMultiassetWithFee: boolean;941 readonly asTransferMultiassetWithFee: {942 readonly asset: XcmVersionedMultiAsset;943 readonly fee: XcmVersionedMultiAsset;944 readonly dest: XcmVersionedMultiLocation;945 readonly destWeightLimit: XcmV2WeightLimit;946 } & Struct;947 readonly isTransferMulticurrencies: boolean;948 readonly asTransferMulticurrencies: {949 readonly currencies: Vec<ITuple<[PalletForeignAssetsAssetIds, u128]>>;950 readonly feeItem: u32;951 readonly dest: XcmVersionedMultiLocation;952 readonly destWeightLimit: XcmV2WeightLimit;953 } & Struct;954 readonly isTransferMultiassets: boolean;955 readonly asTransferMultiassets: {956 readonly assets: XcmVersionedMultiAssets;957 readonly feeItem: u32;958 readonly dest: XcmVersionedMultiLocation;959 readonly destWeightLimit: XcmV2WeightLimit;960 } & Struct;961 readonly type: 'Transfer' | 'TransferMultiasset' | 'TransferWithFee' | 'TransferMultiassetWithFee' | 'TransferMulticurrencies' | 'TransferMultiassets';962}963964/** @name OrmlXtokensModuleError */965export interface OrmlXtokensModuleError extends Enum {966 readonly isAssetHasNoReserve: boolean;967 readonly isNotCrossChainTransfer: boolean;968 readonly isInvalidDest: boolean;969 readonly isNotCrossChainTransferableCurrency: boolean;970 readonly isUnweighableMessage: boolean;971 readonly isXcmExecutionFailed: boolean;972 readonly isCannotReanchor: boolean;973 readonly isInvalidAncestry: boolean;974 readonly isInvalidAsset: boolean;975 readonly isDestinationNotInvertible: boolean;976 readonly isBadVersion: boolean;977 readonly isDistinctReserveForAssetAndFee: boolean;978 readonly isZeroFee: boolean;979 readonly isZeroAmount: boolean;980 readonly isTooManyAssetsBeingSent: boolean;981 readonly isAssetIndexNonExistent: boolean;982 readonly isFeeNotEnough: boolean;983 readonly isNotSupportedMultiLocation: boolean;984 readonly isMinXcmFeeNotDefined: boolean;985 readonly type: 'AssetHasNoReserve' | 'NotCrossChainTransfer' | 'InvalidDest' | 'NotCrossChainTransferableCurrency' | 'UnweighableMessage' | 'XcmExecutionFailed' | 'CannotReanchor' | 'InvalidAncestry' | 'InvalidAsset' | 'DestinationNotInvertible' | 'BadVersion' | 'DistinctReserveForAssetAndFee' | 'ZeroFee' | 'ZeroAmount' | 'TooManyAssetsBeingSent' | 'AssetIndexNonExistent' | 'FeeNotEnough' | 'NotSupportedMultiLocation' | 'MinXcmFeeNotDefined';986}987988/** @name OrmlXtokensModuleEvent */989export interface OrmlXtokensModuleEvent extends Enum {990 readonly isTransferredMultiAssets: boolean;991 readonly asTransferredMultiAssets: {992 readonly sender: AccountId32;993 readonly assets: XcmV1MultiassetMultiAssets;994 readonly fee: XcmV1MultiAsset;995 readonly dest: XcmV1MultiLocation;996 } & Struct;997 readonly type: 'TransferredMultiAssets';998}9991000/** @name PalletAppPromotionCall */1001export interface PalletAppPromotionCall extends Enum {1002 readonly isSetAdminAddress: boolean;1003 readonly asSetAdminAddress: {1004 readonly admin: PalletEvmAccountBasicCrossAccountIdRepr;1005 } & Struct;1006 readonly isStake: boolean;1007 readonly asStake: {1008 readonly amount: u128;1009 } & Struct;1010 readonly isUnstake: boolean;1011 readonly isSponsorCollection: boolean;1012 readonly asSponsorCollection: {1013 readonly collectionId: u32;1014 } & Struct;1015 readonly isStopSponsoringCollection: boolean;1016 readonly asStopSponsoringCollection: {1017 readonly collectionId: u32;1018 } & Struct;1019 readonly isSponsorContract: boolean;1020 readonly asSponsorContract: {1021 readonly contractId: H160;1022 } & Struct;1023 readonly isStopSponsoringContract: boolean;1024 readonly asStopSponsoringContract: {1025 readonly contractId: H160;1026 } & Struct;1027 readonly isPayoutStakers: boolean;1028 readonly asPayoutStakers: {1029 readonly stakersNumber: Option<u8>;1030 } & Struct;1031 readonly type: 'SetAdminAddress' | 'Stake' | 'Unstake' | 'SponsorCollection' | 'StopSponsoringCollection' | 'SponsorContract' | 'StopSponsoringContract' | 'PayoutStakers';1032}10331034/** @name PalletAppPromotionError */1035export interface PalletAppPromotionError extends Enum {1036 readonly isAdminNotSet: boolean;1037 readonly isNoPermission: boolean;1038 readonly isNotSufficientFunds: boolean;1039 readonly isPendingForBlockOverflow: boolean;1040 readonly isSponsorNotSet: boolean;1041 readonly isIncorrectLockedBalanceOperation: boolean;1042 readonly type: 'AdminNotSet' | 'NoPermission' | 'NotSufficientFunds' | 'PendingForBlockOverflow' | 'SponsorNotSet' | 'IncorrectLockedBalanceOperation';1043}10441045/** @name PalletAppPromotionEvent */1046export interface PalletAppPromotionEvent extends Enum {1047 readonly isStakingRecalculation: boolean;1048 readonly asStakingRecalculation: ITuple<[AccountId32, u128, u128]>;1049 readonly isStake: boolean;1050 readonly asStake: ITuple<[AccountId32, u128]>;1051 readonly isUnstake: boolean;1052 readonly asUnstake: ITuple<[AccountId32, u128]>;1053 readonly isSetAdmin: boolean;1054 readonly asSetAdmin: AccountId32;1055 readonly type: 'StakingRecalculation' | 'Stake' | 'Unstake' | 'SetAdmin';1056}10571058/** @name PalletBalancesAccountData */1059export interface PalletBalancesAccountData extends Struct {1060 readonly free: u128;1061 readonly reserved: u128;1062 readonly miscFrozen: u128;1063 readonly feeFrozen: u128;1064}10651066/** @name PalletBalancesBalanceLock */1067export interface PalletBalancesBalanceLock extends Struct {1068 readonly id: U8aFixed;1069 readonly amount: u128;1070 readonly reasons: PalletBalancesReasons;1071}10721073/** @name PalletBalancesCall */1074export interface PalletBalancesCall extends Enum {1075 readonly isTransfer: boolean;1076 readonly asTransfer: {1077 readonly dest: MultiAddress;1078 readonly value: Compact<u128>;1079 } & Struct;1080 readonly isSetBalance: boolean;1081 readonly asSetBalance: {1082 readonly who: MultiAddress;1083 readonly newFree: Compact<u128>;1084 readonly newReserved: Compact<u128>;1085 } & Struct;1086 readonly isForceTransfer: boolean;1087 readonly asForceTransfer: {1088 readonly source: MultiAddress;1089 readonly dest: MultiAddress;1090 readonly value: Compact<u128>;1091 } & Struct;1092 readonly isTransferKeepAlive: boolean;1093 readonly asTransferKeepAlive: {1094 readonly dest: MultiAddress;1095 readonly value: Compact<u128>;1096 } & Struct;1097 readonly isTransferAll: boolean;1098 readonly asTransferAll: {1099 readonly dest: MultiAddress;1100 readonly keepAlive: bool;1101 } & Struct;1102 readonly isForceUnreserve: boolean;1103 readonly asForceUnreserve: {1104 readonly who: MultiAddress;1105 readonly amount: u128;1106 } & Struct;1107 readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve';1108}11091110/** @name PalletBalancesError */1111export interface PalletBalancesError extends Enum {1112 readonly isVestingBalance: boolean;1113 readonly isLiquidityRestrictions: boolean;1114 readonly isInsufficientBalance: boolean;1115 readonly isExistentialDeposit: boolean;1116 readonly isKeepAlive: boolean;1117 readonly isExistingVestingSchedule: boolean;1118 readonly isDeadAccount: boolean;1119 readonly isTooManyReserves: boolean;1120 readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves';1121}11221123/** @name PalletBalancesEvent */1124export interface PalletBalancesEvent extends Enum {1125 readonly isEndowed: boolean;1126 readonly asEndowed: {1127 readonly account: AccountId32;1128 readonly freeBalance: u128;1129 } & Struct;1130 readonly isDustLost: boolean;1131 readonly asDustLost: {1132 readonly account: AccountId32;1133 readonly amount: u128;1134 } & Struct;1135 readonly isTransfer: boolean;1136 readonly asTransfer: {1137 readonly from: AccountId32;1138 readonly to: AccountId32;1139 readonly amount: u128;1140 } & Struct;1141 readonly isBalanceSet: boolean;1142 readonly asBalanceSet: {1143 readonly who: AccountId32;1144 readonly free: u128;1145 readonly reserved: u128;1146 } & Struct;1147 readonly isReserved: boolean;1148 readonly asReserved: {1149 readonly who: AccountId32;1150 readonly amount: u128;1151 } & Struct;1152 readonly isUnreserved: boolean;1153 readonly asUnreserved: {1154 readonly who: AccountId32;1155 readonly amount: u128;1156 } & Struct;1157 readonly isReserveRepatriated: boolean;1158 readonly asReserveRepatriated: {1159 readonly from: AccountId32;1160 readonly to: AccountId32;1161 readonly amount: u128;1162 readonly destinationStatus: FrameSupportTokensMiscBalanceStatus;1163 } & Struct;1164 readonly isDeposit: boolean;1165 readonly asDeposit: {1166 readonly who: AccountId32;1167 readonly amount: u128;1168 } & Struct;1169 readonly isWithdraw: boolean;1170 readonly asWithdraw: {1171 readonly who: AccountId32;1172 readonly amount: u128;1173 } & Struct;1174 readonly isSlashed: boolean;1175 readonly asSlashed: {1176 readonly who: AccountId32;1177 readonly amount: u128;1178 } & Struct;1179 readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed';1180}11811182/** @name PalletBalancesReasons */1183export interface PalletBalancesReasons extends Enum {1184 readonly isFee: boolean;1185 readonly isMisc: boolean;1186 readonly isAll: boolean;1187 readonly type: 'Fee' | 'Misc' | 'All';1188}11891190/** @name PalletBalancesReserveData */1191export interface PalletBalancesReserveData extends Struct {1192 readonly id: U8aFixed;1193 readonly amount: u128;1194}11951196/** @name PalletCommonError */1197export interface PalletCommonError extends Enum {1198 readonly isCollectionNotFound: boolean;1199 readonly isMustBeTokenOwner: boolean;1200 readonly isNoPermission: boolean;1201 readonly isCantDestroyNotEmptyCollection: boolean;1202 readonly isPublicMintingNotAllowed: boolean;1203 readonly isAddressNotInAllowlist: boolean;1204 readonly isCollectionNameLimitExceeded: boolean;1205 readonly isCollectionDescriptionLimitExceeded: boolean;1206 readonly isCollectionTokenPrefixLimitExceeded: boolean;1207 readonly isTotalCollectionsLimitExceeded: boolean;1208 readonly isCollectionAdminCountExceeded: boolean;1209 readonly isCollectionLimitBoundsExceeded: boolean;1210 readonly isOwnerPermissionsCantBeReverted: boolean;1211 readonly isTransferNotAllowed: boolean;1212 readonly isAccountTokenLimitExceeded: boolean;1213 readonly isCollectionTokenLimitExceeded: boolean;1214 readonly isMetadataFlagFrozen: boolean;1215 readonly isTokenNotFound: boolean;1216 readonly isTokenValueTooLow: boolean;1217 readonly isApprovedValueTooLow: boolean;1218 readonly isCantApproveMoreThanOwned: boolean;1219 readonly isAddressIsNotEthMirror: boolean;1220 readonly isAddressIsZero: boolean;1221 readonly isUnsupportedOperation: boolean;1222 readonly isNotSufficientFounds: boolean;1223 readonly isUserIsNotAllowedToNest: boolean;1224 readonly isSourceCollectionIsNotAllowedToNest: boolean;1225 readonly isCollectionFieldSizeExceeded: boolean;1226 readonly isNoSpaceForProperty: boolean;1227 readonly isPropertyLimitReached: boolean;1228 readonly isPropertyKeyIsTooLong: boolean;1229 readonly isInvalidCharacterInPropertyKey: boolean;1230 readonly isEmptyPropertyKey: boolean;1231 readonly isCollectionIsExternal: boolean;1232 readonly isCollectionIsInternal: boolean;1233 readonly isConfirmSponsorshipFail: boolean;1234 readonly isUserIsNotCollectionAdmin: boolean;1235 readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'CantDestroyNotEmptyCollection' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsNotEthMirror' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'UserIsNotAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey' | 'CollectionIsExternal' | 'CollectionIsInternal' | 'ConfirmSponsorshipFail' | 'UserIsNotCollectionAdmin';1236}12371238/** @name PalletCommonEvent */1239export interface PalletCommonEvent extends Enum {1240 readonly isCollectionCreated: boolean;1241 readonly asCollectionCreated: ITuple<[u32, u8, AccountId32]>;1242 readonly isCollectionDestroyed: boolean;1243 readonly asCollectionDestroyed: u32;1244 readonly isItemCreated: boolean;1245 readonly asItemCreated: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;1246 readonly isItemDestroyed: boolean;1247 readonly asItemDestroyed: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;1248 readonly isTransfer: boolean;1249 readonly asTransfer: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;1250 readonly isApproved: boolean;1251 readonly asApproved: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;1252 readonly isApprovedForAll: boolean;1253 readonly asApprovedForAll: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, bool]>;1254 readonly isCollectionPropertySet: boolean;1255 readonly asCollectionPropertySet: ITuple<[u32, Bytes]>;1256 readonly isCollectionPropertyDeleted: boolean;1257 readonly asCollectionPropertyDeleted: ITuple<[u32, Bytes]>;1258 readonly isTokenPropertySet: boolean;1259 readonly asTokenPropertySet: ITuple<[u32, u32, Bytes]>;1260 readonly isTokenPropertyDeleted: boolean;1261 readonly asTokenPropertyDeleted: ITuple<[u32, u32, Bytes]>;1262 readonly isPropertyPermissionSet: boolean;1263 readonly asPropertyPermissionSet: ITuple<[u32, Bytes]>;1264 readonly isAllowListAddressAdded: boolean;1265 readonly asAllowListAddressAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;1266 readonly isAllowListAddressRemoved: boolean;1267 readonly asAllowListAddressRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;1268 readonly isCollectionAdminAdded: boolean;1269 readonly asCollectionAdminAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;1270 readonly isCollectionAdminRemoved: boolean;1271 readonly asCollectionAdminRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;1272 readonly isCollectionLimitSet: boolean;1273 readonly asCollectionLimitSet: u32;1274 readonly isCollectionOwnerChanged: boolean;1275 readonly asCollectionOwnerChanged: ITuple<[u32, AccountId32]>;1276 readonly isCollectionPermissionSet: boolean;1277 readonly asCollectionPermissionSet: u32;1278 readonly isCollectionSponsorSet: boolean;1279 readonly asCollectionSponsorSet: ITuple<[u32, AccountId32]>;1280 readonly isSponsorshipConfirmed: boolean;1281 readonly asSponsorshipConfirmed: ITuple<[u32, AccountId32]>;1282 readonly isCollectionSponsorRemoved: boolean;1283 readonly asCollectionSponsorRemoved: u32;1284 readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'ApprovedForAll' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet' | 'AllowListAddressAdded' | 'AllowListAddressRemoved' | 'CollectionAdminAdded' | 'CollectionAdminRemoved' | 'CollectionLimitSet' | 'CollectionOwnerChanged' | 'CollectionPermissionSet' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionSponsorRemoved';1285}12861287/** @name PalletConfigurationAppPromotionConfiguration */1288export interface PalletConfigurationAppPromotionConfiguration extends Struct {1289 readonly recalculationInterval: Option<u32>;1290 readonly pendingInterval: Option<u32>;1291 readonly intervalIncome: Option<Perbill>;1292 readonly maxStakersPerCalculation: Option<u8>;1293}12941295/** @name PalletConfigurationCall */1296export interface PalletConfigurationCall extends Enum {1297 readonly isSetWeightToFeeCoefficientOverride: boolean;1298 readonly asSetWeightToFeeCoefficientOverride: {1299 readonly coeff: Option<u64>;1300 } & Struct;1301 readonly isSetMinGasPriceOverride: boolean;1302 readonly asSetMinGasPriceOverride: {1303 readonly coeff: Option<u64>;1304 } & Struct;1305 readonly isSetXcmAllowedLocations: boolean;1306 readonly asSetXcmAllowedLocations: {1307 readonly locations: Option<Vec<XcmV1MultiLocation>>;1308 } & Struct;1309 readonly isSetAppPromotionConfigurationOverride: boolean;1310 readonly asSetAppPromotionConfigurationOverride: {1311 readonly configuration: PalletConfigurationAppPromotionConfiguration;1312 } & Struct;1313 readonly isSetCollatorSelectionDesiredCollators: boolean;1314 readonly asSetCollatorSelectionDesiredCollators: {1315 readonly max: Option<u32>;1316 } & Struct;1317 readonly isSetCollatorSelectionLicenseBond: boolean;1318 readonly asSetCollatorSelectionLicenseBond: {1319 readonly amount: Option<u128>;1320 } & Struct;1321 readonly isSetCollatorSelectionKickThreshold: boolean;1322 readonly asSetCollatorSelectionKickThreshold: {1323 readonly threshold: Option<u32>;1324 } & Struct;1325 readonly type: 'SetWeightToFeeCoefficientOverride' | 'SetMinGasPriceOverride' | 'SetXcmAllowedLocations' | 'SetAppPromotionConfigurationOverride' | 'SetCollatorSelectionDesiredCollators' | 'SetCollatorSelectionLicenseBond' | 'SetCollatorSelectionKickThreshold';1326}13271328/** @name PalletConfigurationError */1329export interface PalletConfigurationError extends Enum {1330 readonly isInconsistentConfiguration: boolean;1331 readonly type: 'InconsistentConfiguration';1332}13331334/** @name PalletConfigurationEvent */1335export interface PalletConfigurationEvent extends Enum {1336 readonly isNewDesiredCollators: boolean;1337 readonly asNewDesiredCollators: {1338 readonly desiredCollators: Option<u32>;1339 } & Struct;1340 readonly isNewCollatorLicenseBond: boolean;1341 readonly asNewCollatorLicenseBond: {1342 readonly bondCost: Option<u128>;1343 } & Struct;1344 readonly isNewCollatorKickThreshold: boolean;1345 readonly asNewCollatorKickThreshold: {1346 readonly lengthInBlocks: Option<u32>;1347 } & Struct;1348 readonly type: 'NewDesiredCollators' | 'NewCollatorLicenseBond' | 'NewCollatorKickThreshold';1349}13501351/** @name PalletEthereumCall */1352export interface PalletEthereumCall extends Enum {1353 readonly isTransact: boolean;1354 readonly asTransact: {1355 readonly transaction: EthereumTransactionTransactionV2;1356 } & Struct;1357 readonly type: 'Transact';1358}13591360/** @name PalletEthereumError */1361export interface PalletEthereumError extends Enum {1362 readonly isInvalidSignature: boolean;1363 readonly isPreLogExists: boolean;1364 readonly type: 'InvalidSignature' | 'PreLogExists';1365}13661367/** @name PalletEthereumEvent */1368export interface PalletEthereumEvent extends Enum {1369 readonly isExecuted: boolean;1370 readonly asExecuted: {1371 readonly from: H160;1372 readonly to: H160;1373 readonly transactionHash: H256;1374 readonly exitReason: EvmCoreErrorExitReason;1375 } & Struct;1376 readonly type: 'Executed';1377}13781379/** @name PalletEthereumFakeTransactionFinalizer */1380export interface PalletEthereumFakeTransactionFinalizer extends Null {}13811382/** @name PalletEvmAccountBasicCrossAccountIdRepr */1383export interface PalletEvmAccountBasicCrossAccountIdRepr extends Enum {1384 readonly isSubstrate: boolean;1385 readonly asSubstrate: AccountId32;1386 readonly isEthereum: boolean;1387 readonly asEthereum: H160;1388 readonly type: 'Substrate' | 'Ethereum';1389}13901391/** @name PalletEvmCall */1392export interface PalletEvmCall extends Enum {1393 readonly isWithdraw: boolean;1394 readonly asWithdraw: {1395 readonly address: H160;1396 readonly value: u128;1397 } & Struct;1398 readonly isCall: boolean;1399 readonly asCall: {1400 readonly source: H160;1401 readonly target: H160;1402 readonly input: Bytes;1403 readonly value: U256;1404 readonly gasLimit: u64;1405 readonly maxFeePerGas: U256;1406 readonly maxPriorityFeePerGas: Option<U256>;1407 readonly nonce: Option<U256>;1408 readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1409 } & Struct;1410 readonly isCreate: boolean;1411 readonly asCreate: {1412 readonly source: H160;1413 readonly init: Bytes;1414 readonly value: U256;1415 readonly gasLimit: u64;1416 readonly maxFeePerGas: U256;1417 readonly maxPriorityFeePerGas: Option<U256>;1418 readonly nonce: Option<U256>;1419 readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1420 } & Struct;1421 readonly isCreate2: boolean;1422 readonly asCreate2: {1423 readonly source: H160;1424 readonly init: Bytes;1425 readonly salt: H256;1426 readonly value: U256;1427 readonly gasLimit: u64;1428 readonly maxFeePerGas: U256;1429 readonly maxPriorityFeePerGas: Option<U256>;1430 readonly nonce: Option<U256>;1431 readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1432 } & Struct;1433 readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2';1434}14351436/** @name PalletEvmCoderSubstrateError */1437export interface PalletEvmCoderSubstrateError extends Enum {1438 readonly isOutOfGas: boolean;1439 readonly isOutOfFund: boolean;1440 readonly type: 'OutOfGas' | 'OutOfFund';1441}14421443/** @name PalletEvmContractHelpersError */1444export interface PalletEvmContractHelpersError extends Enum {1445 readonly isNoPermission: boolean;1446 readonly isNoPendingSponsor: boolean;1447 readonly isTooManyMethodsHaveSponsoredLimit: boolean;1448 readonly type: 'NoPermission' | 'NoPendingSponsor' | 'TooManyMethodsHaveSponsoredLimit';1449}14501451/** @name PalletEvmContractHelpersEvent */1452export interface PalletEvmContractHelpersEvent extends Enum {1453 readonly isContractSponsorSet: boolean;1454 readonly asContractSponsorSet: ITuple<[H160, AccountId32]>;1455 readonly isContractSponsorshipConfirmed: boolean;1456 readonly asContractSponsorshipConfirmed: ITuple<[H160, AccountId32]>;1457 readonly isContractSponsorRemoved: boolean;1458 readonly asContractSponsorRemoved: H160;1459 readonly type: 'ContractSponsorSet' | 'ContractSponsorshipConfirmed' | 'ContractSponsorRemoved';1460}14611462/** @name PalletEvmContractHelpersSponsoringModeT */1463export interface PalletEvmContractHelpersSponsoringModeT extends Enum {1464 readonly isDisabled: boolean;1465 readonly isAllowlisted: boolean;1466 readonly isGenerous: boolean;1467 readonly type: 'Disabled' | 'Allowlisted' | 'Generous';1468}14691470/** @name PalletEvmError */1471export interface PalletEvmError extends Enum {1472 readonly isBalanceLow: boolean;1473 readonly isFeeOverflow: boolean;1474 readonly isPaymentOverflow: boolean;1475 readonly isWithdrawFailed: boolean;1476 readonly isGasPriceTooLow: boolean;1477 readonly isInvalidNonce: boolean;1478 readonly isGasLimitTooLow: boolean;1479 readonly isGasLimitTooHigh: boolean;1480 readonly isUndefined: boolean;1481 readonly isReentrancy: boolean;1482 readonly isTransactionMustComeFromEOA: boolean;1483 readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce' | 'GasLimitTooLow' | 'GasLimitTooHigh' | 'Undefined' | 'Reentrancy' | 'TransactionMustComeFromEOA';1484}14851486/** @name PalletEvmEvent */1487export interface PalletEvmEvent extends Enum {1488 readonly isLog: boolean;1489 readonly asLog: {1490 readonly log: EthereumLog;1491 } & Struct;1492 readonly isCreated: boolean;1493 readonly asCreated: {1494 readonly address: H160;1495 } & Struct;1496 readonly isCreatedFailed: boolean;1497 readonly asCreatedFailed: {1498 readonly address: H160;1499 } & Struct;1500 readonly isExecuted: boolean;1501 readonly asExecuted: {1502 readonly address: H160;1503 } & Struct;1504 readonly isExecutedFailed: boolean;1505 readonly asExecutedFailed: {1506 readonly address: H160;1507 } & Struct;1508 readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed';1509}15101511/** @name PalletEvmMigrationCall */1512export interface PalletEvmMigrationCall extends Enum {1513 readonly isBegin: boolean;1514 readonly asBegin: {1515 readonly address: H160;1516 } & Struct;1517 readonly isSetData: boolean;1518 readonly asSetData: {1519 readonly address: H160;1520 readonly data: Vec<ITuple<[H256, H256]>>;1521 } & Struct;1522 readonly isFinish: boolean;1523 readonly asFinish: {1524 readonly address: H160;1525 readonly code: Bytes;1526 } & Struct;1527 readonly isInsertEthLogs: boolean;1528 readonly asInsertEthLogs: {1529 readonly logs: Vec<EthereumLog>;1530 } & Struct;1531 readonly isInsertEvents: boolean;1532 readonly asInsertEvents: {1533 readonly events: Vec<Bytes>;1534 } & Struct;1535 readonly type: 'Begin' | 'SetData' | 'Finish' | 'InsertEthLogs' | 'InsertEvents';1536}15371538/** @name PalletEvmMigrationError */1539export interface PalletEvmMigrationError extends Enum {1540 readonly isAccountNotEmpty: boolean;1541 readonly isAccountIsNotMigrating: boolean;1542 readonly isBadEvent: boolean;1543 readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating' | 'BadEvent';1544}15451546/** @name PalletEvmMigrationEvent */1547export interface PalletEvmMigrationEvent extends Enum {1548 readonly isTestEvent: boolean;1549 readonly type: 'TestEvent';1550}15511552/** @name PalletForeignAssetsAssetIds */1553export interface PalletForeignAssetsAssetIds extends Enum {1554 readonly isForeignAssetId: boolean;1555 readonly asForeignAssetId: u32;1556 readonly isNativeAssetId: boolean;1557 readonly asNativeAssetId: PalletForeignAssetsNativeCurrency;1558 readonly type: 'ForeignAssetId' | 'NativeAssetId';1559}15601561/** @name PalletForeignAssetsModuleAssetMetadata */1562export interface PalletForeignAssetsModuleAssetMetadata extends Struct {1563 readonly name: Bytes;1564 readonly symbol: Bytes;1565 readonly decimals: u8;1566 readonly minimalBalance: u128;1567}15681569/** @name PalletForeignAssetsModuleCall */1570export interface PalletForeignAssetsModuleCall extends Enum {1571 readonly isRegisterForeignAsset: boolean;1572 readonly asRegisterForeignAsset: {1573 readonly owner: AccountId32;1574 readonly location: XcmVersionedMultiLocation;1575 readonly metadata: PalletForeignAssetsModuleAssetMetadata;1576 } & Struct;1577 readonly isUpdateForeignAsset: boolean;1578 readonly asUpdateForeignAsset: {1579 readonly foreignAssetId: u32;1580 readonly location: XcmVersionedMultiLocation;1581 readonly metadata: PalletForeignAssetsModuleAssetMetadata;1582 } & Struct;1583 readonly type: 'RegisterForeignAsset' | 'UpdateForeignAsset';1584}15851586/** @name PalletForeignAssetsModuleError */1587export interface PalletForeignAssetsModuleError extends Enum {1588 readonly isBadLocation: boolean;1589 readonly isMultiLocationExisted: boolean;1590 readonly isAssetIdNotExists: boolean;1591 readonly isAssetIdExisted: boolean;1592 readonly type: 'BadLocation' | 'MultiLocationExisted' | 'AssetIdNotExists' | 'AssetIdExisted';1593}15941595/** @name PalletForeignAssetsModuleEvent */1596export interface PalletForeignAssetsModuleEvent extends Enum {1597 readonly isForeignAssetRegistered: boolean;1598 readonly asForeignAssetRegistered: {1599 readonly assetId: u32;1600 readonly assetAddress: XcmV1MultiLocation;1601 readonly metadata: PalletForeignAssetsModuleAssetMetadata;1602 } & Struct;1603 readonly isForeignAssetUpdated: boolean;1604 readonly asForeignAssetUpdated: {1605 readonly assetId: u32;1606 readonly assetAddress: XcmV1MultiLocation;1607 readonly metadata: PalletForeignAssetsModuleAssetMetadata;1608 } & Struct;1609 readonly isAssetRegistered: boolean;1610 readonly asAssetRegistered: {1611 readonly assetId: PalletForeignAssetsAssetIds;1612 readonly metadata: PalletForeignAssetsModuleAssetMetadata;1613 } & Struct;1614 readonly isAssetUpdated: boolean;1615 readonly asAssetUpdated: {1616 readonly assetId: PalletForeignAssetsAssetIds;1617 readonly metadata: PalletForeignAssetsModuleAssetMetadata;1618 } & Struct;1619 readonly type: 'ForeignAssetRegistered' | 'ForeignAssetUpdated' | 'AssetRegistered' | 'AssetUpdated';1620}16211622/** @name PalletForeignAssetsNativeCurrency */1623export interface PalletForeignAssetsNativeCurrency extends Enum {1624 readonly isHere: boolean;1625 readonly isParent: boolean;1626 readonly type: 'Here' | 'Parent';1627}16281629/** @name PalletFungibleError */1630export interface PalletFungibleError extends Enum {1631 readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean;1632 readonly isFungibleItemsHaveNoId: boolean;1633 readonly isFungibleItemsDontHaveData: boolean;1634 readonly isFungibleDisallowsNesting: boolean;1635 readonly isSettingPropertiesNotAllowed: boolean;1636 readonly isSettingAllowanceForAllNotAllowed: boolean;1637 readonly isFungibleTokensAreAlwaysValid: boolean;1638 readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed' | 'SettingAllowanceForAllNotAllowed' | 'FungibleTokensAreAlwaysValid';1639}16401641/** @name PalletInflationCall */1642export interface PalletInflationCall extends Enum {1643 readonly isStartInflation: boolean;1644 readonly asStartInflation: {1645 readonly inflationStartRelayBlock: u32;1646 } & Struct;1647 readonly type: 'StartInflation';1648}16491650/** @name PalletMaintenanceCall */1651export interface PalletMaintenanceCall extends Enum {1652 readonly isEnable: boolean;1653 readonly isDisable: boolean;1654 readonly type: 'Enable' | 'Disable';1655}16561657/** @name PalletMaintenanceError */1658export interface PalletMaintenanceError extends Null {}16591660/** @name PalletMaintenanceEvent */1661export interface PalletMaintenanceEvent extends Enum {1662 readonly isMaintenanceEnabled: boolean;1663 readonly isMaintenanceDisabled: boolean;1664 readonly type: 'MaintenanceEnabled' | 'MaintenanceDisabled';1665}16661667/** @name PalletNonfungibleError */1668export interface PalletNonfungibleError extends Enum {1669 readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean;1670 readonly isNonfungibleItemsHaveNoAmount: boolean;1671 readonly isCantBurnNftWithChildren: boolean;1672 readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount' | 'CantBurnNftWithChildren';1673}16741675/** @name PalletNonfungibleItemData */1676export interface PalletNonfungibleItemData extends Struct {1677 readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1678}16791680/** @name PalletRefungibleError */1681export interface PalletRefungibleError extends Enum {1682 readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;1683 readonly isWrongRefungiblePieces: boolean;1684 readonly isRepartitionWhileNotOwningAllPieces: boolean;1685 readonly isRefungibleDisallowsNesting: boolean;1686 readonly isSettingPropertiesNotAllowed: boolean;1687 readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RepartitionWhileNotOwningAllPieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';1688}16891690/** @name PalletRmrkCoreCall */1691export interface PalletRmrkCoreCall extends Enum {1692 readonly isCreateCollection: boolean;1693 readonly asCreateCollection: {1694 readonly metadata: Bytes;1695 readonly max: Option<u32>;1696 readonly symbol: Bytes;1697 } & Struct;1698 readonly isDestroyCollection: boolean;1699 readonly asDestroyCollection: {1700 readonly collectionId: u32;1701 } & Struct;1702 readonly isChangeCollectionIssuer: boolean;1703 readonly asChangeCollectionIssuer: {1704 readonly collectionId: u32;1705 readonly newIssuer: MultiAddress;1706 } & Struct;1707 readonly isLockCollection: boolean;1708 readonly asLockCollection: {1709 readonly collectionId: u32;1710 } & Struct;1711 readonly isMintNft: boolean;1712 readonly asMintNft: {1713 readonly owner: Option<AccountId32>;1714 readonly collectionId: u32;1715 readonly recipient: Option<AccountId32>;1716 readonly royaltyAmount: Option<Permill>;1717 readonly metadata: Bytes;1718 readonly transferable: bool;1719 readonly resources: Option<Vec<RmrkTraitsResourceResourceTypes>>;1720 } & Struct;1721 readonly isBurnNft: boolean;1722 readonly asBurnNft: {1723 readonly collectionId: u32;1724 readonly nftId: u32;1725 readonly maxBurns: u32;1726 } & Struct;1727 readonly isSend: boolean;1728 readonly asSend: {1729 readonly rmrkCollectionId: u32;1730 readonly rmrkNftId: u32;1731 readonly newOwner: RmrkTraitsNftAccountIdOrCollectionNftTuple;1732 } & Struct;1733 readonly isAcceptNft: boolean;1734 readonly asAcceptNft: {1735 readonly rmrkCollectionId: u32;1736 readonly rmrkNftId: u32;1737 readonly newOwner: RmrkTraitsNftAccountIdOrCollectionNftTuple;1738 } & Struct;1739 readonly isRejectNft: boolean;1740 readonly asRejectNft: {1741 readonly rmrkCollectionId: u32;1742 readonly rmrkNftId: u32;1743 } & Struct;1744 readonly isAcceptResource: boolean;1745 readonly asAcceptResource: {1746 readonly rmrkCollectionId: u32;1747 readonly rmrkNftId: u32;1748 readonly resourceId: u32;1749 } & Struct;1750 readonly isAcceptResourceRemoval: boolean;1751 readonly asAcceptResourceRemoval: {1752 readonly rmrkCollectionId: u32;1753 readonly rmrkNftId: u32;1754 readonly resourceId: u32;1755 } & Struct;1756 readonly isSetProperty: boolean;1757 readonly asSetProperty: {1758 readonly rmrkCollectionId: Compact<u32>;1759 readonly maybeNftId: Option<u32>;1760 readonly key: Bytes;1761 readonly value: Bytes;1762 } & Struct;1763 readonly isSetPriority: boolean;1764 readonly asSetPriority: {1765 readonly rmrkCollectionId: u32;1766 readonly rmrkNftId: u32;1767 readonly priorities: Vec<u32>;1768 } & Struct;1769 readonly isAddBasicResource: boolean;1770 readonly asAddBasicResource: {1771 readonly rmrkCollectionId: u32;1772 readonly nftId: u32;1773 readonly resource: RmrkTraitsResourceBasicResource;1774 } & Struct;1775 readonly isAddComposableResource: boolean;1776 readonly asAddComposableResource: {1777 readonly rmrkCollectionId: u32;1778 readonly nftId: u32;1779 readonly resource: RmrkTraitsResourceComposableResource;1780 } & Struct;1781 readonly isAddSlotResource: boolean;1782 readonly asAddSlotResource: {1783 readonly rmrkCollectionId: u32;1784 readonly nftId: u32;1785 readonly resource: RmrkTraitsResourceSlotResource;1786 } & Struct;1787 readonly isRemoveResource: boolean;1788 readonly asRemoveResource: {1789 readonly rmrkCollectionId: u32;1790 readonly nftId: u32;1791 readonly resourceId: u32;1792 } & Struct;1793 readonly type: 'CreateCollection' | 'DestroyCollection' | 'ChangeCollectionIssuer' | 'LockCollection' | 'MintNft' | 'BurnNft' | 'Send' | 'AcceptNft' | 'RejectNft' | 'AcceptResource' | 'AcceptResourceRemoval' | 'SetProperty' | 'SetPriority' | 'AddBasicResource' | 'AddComposableResource' | 'AddSlotResource' | 'RemoveResource';1794}17951796/** @name PalletRmrkCoreError */1797export interface PalletRmrkCoreError extends Enum {1798 readonly isCorruptedCollectionType: boolean;1799 readonly isRmrkPropertyKeyIsTooLong: boolean;1800 readonly isRmrkPropertyValueIsTooLong: boolean;1801 readonly isRmrkPropertyIsNotFound: boolean;1802 readonly isUnableToDecodeRmrkData: boolean;1803 readonly isCollectionNotEmpty: boolean;1804 readonly isNoAvailableCollectionId: boolean;1805 readonly isNoAvailableNftId: boolean;1806 readonly isCollectionUnknown: boolean;1807 readonly isNoPermission: boolean;1808 readonly isNonTransferable: boolean;1809 readonly isCollectionFullOrLocked: boolean;1810 readonly isResourceDoesntExist: boolean;1811 readonly isCannotSendToDescendentOrSelf: boolean;1812 readonly isCannotAcceptNonOwnedNft: boolean;1813 readonly isCannotRejectNonOwnedNft: boolean;1814 readonly isCannotRejectNonPendingNft: boolean;1815 readonly isResourceNotPending: boolean;1816 readonly isNoAvailableResourceId: boolean;1817 readonly type: 'CorruptedCollectionType' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'RmrkPropertyIsNotFound' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'CannotRejectNonPendingNft' | 'ResourceNotPending' | 'NoAvailableResourceId';1818}18191820/** @name PalletRmrkCoreEvent */1821export interface PalletRmrkCoreEvent extends Enum {1822 readonly isCollectionCreated: boolean;1823 readonly asCollectionCreated: {1824 readonly issuer: AccountId32;1825 readonly collectionId: u32;1826 } & Struct;1827 readonly isCollectionDestroyed: boolean;1828 readonly asCollectionDestroyed: {1829 readonly issuer: AccountId32;1830 readonly collectionId: u32;1831 } & Struct;1832 readonly isIssuerChanged: boolean;1833 readonly asIssuerChanged: {1834 readonly oldIssuer: AccountId32;1835 readonly newIssuer: AccountId32;1836 readonly collectionId: u32;1837 } & Struct;1838 readonly isCollectionLocked: boolean;1839 readonly asCollectionLocked: {1840 readonly issuer: AccountId32;1841 readonly collectionId: u32;1842 } & Struct;1843 readonly isNftMinted: boolean;1844 readonly asNftMinted: {1845 readonly owner: AccountId32;1846 readonly collectionId: u32;1847 readonly nftId: u32;1848 } & Struct;1849 readonly isNftBurned: boolean;1850 readonly asNftBurned: {1851 readonly owner: AccountId32;1852 readonly nftId: u32;1853 } & Struct;1854 readonly isNftSent: boolean;1855 readonly asNftSent: {1856 readonly sender: AccountId32;1857 readonly recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple;1858 readonly collectionId: u32;1859 readonly nftId: u32;1860 readonly approvalRequired: bool;1861 } & Struct;1862 readonly isNftAccepted: boolean;1863 readonly asNftAccepted: {1864 readonly sender: AccountId32;1865 readonly recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple;1866 readonly collectionId: u32;1867 readonly nftId: u32;1868 } & Struct;1869 readonly isNftRejected: boolean;1870 readonly asNftRejected: {1871 readonly sender: AccountId32;1872 readonly collectionId: u32;1873 readonly nftId: u32;1874 } & Struct;1875 readonly isPropertySet: boolean;1876 readonly asPropertySet: {1877 readonly collectionId: u32;1878 readonly maybeNftId: Option<u32>;1879 readonly key: Bytes;1880 readonly value: Bytes;1881 } & Struct;1882 readonly isResourceAdded: boolean;1883 readonly asResourceAdded: {1884 readonly nftId: u32;1885 readonly resourceId: u32;1886 } & Struct;1887 readonly isResourceRemoval: boolean;1888 readonly asResourceRemoval: {1889 readonly nftId: u32;1890 readonly resourceId: u32;1891 } & Struct;1892 readonly isResourceAccepted: boolean;1893 readonly asResourceAccepted: {1894 readonly nftId: u32;1895 readonly resourceId: u32;1896 } & Struct;1897 readonly isResourceRemovalAccepted: boolean;1898 readonly asResourceRemovalAccepted: {1899 readonly nftId: u32;1900 readonly resourceId: u32;1901 } & Struct;1902 readonly isPrioritySet: boolean;1903 readonly asPrioritySet: {1904 readonly collectionId: u32;1905 readonly nftId: u32;1906 } & Struct;1907 readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'IssuerChanged' | 'CollectionLocked' | 'NftMinted' | 'NftBurned' | 'NftSent' | 'NftAccepted' | 'NftRejected' | 'PropertySet' | 'ResourceAdded' | 'ResourceRemoval' | 'ResourceAccepted' | 'ResourceRemovalAccepted' | 'PrioritySet';1908}19091910/** @name PalletRmrkEquipCall */1911export interface PalletRmrkEquipCall extends Enum {1912 readonly isCreateBase: boolean;1913 readonly asCreateBase: {1914 readonly baseType: Bytes;1915 readonly symbol: Bytes;1916 readonly parts: Vec<RmrkTraitsPartPartType>;1917 } & Struct;1918 readonly isThemeAdd: boolean;1919 readonly asThemeAdd: {1920 readonly baseId: u32;1921 readonly theme: RmrkTraitsTheme;1922 } & Struct;1923 readonly isEquippable: boolean;1924 readonly asEquippable: {1925 readonly baseId: u32;1926 readonly slotId: u32;1927 readonly equippables: RmrkTraitsPartEquippableList;1928 } & Struct;1929 readonly type: 'CreateBase' | 'ThemeAdd' | 'Equippable';1930}19311932/** @name PalletRmrkEquipError */1933export interface PalletRmrkEquipError extends Enum {1934 readonly isPermissionError: boolean;1935 readonly isNoAvailableBaseId: boolean;1936 readonly isNoAvailablePartId: boolean;1937 readonly isBaseDoesntExist: boolean;1938 readonly isNeedsDefaultThemeFirst: boolean;1939 readonly isPartDoesntExist: boolean;1940 readonly isNoEquippableOnFixedPart: boolean;1941 readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst' | 'PartDoesntExist' | 'NoEquippableOnFixedPart';1942}19431944/** @name PalletRmrkEquipEvent */1945export interface PalletRmrkEquipEvent extends Enum {1946 readonly isBaseCreated: boolean;1947 readonly asBaseCreated: {1948 readonly issuer: AccountId32;1949 readonly baseId: u32;1950 } & Struct;1951 readonly isEquippablesUpdated: boolean;1952 readonly asEquippablesUpdated: {1953 readonly baseId: u32;1954 readonly slotId: u32;1955 } & Struct;1956 readonly type: 'BaseCreated' | 'EquippablesUpdated';1957}19581959/** @name PalletStructureCall */1960export interface PalletStructureCall extends Null {}19611962/** @name PalletStructureError */1963export interface PalletStructureError extends Enum {1964 readonly isOuroborosDetected: boolean;1965 readonly isDepthLimit: boolean;1966 readonly isBreadthLimit: boolean;1967 readonly isTokenNotFound: boolean;1968 readonly type: 'OuroborosDetected' | 'DepthLimit' | 'BreadthLimit' | 'TokenNotFound';1969}19701971/** @name PalletStructureEvent */1972export interface PalletStructureEvent extends Enum {1973 readonly isExecuted: boolean;1974 readonly asExecuted: Result<Null, SpRuntimeDispatchError>;1975 readonly type: 'Executed';1976}19771978/** @name PalletSudoCall */1979export interface PalletSudoCall extends Enum {1980 readonly isSudo: boolean;1981 readonly asSudo: {1982 readonly call: Call;1983 } & Struct;1984 readonly isSudoUncheckedWeight: boolean;1985 readonly asSudoUncheckedWeight: {1986 readonly call: Call;1987 readonly weight: SpWeightsWeightV2Weight;1988 } & Struct;1989 readonly isSetKey: boolean;1990 readonly asSetKey: {1991 readonly new_: MultiAddress;1992 } & Struct;1993 readonly isSudoAs: boolean;1994 readonly asSudoAs: {1995 readonly who: MultiAddress;1996 readonly call: Call;1997 } & Struct;1998 readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs';1999}20002001/** @name PalletSudoError */2002export interface PalletSudoError extends Enum {2003 readonly isRequireSudo: boolean;2004 readonly type: 'RequireSudo';2005}20062007/** @name PalletSudoEvent */2008export interface PalletSudoEvent extends Enum {2009 readonly isSudid: boolean;2010 readonly asSudid: {2011 readonly sudoResult: Result<Null, SpRuntimeDispatchError>;2012 } & Struct;2013 readonly isKeyChanged: boolean;2014 readonly asKeyChanged: {2015 readonly oldSudoer: Option<AccountId32>;2016 } & Struct;2017 readonly isSudoAsDone: boolean;2018 readonly asSudoAsDone: {2019 readonly sudoResult: Result<Null, SpRuntimeDispatchError>;2020 } & Struct;2021 readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone';2022}20232024/** @name PalletTemplateTransactionPaymentCall */2025export interface PalletTemplateTransactionPaymentCall extends Null {}20262027/** @name PalletTemplateTransactionPaymentChargeTransactionPayment */2028export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact<u128> {}20292030/** @name PalletTestUtilsCall */2031export interface PalletTestUtilsCall extends Enum {2032 readonly isEnable: boolean;2033 readonly isSetTestValue: boolean;2034 readonly asSetTestValue: {2035 readonly value: u32;2036 } & Struct;2037 readonly isSetTestValueAndRollback: boolean;2038 readonly asSetTestValueAndRollback: {2039 readonly value: u32;2040 } & Struct;2041 readonly isIncTestValue: boolean;2042 readonly isJustTakeFee: boolean;2043 readonly isBatchAll: boolean;2044 readonly asBatchAll: {2045 readonly calls: Vec<Call>;2046 } & Struct;2047 readonly type: 'Enable' | 'SetTestValue' | 'SetTestValueAndRollback' | 'IncTestValue' | 'JustTakeFee' | 'BatchAll';2048}20492050/** @name PalletTestUtilsError */2051export interface PalletTestUtilsError extends Enum {2052 readonly isTestPalletDisabled: boolean;2053 readonly isTriggerRollback: boolean;2054 readonly type: 'TestPalletDisabled' | 'TriggerRollback';2055}20562057/** @name PalletTestUtilsEvent */2058export interface PalletTestUtilsEvent extends Enum {2059 readonly isValueIsSet: boolean;2060 readonly isShouldRollback: boolean;2061 readonly isBatchCompleted: boolean;2062 readonly type: 'ValueIsSet' | 'ShouldRollback' | 'BatchCompleted';2063}20642065/** @name PalletTimestampCall */2066export interface PalletTimestampCall extends Enum {2067 readonly isSet: boolean;2068 readonly asSet: {2069 readonly now: Compact<u64>;2070 } & Struct;2071 readonly type: 'Set';2072}20732074/** @name PalletTransactionPaymentEvent */2075export interface PalletTransactionPaymentEvent extends Enum {2076 readonly isTransactionFeePaid: boolean;2077 readonly asTransactionFeePaid: {2078 readonly who: AccountId32;2079 readonly actualFee: u128;2080 readonly tip: u128;2081 } & Struct;2082 readonly type: 'TransactionFeePaid';2083}20842085/** @name PalletTransactionPaymentReleases */2086export interface PalletTransactionPaymentReleases extends Enum {2087 readonly isV1Ancient: boolean;2088 readonly isV2: boolean;2089 readonly type: 'V1Ancient' | 'V2';2090}20912092/** @name PalletTreasuryCall */2093export interface PalletTreasuryCall extends Enum {2094 readonly isProposeSpend: boolean;2095 readonly asProposeSpend: {2096 readonly value: Compact<u128>;2097 readonly beneficiary: MultiAddress;2098 } & Struct;2099 readonly isRejectProposal: boolean;2100 readonly asRejectProposal: {2101 readonly proposalId: Compact<u32>;2102 } & Struct;2103 readonly isApproveProposal: boolean;2104 readonly asApproveProposal: {2105 readonly proposalId: Compact<u32>;2106 } & Struct;2107 readonly isSpend: boolean;2108 readonly asSpend: {2109 readonly amount: Compact<u128>;2110 readonly beneficiary: MultiAddress;2111 } & Struct;2112 readonly isRemoveApproval: boolean;2113 readonly asRemoveApproval: {2114 readonly proposalId: Compact<u32>;2115 } & Struct;2116 readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'Spend' | 'RemoveApproval';2117}21182119/** @name PalletTreasuryError */2120export interface PalletTreasuryError extends Enum {2121 readonly isInsufficientProposersBalance: boolean;2122 readonly isInvalidIndex: boolean;2123 readonly isTooManyApprovals: boolean;2124 readonly isInsufficientPermission: boolean;2125 readonly isProposalNotApproved: boolean;2126 readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'InsufficientPermission' | 'ProposalNotApproved';2127}21282129/** @name PalletTreasuryEvent */2130export interface PalletTreasuryEvent extends Enum {2131 readonly isProposed: boolean;2132 readonly asProposed: {2133 readonly proposalIndex: u32;2134 } & Struct;2135 readonly isSpending: boolean;2136 readonly asSpending: {2137 readonly budgetRemaining: u128;2138 } & Struct;2139 readonly isAwarded: boolean;2140 readonly asAwarded: {2141 readonly proposalIndex: u32;2142 readonly award: u128;2143 readonly account: AccountId32;2144 } & Struct;2145 readonly isRejected: boolean;2146 readonly asRejected: {2147 readonly proposalIndex: u32;2148 readonly slashed: u128;2149 } & Struct;2150 readonly isBurnt: boolean;2151 readonly asBurnt: {2152 readonly burntFunds: u128;2153 } & Struct;2154 readonly isRollover: boolean;2155 readonly asRollover: {2156 readonly rolloverBalance: u128;2157 } & Struct;2158 readonly isDeposit: boolean;2159 readonly asDeposit: {2160 readonly value: u128;2161 } & Struct;2162 readonly isSpendApproved: boolean;2163 readonly asSpendApproved: {2164 readonly proposalIndex: u32;2165 readonly amount: u128;2166 readonly beneficiary: AccountId32;2167 } & Struct;2168 readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit' | 'SpendApproved';2169}21702171/** @name PalletTreasuryProposal */2172export interface PalletTreasuryProposal extends Struct {2173 readonly proposer: AccountId32;2174 readonly value: u128;2175 readonly beneficiary: AccountId32;2176 readonly bond: u128;2177}21782179/** @name PalletUniqueCall */2180export interface PalletUniqueCall extends Enum {2181 readonly isCreateCollection: boolean;2182 readonly asCreateCollection: {2183 readonly collectionName: Vec<u16>;2184 readonly collectionDescription: Vec<u16>;2185 readonly tokenPrefix: Bytes;2186 readonly mode: UpDataStructsCollectionMode;2187 } & Struct;2188 readonly isCreateCollectionEx: boolean;2189 readonly asCreateCollectionEx: {2190 readonly data: UpDataStructsCreateCollectionData;2191 } & Struct;2192 readonly isDestroyCollection: boolean;2193 readonly asDestroyCollection: {2194 readonly collectionId: u32;2195 } & Struct;2196 readonly isAddToAllowList: boolean;2197 readonly asAddToAllowList: {2198 readonly collectionId: u32;2199 readonly address: PalletEvmAccountBasicCrossAccountIdRepr;2200 } & Struct;2201 readonly isRemoveFromAllowList: boolean;2202 readonly asRemoveFromAllowList: {2203 readonly collectionId: u32;2204 readonly address: PalletEvmAccountBasicCrossAccountIdRepr;2205 } & Struct;2206 readonly isChangeCollectionOwner: boolean;2207 readonly asChangeCollectionOwner: {2208 readonly collectionId: u32;2209 readonly newOwner: AccountId32;2210 } & Struct;2211 readonly isAddCollectionAdmin: boolean;2212 readonly asAddCollectionAdmin: {2213 readonly collectionId: u32;2214 readonly newAdminId: PalletEvmAccountBasicCrossAccountIdRepr;2215 } & Struct;2216 readonly isRemoveCollectionAdmin: boolean;2217 readonly asRemoveCollectionAdmin: {2218 readonly collectionId: u32;2219 readonly accountId: PalletEvmAccountBasicCrossAccountIdRepr;2220 } & Struct;2221 readonly isSetCollectionSponsor: boolean;2222 readonly asSetCollectionSponsor: {2223 readonly collectionId: u32;2224 readonly newSponsor: AccountId32;2225 } & Struct;2226 readonly isConfirmSponsorship: boolean;2227 readonly asConfirmSponsorship: {2228 readonly collectionId: u32;2229 } & Struct;2230 readonly isRemoveCollectionSponsor: boolean;2231 readonly asRemoveCollectionSponsor: {2232 readonly collectionId: u32;2233 } & Struct;2234 readonly isCreateItem: boolean;2235 readonly asCreateItem: {2236 readonly collectionId: u32;2237 readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;2238 readonly data: UpDataStructsCreateItemData;2239 } & Struct;2240 readonly isCreateMultipleItems: boolean;2241 readonly asCreateMultipleItems: {2242 readonly collectionId: u32;2243 readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;2244 readonly itemsData: Vec<UpDataStructsCreateItemData>;2245 } & Struct;2246 readonly isSetCollectionProperties: boolean;2247 readonly asSetCollectionProperties: {2248 readonly collectionId: u32;2249 readonly properties: Vec<UpDataStructsProperty>;2250 } & Struct;2251 readonly isDeleteCollectionProperties: boolean;2252 readonly asDeleteCollectionProperties: {2253 readonly collectionId: u32;2254 readonly propertyKeys: Vec<Bytes>;2255 } & Struct;2256 readonly isSetTokenProperties: boolean;2257 readonly asSetTokenProperties: {2258 readonly collectionId: u32;2259 readonly tokenId: u32;2260 readonly properties: Vec<UpDataStructsProperty>;2261 } & Struct;2262 readonly isDeleteTokenProperties: boolean;2263 readonly asDeleteTokenProperties: {2264 readonly collectionId: u32;2265 readonly tokenId: u32;2266 readonly propertyKeys: Vec<Bytes>;2267 } & Struct;2268 readonly isSetTokenPropertyPermissions: boolean;2269 readonly asSetTokenPropertyPermissions: {2270 readonly collectionId: u32;2271 readonly propertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;2272 } & Struct;2273 readonly isCreateMultipleItemsEx: boolean;2274 readonly asCreateMultipleItemsEx: {2275 readonly collectionId: u32;2276 readonly data: UpDataStructsCreateItemExData;2277 } & Struct;2278 readonly isSetTransfersEnabledFlag: boolean;2279 readonly asSetTransfersEnabledFlag: {2280 readonly collectionId: u32;2281 readonly value: bool;2282 } & Struct;2283 readonly isBurnItem: boolean;2284 readonly asBurnItem: {2285 readonly collectionId: u32;2286 readonly itemId: u32;2287 readonly value: u128;2288 } & Struct;2289 readonly isBurnFrom: boolean;2290 readonly asBurnFrom: {2291 readonly collectionId: u32;2292 readonly from: PalletEvmAccountBasicCrossAccountIdRepr;2293 readonly itemId: u32;2294 readonly value: u128;2295 } & Struct;2296 readonly isTransfer: boolean;2297 readonly asTransfer: {2298 readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;2299 readonly collectionId: u32;2300 readonly itemId: u32;2301 readonly value: u128;2302 } & Struct;2303 readonly isApprove: boolean;2304 readonly asApprove: {2305 readonly spender: PalletEvmAccountBasicCrossAccountIdRepr;2306 readonly collectionId: u32;2307 readonly itemId: u32;2308 readonly amount: u128;2309 } & Struct;2310 readonly isApproveFrom: boolean;2311 readonly asApproveFrom: {2312 readonly from: PalletEvmAccountBasicCrossAccountIdRepr;2313 readonly to: PalletEvmAccountBasicCrossAccountIdRepr;2314 readonly collectionId: u32;2315 readonly itemId: u32;2316 readonly amount: u128;2317 } & Struct;2318 readonly isTransferFrom: boolean;2319 readonly asTransferFrom: {2320 readonly from: PalletEvmAccountBasicCrossAccountIdRepr;2321 readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;2322 readonly collectionId: u32;2323 readonly itemId: u32;2324 readonly value: u128;2325 } & Struct;2326 readonly isSetCollectionLimits: boolean;2327 readonly asSetCollectionLimits: {2328 readonly collectionId: u32;2329 readonly newLimit: UpDataStructsCollectionLimits;2330 } & Struct;2331 readonly isSetCollectionPermissions: boolean;2332 readonly asSetCollectionPermissions: {2333 readonly collectionId: u32;2334 readonly newPermission: UpDataStructsCollectionPermissions;2335 } & Struct;2336 readonly isRepartition: boolean;2337 readonly asRepartition: {2338 readonly collectionId: u32;2339 readonly tokenId: u32;2340 readonly amount: u128;2341 } & Struct;2342 readonly isSetAllowanceForAll: boolean;2343 readonly asSetAllowanceForAll: {2344 readonly collectionId: u32;2345 readonly operator: PalletEvmAccountBasicCrossAccountIdRepr;2346 readonly approve: bool;2347 } & Struct;2348 readonly isForceRepairCollection: boolean;2349 readonly asForceRepairCollection: {2350 readonly collectionId: u32;2351 } & Struct;2352 readonly isForceRepairItem: boolean;2353 readonly asForceRepairItem: {2354 readonly collectionId: u32;2355 readonly itemId: u32;2356 } & Struct;2357 readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'ApproveFrom' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions' | 'Repartition' | 'SetAllowanceForAll' | 'ForceRepairCollection' | 'ForceRepairItem';2358}23592360/** @name PalletUniqueError */2361export interface PalletUniqueError extends Enum {2362 readonly isCollectionDecimalPointLimitExceeded: boolean;2363 readonly isEmptyArgument: boolean;2364 readonly isRepartitionCalledOnNonRefungibleCollection: boolean;2365 readonly type: 'CollectionDecimalPointLimitExceeded' | 'EmptyArgument' | 'RepartitionCalledOnNonRefungibleCollection';2366}23672368/** @name PalletXcmCall */2369export interface PalletXcmCall extends Enum {2370 readonly isSend: boolean;2371 readonly asSend: {2372 readonly dest: XcmVersionedMultiLocation;2373 readonly message: XcmVersionedXcm;2374 } & Struct;2375 readonly isTeleportAssets: boolean;2376 readonly asTeleportAssets: {2377 readonly dest: XcmVersionedMultiLocation;2378 readonly beneficiary: XcmVersionedMultiLocation;2379 readonly assets: XcmVersionedMultiAssets;2380 readonly feeAssetItem: u32;2381 } & Struct;2382 readonly isReserveTransferAssets: boolean;2383 readonly asReserveTransferAssets: {2384 readonly dest: XcmVersionedMultiLocation;2385 readonly beneficiary: XcmVersionedMultiLocation;2386 readonly assets: XcmVersionedMultiAssets;2387 readonly feeAssetItem: u32;2388 } & Struct;2389 readonly isExecute: boolean;2390 readonly asExecute: {2391 readonly message: XcmVersionedXcm;2392 readonly maxWeight: u64;2393 } & Struct;2394 readonly isForceXcmVersion: boolean;2395 readonly asForceXcmVersion: {2396 readonly location: XcmV1MultiLocation;2397 readonly xcmVersion: u32;2398 } & Struct;2399 readonly isForceDefaultXcmVersion: boolean;2400 readonly asForceDefaultXcmVersion: {2401 readonly maybeXcmVersion: Option<u32>;2402 } & Struct;2403 readonly isForceSubscribeVersionNotify: boolean;2404 readonly asForceSubscribeVersionNotify: {2405 readonly location: XcmVersionedMultiLocation;2406 } & Struct;2407 readonly isForceUnsubscribeVersionNotify: boolean;2408 readonly asForceUnsubscribeVersionNotify: {2409 readonly location: XcmVersionedMultiLocation;2410 } & Struct;2411 readonly isLimitedReserveTransferAssets: boolean;2412 readonly asLimitedReserveTransferAssets: {2413 readonly dest: XcmVersionedMultiLocation;2414 readonly beneficiary: XcmVersionedMultiLocation;2415 readonly assets: XcmVersionedMultiAssets;2416 readonly feeAssetItem: u32;2417 readonly weightLimit: XcmV2WeightLimit;2418 } & Struct;2419 readonly isLimitedTeleportAssets: boolean;2420 readonly asLimitedTeleportAssets: {2421 readonly dest: XcmVersionedMultiLocation;2422 readonly beneficiary: XcmVersionedMultiLocation;2423 readonly assets: XcmVersionedMultiAssets;2424 readonly feeAssetItem: u32;2425 readonly weightLimit: XcmV2WeightLimit;2426 } & Struct;2427 readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets';2428}24292430/** @name PalletXcmError */2431export interface PalletXcmError extends Enum {2432 readonly isUnreachable: boolean;2433 readonly isSendFailure: boolean;2434 readonly isFiltered: boolean;2435 readonly isUnweighableMessage: boolean;2436 readonly isDestinationNotInvertible: boolean;2437 readonly isEmpty: boolean;2438 readonly isCannotReanchor: boolean;2439 readonly isTooManyAssets: boolean;2440 readonly isInvalidOrigin: boolean;2441 readonly isBadVersion: boolean;2442 readonly isBadLocation: boolean;2443 readonly isNoSubscription: boolean;2444 readonly isAlreadySubscribed: boolean;2445 readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed';2446}24472448/** @name PalletXcmEvent */2449export interface PalletXcmEvent extends Enum {2450 readonly isAttempted: boolean;2451 readonly asAttempted: XcmV2TraitsOutcome;2452 readonly isSent: boolean;2453 readonly asSent: ITuple<[XcmV1MultiLocation, XcmV1MultiLocation, XcmV2Xcm]>;2454 readonly isUnexpectedResponse: boolean;2455 readonly asUnexpectedResponse: ITuple<[XcmV1MultiLocation, u64]>;2456 readonly isResponseReady: boolean;2457 readonly asResponseReady: ITuple<[u64, XcmV2Response]>;2458 readonly isNotified: boolean;2459 readonly asNotified: ITuple<[u64, u8, u8]>;2460 readonly isNotifyOverweight: boolean;2461 readonly asNotifyOverweight: ITuple<[u64, u8, u8, SpWeightsWeightV2Weight, SpWeightsWeightV2Weight]>;2462 readonly isNotifyDispatchError: boolean;2463 readonly asNotifyDispatchError: ITuple<[u64, u8, u8]>;2464 readonly isNotifyDecodeFailed: boolean;2465 readonly asNotifyDecodeFailed: ITuple<[u64, u8, u8]>;2466 readonly isInvalidResponder: boolean;2467 readonly asInvalidResponder: ITuple<[XcmV1MultiLocation, u64, Option<XcmV1MultiLocation>]>;2468 readonly isInvalidResponderVersion: boolean;2469 readonly asInvalidResponderVersion: ITuple<[XcmV1MultiLocation, u64]>;2470 readonly isResponseTaken: boolean;2471 readonly asResponseTaken: u64;2472 readonly isAssetsTrapped: boolean;2473 readonly asAssetsTrapped: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>;2474 readonly isVersionChangeNotified: boolean;2475 readonly asVersionChangeNotified: ITuple<[XcmV1MultiLocation, u32]>;2476 readonly isSupportedVersionChanged: boolean;2477 readonly asSupportedVersionChanged: ITuple<[XcmV1MultiLocation, u32]>;2478 readonly isNotifyTargetSendFail: boolean;2479 readonly asNotifyTargetSendFail: ITuple<[XcmV1MultiLocation, u64, XcmV2TraitsError]>;2480 readonly isNotifyTargetMigrationFail: boolean;2481 readonly asNotifyTargetMigrationFail: ITuple<[XcmVersionedMultiLocation, u64]>;2482 readonly isAssetsClaimed: boolean;2483 readonly asAssetsClaimed: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>;2484 readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'AssetsClaimed';2485}24862487/** @name PhantomTypeUpDataStructs */2488export interface PhantomTypeUpDataStructs extends Vec<ITuple<[UpDataStructsTokenData, UpDataStructsRpcCollection, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftNftInfo, RmrkTraitsResourceResourceInfo, RmrkTraitsPropertyPropertyInfo, RmrkTraitsBaseBaseInfo, RmrkTraitsPartPartType, RmrkTraitsTheme, RmrkTraitsNftNftChild, UpPovEstimateRpcPovInfo]>> {}24892490/** @name PolkadotCorePrimitivesInboundDownwardMessage */2491export interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct {2492 readonly sentAt: u32;2493 readonly msg: Bytes;2494}24952496/** @name PolkadotCorePrimitivesInboundHrmpMessage */2497export interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct {2498 readonly sentAt: u32;2499 readonly data: Bytes;2500}25012502/** @name PolkadotCorePrimitivesOutboundHrmpMessage */2503export interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct {2504 readonly recipient: u32;2505 readonly data: Bytes;2506}25072508/** @name PolkadotParachainPrimitivesXcmpMessageFormat */2509export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum {2510 readonly isConcatenatedVersionedXcm: boolean;2511 readonly isConcatenatedEncodedBlob: boolean;2512 readonly isSignals: boolean;2513 readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals';2514}25152516/** @name PolkadotPrimitivesV2AbridgedHostConfiguration */2517export interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct {2518 readonly maxCodeSize: u32;2519 readonly maxHeadDataSize: u32;2520 readonly maxUpwardQueueCount: u32;2521 readonly maxUpwardQueueSize: u32;2522 readonly maxUpwardMessageSize: u32;2523 readonly maxUpwardMessageNumPerCandidate: u32;2524 readonly hrmpMaxMessageNumPerCandidate: u32;2525 readonly validationUpgradeCooldown: u32;2526 readonly validationUpgradeDelay: u32;2527}25282529/** @name PolkadotPrimitivesV2AbridgedHrmpChannel */2530export interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct {2531 readonly maxCapacity: u32;2532 readonly maxTotalSize: u32;2533 readonly maxMessageSize: u32;2534 readonly msgCount: u32;2535 readonly totalSize: u32;2536 readonly mqcHead: Option<H256>;2537}25382539/** @name PolkadotPrimitivesV2PersistedValidationData */2540export interface PolkadotPrimitivesV2PersistedValidationData extends Struct {2541 readonly parentHead: Bytes;2542 readonly relayParentNumber: u32;2543 readonly relayParentStorageRoot: H256;2544 readonly maxPovSize: u32;2545}25462547/** @name PolkadotPrimitivesV2UpgradeRestriction */2548export interface PolkadotPrimitivesV2UpgradeRestriction extends Enum {2549 readonly isPresent: boolean;2550 readonly type: 'Present';2551}25522553/** @name RmrkTraitsBaseBaseInfo */2554export interface RmrkTraitsBaseBaseInfo extends Struct {2555 readonly issuer: AccountId32;2556 readonly baseType: Bytes;2557 readonly symbol: Bytes;2558}25592560/** @name RmrkTraitsCollectionCollectionInfo */2561export interface RmrkTraitsCollectionCollectionInfo extends Struct {2562 readonly issuer: AccountId32;2563 readonly metadata: Bytes;2564 readonly max: Option<u32>;2565 readonly symbol: Bytes;2566 readonly nftsCount: u32;2567}25682569/** @name RmrkTraitsNftAccountIdOrCollectionNftTuple */2570export interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum {2571 readonly isAccountId: boolean;2572 readonly asAccountId: AccountId32;2573 readonly isCollectionAndNftTuple: boolean;2574 readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;2575 readonly type: 'AccountId' | 'CollectionAndNftTuple';2576}25772578/** @name RmrkTraitsNftNftChild */2579export interface RmrkTraitsNftNftChild extends Struct {2580 readonly collectionId: u32;2581 readonly nftId: u32;2582}25832584/** @name RmrkTraitsNftNftInfo */2585export interface RmrkTraitsNftNftInfo extends Struct {2586 readonly owner: RmrkTraitsNftAccountIdOrCollectionNftTuple;2587 readonly royalty: Option<RmrkTraitsNftRoyaltyInfo>;2588 readonly metadata: Bytes;2589 readonly equipped: bool;2590 readonly pending: bool;2591}25922593/** @name RmrkTraitsNftRoyaltyInfo */2594export interface RmrkTraitsNftRoyaltyInfo extends Struct {2595 readonly recipient: AccountId32;2596 readonly amount: Permill;2597}25982599/** @name RmrkTraitsPartEquippableList */2600export interface RmrkTraitsPartEquippableList extends Enum {2601 readonly isAll: boolean;2602 readonly isEmpty: boolean;2603 readonly isCustom: boolean;2604 readonly asCustom: Vec<u32>;2605 readonly type: 'All' | 'Empty' | 'Custom';2606}26072608/** @name RmrkTraitsPartFixedPart */2609export interface RmrkTraitsPartFixedPart extends Struct {2610 readonly id: u32;2611 readonly z: u32;2612 readonly src: Bytes;2613}26142615/** @name RmrkTraitsPartPartType */2616export interface RmrkTraitsPartPartType extends Enum {2617 readonly isFixedPart: boolean;2618 readonly asFixedPart: RmrkTraitsPartFixedPart;2619 readonly isSlotPart: boolean;2620 readonly asSlotPart: RmrkTraitsPartSlotPart;2621 readonly type: 'FixedPart' | 'SlotPart';2622}26232624/** @name RmrkTraitsPartSlotPart */2625export interface RmrkTraitsPartSlotPart extends Struct {2626 readonly id: u32;2627 readonly equippable: RmrkTraitsPartEquippableList;2628 readonly src: Bytes;2629 readonly z: u32;2630}26312632/** @name RmrkTraitsPropertyPropertyInfo */2633export interface RmrkTraitsPropertyPropertyInfo extends Struct {2634 readonly key: Bytes;2635 readonly value: Bytes;2636}26372638/** @name RmrkTraitsResourceBasicResource */2639export interface RmrkTraitsResourceBasicResource extends Struct {2640 readonly src: Option<Bytes>;2641 readonly metadata: Option<Bytes>;2642 readonly license: Option<Bytes>;2643 readonly thumb: Option<Bytes>;2644}26452646/** @name RmrkTraitsResourceComposableResource */2647export interface RmrkTraitsResourceComposableResource extends Struct {2648 readonly parts: Vec<u32>;2649 readonly base: u32;2650 readonly src: Option<Bytes>;2651 readonly metadata: Option<Bytes>;2652 readonly license: Option<Bytes>;2653 readonly thumb: Option<Bytes>;2654}26552656/** @name RmrkTraitsResourceResourceInfo */2657export interface RmrkTraitsResourceResourceInfo extends Struct {2658 readonly id: u32;2659 readonly resource: RmrkTraitsResourceResourceTypes;2660 readonly pending: bool;2661 readonly pendingRemoval: bool;2662}26632664/** @name RmrkTraitsResourceResourceTypes */2665export interface RmrkTraitsResourceResourceTypes extends Enum {2666 readonly isBasic: boolean;2667 readonly asBasic: RmrkTraitsResourceBasicResource;2668 readonly isComposable: boolean;2669 readonly asComposable: RmrkTraitsResourceComposableResource;2670 readonly isSlot: boolean;2671 readonly asSlot: RmrkTraitsResourceSlotResource;2672 readonly type: 'Basic' | 'Composable' | 'Slot';2673}26742675/** @name RmrkTraitsResourceSlotResource */2676export interface RmrkTraitsResourceSlotResource extends Struct {2677 readonly base: u32;2678 readonly src: Option<Bytes>;2679 readonly metadata: Option<Bytes>;2680 readonly slot: u32;2681 readonly license: Option<Bytes>;2682 readonly thumb: Option<Bytes>;2683}26842685/** @name RmrkTraitsTheme */2686export interface RmrkTraitsTheme extends Struct {2687 readonly name: Bytes;2688 readonly properties: Vec<RmrkTraitsThemeThemeProperty>;2689 readonly inherit: bool;2690}26912692/** @name RmrkTraitsThemeThemeProperty */2693export interface RmrkTraitsThemeThemeProperty extends Struct {2694 readonly key: Bytes;2695 readonly value: Bytes;2696}26972698/** @name SpCoreEcdsaSignature */2699export interface SpCoreEcdsaSignature extends U8aFixed {}27002701/** @name SpCoreEd25519Signature */2702export interface SpCoreEd25519Signature extends U8aFixed {}27032704/** @name SpCoreSr25519Signature */2705export interface SpCoreSr25519Signature extends U8aFixed {}27062707/** @name SpRuntimeArithmeticError */2708export interface SpRuntimeArithmeticError extends Enum {2709 readonly isUnderflow: boolean;2710 readonly isOverflow: boolean;2711 readonly isDivisionByZero: boolean;2712 readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero';2713}27142715/** @name SpRuntimeDigest */2716export interface SpRuntimeDigest extends Struct {2717 readonly logs: Vec<SpRuntimeDigestDigestItem>;2718}27192720/** @name SpRuntimeDigestDigestItem */2721export interface SpRuntimeDigestDigestItem extends Enum {2722 readonly isOther: boolean;2723 readonly asOther: Bytes;2724 readonly isConsensus: boolean;2725 readonly asConsensus: ITuple<[U8aFixed, Bytes]>;2726 readonly isSeal: boolean;2727 readonly asSeal: ITuple<[U8aFixed, Bytes]>;2728 readonly isPreRuntime: boolean;2729 readonly asPreRuntime: ITuple<[U8aFixed, Bytes]>;2730 readonly isRuntimeEnvironmentUpdated: boolean;2731 readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated';2732}27332734/** @name SpRuntimeDispatchError */2735export interface SpRuntimeDispatchError extends Enum {2736 readonly isOther: boolean;2737 readonly isCannotLookup: boolean;2738 readonly isBadOrigin: boolean;2739 readonly isModule: boolean;2740 readonly asModule: SpRuntimeModuleError;2741 readonly isConsumerRemaining: boolean;2742 readonly isNoProviders: boolean;2743 readonly isTooManyConsumers: boolean;2744 readonly isToken: boolean;2745 readonly asToken: SpRuntimeTokenError;2746 readonly isArithmetic: boolean;2747 readonly asArithmetic: SpRuntimeArithmeticError;2748 readonly isTransactional: boolean;2749 readonly asTransactional: SpRuntimeTransactionalError;2750 readonly isExhausted: boolean;2751 readonly isCorruption: boolean;2752 readonly isUnavailable: boolean;2753 readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional' | 'Exhausted' | 'Corruption' | 'Unavailable';2754}27552756/** @name SpRuntimeModuleError */2757export interface SpRuntimeModuleError extends Struct {2758 readonly index: u8;2759 readonly error: U8aFixed;2760}27612762/** @name SpRuntimeMultiSignature */2763export interface SpRuntimeMultiSignature extends Enum {2764 readonly isEd25519: boolean;2765 readonly asEd25519: SpCoreEd25519Signature;2766 readonly isSr25519: boolean;2767 readonly asSr25519: SpCoreSr25519Signature;2768 readonly isEcdsa: boolean;2769 readonly asEcdsa: SpCoreEcdsaSignature;2770 readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa';2771}27722773/** @name SpRuntimeTokenError */2774export interface SpRuntimeTokenError extends Enum {2775 readonly isNoFunds: boolean;2776 readonly isWouldDie: boolean;2777 readonly isBelowMinimum: boolean;2778 readonly isCannotCreate: boolean;2779 readonly isUnknownAsset: boolean;2780 readonly isFrozen: boolean;2781 readonly isUnsupported: boolean;2782 readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported';2783}27842785/** @name SpRuntimeTransactionalError */2786export interface SpRuntimeTransactionalError extends Enum {2787 readonly isLimitReached: boolean;2788 readonly isNoLayer: boolean;2789 readonly type: 'LimitReached' | 'NoLayer';2790}27912792/** @name SpRuntimeTransactionValidityInvalidTransaction */2793export interface SpRuntimeTransactionValidityInvalidTransaction extends Enum {2794 readonly isCall: boolean;2795 readonly isPayment: boolean;2796 readonly isFuture: boolean;2797 readonly isStale: boolean;2798 readonly isBadProof: boolean;2799 readonly isAncientBirthBlock: boolean;2800 readonly isExhaustsResources: boolean;2801 readonly isCustom: boolean;2802 readonly asCustom: u8;2803 readonly isBadMandatory: boolean;2804 readonly isMandatoryValidation: boolean;2805 readonly isBadSigner: boolean;2806 readonly type: 'Call' | 'Payment' | 'Future' | 'Stale' | 'BadProof' | 'AncientBirthBlock' | 'ExhaustsResources' | 'Custom' | 'BadMandatory' | 'MandatoryValidation' | 'BadSigner';2807}28082809/** @name SpRuntimeTransactionValidityTransactionValidityError */2810export interface SpRuntimeTransactionValidityTransactionValidityError extends Enum {2811 readonly isInvalid: boolean;2812 readonly asInvalid: SpRuntimeTransactionValidityInvalidTransaction;2813 readonly isUnknown: boolean;2814 readonly asUnknown: SpRuntimeTransactionValidityUnknownTransaction;2815 readonly type: 'Invalid' | 'Unknown';2816}28172818/** @name SpRuntimeTransactionValidityUnknownTransaction */2819export interface SpRuntimeTransactionValidityUnknownTransaction extends Enum {2820 readonly isCannotLookup: boolean;2821 readonly isNoUnsignedValidator: boolean;2822 readonly isCustom: boolean;2823 readonly asCustom: u8;2824 readonly type: 'CannotLookup' | 'NoUnsignedValidator' | 'Custom';2825}28262827/** @name SpTrieStorageProof */2828export interface SpTrieStorageProof extends Struct {2829 readonly trieNodes: BTreeSet<Bytes>;2830}28312832/** @name SpVersionRuntimeVersion */2833export interface SpVersionRuntimeVersion extends Struct {2834 readonly specName: Text;2835 readonly implName: Text;2836 readonly authoringVersion: u32;2837 readonly specVersion: u32;2838 readonly implVersion: u32;2839 readonly apis: Vec<ITuple<[U8aFixed, u32]>>;2840 readonly transactionVersion: u32;2841 readonly stateVersion: u8;2842}28432844/** @name SpWeightsRuntimeDbWeight */2845export interface SpWeightsRuntimeDbWeight extends Struct {2846 readonly read: u64;2847 readonly write: u64;2848}28492850/** @name SpWeightsWeightV2Weight */2851export interface SpWeightsWeightV2Weight extends Struct {2852 readonly refTime: Compact<u64>;2853 readonly proofSize: Compact<u64>;2854}28552856/** @name UpDataStructsAccessMode */2857export interface UpDataStructsAccessMode extends Enum {2858 readonly isNormal: boolean;2859 readonly isAllowList: boolean;2860 readonly type: 'Normal' | 'AllowList';2861}28622863/** @name UpDataStructsCollection */2864export interface UpDataStructsCollection extends Struct {2865 readonly owner: AccountId32;2866 readonly mode: UpDataStructsCollectionMode;2867 readonly name: Vec<u16>;2868 readonly description: Vec<u16>;2869 readonly tokenPrefix: Bytes;2870 readonly sponsorship: UpDataStructsSponsorshipStateAccountId32;2871 readonly limits: UpDataStructsCollectionLimits;2872 readonly permissions: UpDataStructsCollectionPermissions;2873 readonly flags: U8aFixed;2874}28752876/** @name UpDataStructsCollectionLimits */2877export interface UpDataStructsCollectionLimits extends Struct {2878 readonly accountTokenOwnershipLimit: Option<u32>;2879 readonly sponsoredDataSize: Option<u32>;2880 readonly sponsoredDataRateLimit: Option<UpDataStructsSponsoringRateLimit>;2881 readonly tokenLimit: Option<u32>;2882 readonly sponsorTransferTimeout: Option<u32>;2883 readonly sponsorApproveTimeout: Option<u32>;2884 readonly ownerCanTransfer: Option<bool>;2885 readonly ownerCanDestroy: Option<bool>;2886 readonly transfersEnabled: Option<bool>;2887}28882889/** @name UpDataStructsCollectionMode */2890export interface UpDataStructsCollectionMode extends Enum {2891 readonly isNft: boolean;2892 readonly isFungible: boolean;2893 readonly asFungible: u8;2894 readonly isReFungible: boolean;2895 readonly type: 'Nft' | 'Fungible' | 'ReFungible';2896}28972898/** @name UpDataStructsCollectionPermissions */2899export interface UpDataStructsCollectionPermissions extends Struct {2900 readonly access: Option<UpDataStructsAccessMode>;2901 readonly mintMode: Option<bool>;2902 readonly nesting: Option<UpDataStructsNestingPermissions>;2903}29042905/** @name UpDataStructsCollectionStats */2906export interface UpDataStructsCollectionStats extends Struct {2907 readonly created: u32;2908 readonly destroyed: u32;2909 readonly alive: u32;2910}29112912/** @name UpDataStructsCreateCollectionData */2913export interface UpDataStructsCreateCollectionData extends Struct {2914 readonly mode: UpDataStructsCollectionMode;2915 readonly access: Option<UpDataStructsAccessMode>;2916 readonly name: Vec<u16>;2917 readonly description: Vec<u16>;2918 readonly tokenPrefix: Bytes;2919 readonly pendingSponsor: Option<AccountId32>;2920 readonly limits: Option<UpDataStructsCollectionLimits>;2921 readonly permissions: Option<UpDataStructsCollectionPermissions>;2922 readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;2923 readonly properties: Vec<UpDataStructsProperty>;2924}29252926/** @name UpDataStructsCreateFungibleData */2927export interface UpDataStructsCreateFungibleData extends Struct {2928 readonly value: u128;2929}29302931/** @name UpDataStructsCreateItemData */2932export interface UpDataStructsCreateItemData extends Enum {2933 readonly isNft: boolean;2934 readonly asNft: UpDataStructsCreateNftData;2935 readonly isFungible: boolean;2936 readonly asFungible: UpDataStructsCreateFungibleData;2937 readonly isReFungible: boolean;2938 readonly asReFungible: UpDataStructsCreateReFungibleData;2939 readonly type: 'Nft' | 'Fungible' | 'ReFungible';2940}29412942/** @name UpDataStructsCreateItemExData */2943export interface UpDataStructsCreateItemExData extends Enum {2944 readonly isNft: boolean;2945 readonly asNft: Vec<UpDataStructsCreateNftExData>;2946 readonly isFungible: boolean;2947 readonly asFungible: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr,u128>;2948 readonly isRefungibleMultipleItems: boolean;2949 readonly asRefungibleMultipleItems: Vec<UpDataStructsCreateRefungibleExSingleOwner>;2950 readonly isRefungibleMultipleOwners: boolean;2951 readonly asRefungibleMultipleOwners: UpDataStructsCreateRefungibleExMultipleOwners;2952 readonly type: 'Nft' | 'Fungible' | 'RefungibleMultipleItems' | 'RefungibleMultipleOwners';2953}29542955/** @name UpDataStructsCreateNftData */2956export interface UpDataStructsCreateNftData extends Struct {2957 readonly properties: Vec<UpDataStructsProperty>;2958}29592960/** @name UpDataStructsCreateNftExData */2961export interface UpDataStructsCreateNftExData extends Struct {2962 readonly properties: Vec<UpDataStructsProperty>;2963 readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;2964}29652966/** @name UpDataStructsCreateReFungibleData */2967export interface UpDataStructsCreateReFungibleData extends Struct {2968 readonly pieces: u128;2969 readonly properties: Vec<UpDataStructsProperty>;2970}29712972/** @name UpDataStructsCreateRefungibleExMultipleOwners */2973export interface UpDataStructsCreateRefungibleExMultipleOwners extends Struct {2974 readonly users: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;2975 readonly properties: Vec<UpDataStructsProperty>;2976}29772978/** @name UpDataStructsCreateRefungibleExSingleOwner */2979export interface UpDataStructsCreateRefungibleExSingleOwner extends Struct {2980 readonly user: PalletEvmAccountBasicCrossAccountIdRepr;2981 readonly pieces: u128;2982 readonly properties: Vec<UpDataStructsProperty>;2983}29842985/** @name UpDataStructsNestingPermissions */2986export interface UpDataStructsNestingPermissions extends Struct {2987 readonly tokenOwner: bool;2988 readonly collectionAdmin: bool;2989 readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;2990}29912992/** @name UpDataStructsOwnerRestrictedSet */2993export interface UpDataStructsOwnerRestrictedSet extends BTreeSet<u32> {}29942995/** @name UpDataStructsProperties */2996export interface UpDataStructsProperties extends Struct {2997 readonly map: UpDataStructsPropertiesMapBoundedVec;2998 readonly consumedSpace: u32;2999 readonly spaceLimit: u32;3000}30013002/** @name UpDataStructsPropertiesMapBoundedVec */3003export interface UpDataStructsPropertiesMapBoundedVec extends BTreeMap<Bytes, Bytes> {}30043005/** @name UpDataStructsPropertiesMapPropertyPermission */3006export interface UpDataStructsPropertiesMapPropertyPermission extends BTreeMap<Bytes, UpDataStructsPropertyPermission> {}30073008/** @name UpDataStructsProperty */3009export interface UpDataStructsProperty extends Struct {3010 readonly key: Bytes;3011 readonly value: Bytes;3012}30133014/** @name UpDataStructsPropertyKeyPermission */3015export interface UpDataStructsPropertyKeyPermission extends Struct {3016 readonly key: Bytes;3017 readonly permission: UpDataStructsPropertyPermission;3018}30193020/** @name UpDataStructsPropertyPermission */3021export interface UpDataStructsPropertyPermission extends Struct {3022 readonly mutable: bool;3023 readonly collectionAdmin: bool;3024 readonly tokenOwner: bool;3025}30263027/** @name UpDataStructsPropertyScope */3028export interface UpDataStructsPropertyScope extends Enum {3029 readonly isNone: boolean;3030 readonly isRmrk: boolean;3031 readonly type: 'None' | 'Rmrk';3032}30333034/** @name UpDataStructsRpcCollection */3035export interface UpDataStructsRpcCollection extends Struct {3036 readonly owner: AccountId32;3037 readonly mode: UpDataStructsCollectionMode;3038 readonly name: Vec<u16>;3039 readonly description: Vec<u16>;3040 readonly tokenPrefix: Bytes;3041 readonly sponsorship: UpDataStructsSponsorshipStateAccountId32;3042 readonly limits: UpDataStructsCollectionLimits;3043 readonly permissions: UpDataStructsCollectionPermissions;3044 readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;3045 readonly properties: Vec<UpDataStructsProperty>;3046 readonly readOnly: bool;3047 readonly flags: UpDataStructsRpcCollectionFlags;3048}30493050/** @name UpDataStructsRpcCollectionFlags */3051export interface UpDataStructsRpcCollectionFlags extends Struct {3052 readonly foreign: bool;3053 readonly erc721metadata: bool;3054}30553056/** @name UpDataStructsSponsoringRateLimit */3057export interface UpDataStructsSponsoringRateLimit extends Enum {3058 readonly isSponsoringDisabled: boolean;3059 readonly isBlocks: boolean;3060 readonly asBlocks: u32;3061 readonly type: 'SponsoringDisabled' | 'Blocks';3062}30633064/** @name UpDataStructsSponsorshipStateAccountId32 */3065export interface UpDataStructsSponsorshipStateAccountId32 extends Enum {3066 readonly isDisabled: boolean;3067 readonly isUnconfirmed: boolean;3068 readonly asUnconfirmed: AccountId32;3069 readonly isConfirmed: boolean;3070 readonly asConfirmed: AccountId32;3071 readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed';3072}30733074/** @name UpDataStructsSponsorshipStateBasicCrossAccountIdRepr */3075export interface UpDataStructsSponsorshipStateBasicCrossAccountIdRepr extends Enum {3076 readonly isDisabled: boolean;3077 readonly isUnconfirmed: boolean;3078 readonly asUnconfirmed: PalletEvmAccountBasicCrossAccountIdRepr;3079 readonly isConfirmed: boolean;3080 readonly asConfirmed: PalletEvmAccountBasicCrossAccountIdRepr;3081 readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed';3082}30833084/** @name UpDataStructsTokenChild */3085export interface UpDataStructsTokenChild extends Struct {3086 readonly token: u32;3087 readonly collection: u32;3088}30893090/** @name UpDataStructsTokenData */3091export interface UpDataStructsTokenData extends Struct {3092 readonly properties: Vec<UpDataStructsProperty>;3093 readonly owner: Option<PalletEvmAccountBasicCrossAccountIdRepr>;3094 readonly pieces: u128;3095}30963097/** @name UpPovEstimateRpcPovInfo */3098export interface UpPovEstimateRpcPovInfo extends Struct {3099 readonly proofSize: u64;3100 readonly compactProofSize: u64;3101 readonly compressedProofSize: u64;3102 readonly results: Vec<Result<Result<Null, SpRuntimeDispatchError>, SpRuntimeTransactionValidityTransactionValidityError>>;3103 readonly keyValues: Vec<UpPovEstimateRpcTrieKeyValue>;3104}31053106/** @name UpPovEstimateRpcTrieKeyValue */3107export interface UpPovEstimateRpcTrieKeyValue extends Struct {3108 readonly key: Bytes;3109 readonly value: Bytes;3110}31113112/** @name XcmDoubleEncoded */3113export interface XcmDoubleEncoded extends Struct {3114 readonly encoded: Bytes;3115}31163117/** @name XcmV0Junction */3118export interface XcmV0Junction extends Enum {3119 readonly isParent: boolean;3120 readonly isParachain: boolean;3121 readonly asParachain: Compact<u32>;3122 readonly isAccountId32: boolean;3123 readonly asAccountId32: {3124 readonly network: XcmV0JunctionNetworkId;3125 readonly id: U8aFixed;3126 } & Struct;3127 readonly isAccountIndex64: boolean;3128 readonly asAccountIndex64: {3129 readonly network: XcmV0JunctionNetworkId;3130 readonly index: Compact<u64>;3131 } & Struct;3132 readonly isAccountKey20: boolean;3133 readonly asAccountKey20: {3134 readonly network: XcmV0JunctionNetworkId;3135 readonly key: U8aFixed;3136 } & Struct;3137 readonly isPalletInstance: boolean;3138 readonly asPalletInstance: u8;3139 readonly isGeneralIndex: boolean;3140 readonly asGeneralIndex: Compact<u128>;3141 readonly isGeneralKey: boolean;3142 readonly asGeneralKey: Bytes;3143 readonly isOnlyChild: boolean;3144 readonly isPlurality: boolean;3145 readonly asPlurality: {3146 readonly id: XcmV0JunctionBodyId;3147 readonly part: XcmV0JunctionBodyPart;3148 } & Struct;3149 readonly type: 'Parent' | 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';3150}31513152/** @name XcmV0JunctionBodyId */3153export interface XcmV0JunctionBodyId extends Enum {3154 readonly isUnit: boolean;3155 readonly isNamed: boolean;3156 readonly asNamed: Bytes;3157 readonly isIndex: boolean;3158 readonly asIndex: Compact<u32>;3159 readonly isExecutive: boolean;3160 readonly isTechnical: boolean;3161 readonly isLegislative: boolean;3162 readonly isJudicial: boolean;3163 readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial';3164}31653166/** @name XcmV0JunctionBodyPart */3167export interface XcmV0JunctionBodyPart extends Enum {3168 readonly isVoice: boolean;3169 readonly isMembers: boolean;3170 readonly asMembers: {3171 readonly count: Compact<u32>;3172 } & Struct;3173 readonly isFraction: boolean;3174 readonly asFraction: {3175 readonly nom: Compact<u32>;3176 readonly denom: Compact<u32>;3177 } & Struct;3178 readonly isAtLeastProportion: boolean;3179 readonly asAtLeastProportion: {3180 readonly nom: Compact<u32>;3181 readonly denom: Compact<u32>;3182 } & Struct;3183 readonly isMoreThanProportion: boolean;3184 readonly asMoreThanProportion: {3185 readonly nom: Compact<u32>;3186 readonly denom: Compact<u32>;3187 } & Struct;3188 readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion';3189}31903191/** @name XcmV0JunctionNetworkId */3192export interface XcmV0JunctionNetworkId extends Enum {3193 readonly isAny: boolean;3194 readonly isNamed: boolean;3195 readonly asNamed: Bytes;3196 readonly isPolkadot: boolean;3197 readonly isKusama: boolean;3198 readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama';3199}32003201/** @name XcmV0MultiAsset */3202export interface XcmV0MultiAsset extends Enum {3203 readonly isNone: boolean;3204 readonly isAll: boolean;3205 readonly isAllFungible: boolean;3206 readonly isAllNonFungible: boolean;3207 readonly isAllAbstractFungible: boolean;3208 readonly asAllAbstractFungible: {3209 readonly id: Bytes;3210 } & Struct;3211 readonly isAllAbstractNonFungible: boolean;3212 readonly asAllAbstractNonFungible: {3213 readonly class: Bytes;3214 } & Struct;3215 readonly isAllConcreteFungible: boolean;3216 readonly asAllConcreteFungible: {3217 readonly id: XcmV0MultiLocation;3218 } & Struct;3219 readonly isAllConcreteNonFungible: boolean;3220 readonly asAllConcreteNonFungible: {3221 readonly class: XcmV0MultiLocation;3222 } & Struct;3223 readonly isAbstractFungible: boolean;3224 readonly asAbstractFungible: {3225 readonly id: Bytes;3226 readonly amount: Compact<u128>;3227 } & Struct;3228 readonly isAbstractNonFungible: boolean;3229 readonly asAbstractNonFungible: {3230 readonly class: Bytes;3231 readonly instance: XcmV1MultiassetAssetInstance;3232 } & Struct;3233 readonly isConcreteFungible: boolean;3234 readonly asConcreteFungible: {3235 readonly id: XcmV0MultiLocation;3236 readonly amount: Compact<u128>;3237 } & Struct;3238 readonly isConcreteNonFungible: boolean;3239 readonly asConcreteNonFungible: {3240 readonly class: XcmV0MultiLocation;3241 readonly instance: XcmV1MultiassetAssetInstance;3242 } & Struct;3243 readonly type: 'None' | 'All' | 'AllFungible' | 'AllNonFungible' | 'AllAbstractFungible' | 'AllAbstractNonFungible' | 'AllConcreteFungible' | 'AllConcreteNonFungible' | 'AbstractFungible' | 'AbstractNonFungible' | 'ConcreteFungible' | 'ConcreteNonFungible';3244}32453246/** @name XcmV0MultiLocation */3247export interface XcmV0MultiLocation extends Enum {3248 readonly isNull: boolean;3249 readonly isX1: boolean;3250 readonly asX1: XcmV0Junction;3251 readonly isX2: boolean;3252 readonly asX2: ITuple<[XcmV0Junction, XcmV0Junction]>;3253 readonly isX3: boolean;3254 readonly asX3: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction]>;3255 readonly isX4: boolean;3256 readonly asX4: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;3257 readonly isX5: boolean;3258 readonly asX5: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;3259 readonly isX6: boolean;3260 readonly asX6: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;3261 readonly isX7: boolean;3262 readonly asX7: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;3263 readonly isX8: boolean;3264 readonly asX8: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;3265 readonly type: 'Null' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';3266}32673268/** @name XcmV0Order */3269export interface XcmV0Order extends Enum {3270 readonly isNull: boolean;3271 readonly isDepositAsset: boolean;3272 readonly asDepositAsset: {3273 readonly assets: Vec<XcmV0MultiAsset>;3274 readonly dest: XcmV0MultiLocation;3275 } & Struct;3276 readonly isDepositReserveAsset: boolean;3277 readonly asDepositReserveAsset: {3278 readonly assets: Vec<XcmV0MultiAsset>;3279 readonly dest: XcmV0MultiLocation;3280 readonly effects: Vec<XcmV0Order>;3281 } & Struct;3282 readonly isExchangeAsset: boolean;3283 readonly asExchangeAsset: {3284 readonly give: Vec<XcmV0MultiAsset>;3285 readonly receive: Vec<XcmV0MultiAsset>;3286 } & Struct;3287 readonly isInitiateReserveWithdraw: boolean;3288 readonly asInitiateReserveWithdraw: {3289 readonly assets: Vec<XcmV0MultiAsset>;3290 readonly reserve: XcmV0MultiLocation;3291 readonly effects: Vec<XcmV0Order>;3292 } & Struct;3293 readonly isInitiateTeleport: boolean;3294 readonly asInitiateTeleport: {3295 readonly assets: Vec<XcmV0MultiAsset>;3296 readonly dest: XcmV0MultiLocation;3297 readonly effects: Vec<XcmV0Order>;3298 } & Struct;3299 readonly isQueryHolding: boolean;3300 readonly asQueryHolding: {3301 readonly queryId: Compact<u64>;3302 readonly dest: XcmV0MultiLocation;3303 readonly assets: Vec<XcmV0MultiAsset>;3304 } & Struct;3305 readonly isBuyExecution: boolean;3306 readonly asBuyExecution: {3307 readonly fees: XcmV0MultiAsset;3308 readonly weight: u64;3309 readonly debt: u64;3310 readonly haltOnError: bool;3311 readonly xcm: Vec<XcmV0Xcm>;3312 } & Struct;3313 readonly type: 'Null' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';3314}33153316/** @name XcmV0OriginKind */3317export interface XcmV0OriginKind extends Enum {3318 readonly isNative: boolean;3319 readonly isSovereignAccount: boolean;3320 readonly isSuperuser: boolean;3321 readonly isXcm: boolean;3322 readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm';3323}33243325/** @name XcmV0Response */3326export interface XcmV0Response extends Enum {3327 readonly isAssets: boolean;3328 readonly asAssets: Vec<XcmV0MultiAsset>;3329 readonly type: 'Assets';3330}33313332/** @name XcmV0Xcm */3333export interface XcmV0Xcm extends Enum {3334 readonly isWithdrawAsset: boolean;3335 readonly asWithdrawAsset: {3336 readonly assets: Vec<XcmV0MultiAsset>;3337 readonly effects: Vec<XcmV0Order>;3338 } & Struct;3339 readonly isReserveAssetDeposit: boolean;3340 readonly asReserveAssetDeposit: {3341 readonly assets: Vec<XcmV0MultiAsset>;3342 readonly effects: Vec<XcmV0Order>;3343 } & Struct;3344 readonly isTeleportAsset: boolean;3345 readonly asTeleportAsset: {3346 readonly assets: Vec<XcmV0MultiAsset>;3347 readonly effects: Vec<XcmV0Order>;3348 } & Struct;3349 readonly isQueryResponse: boolean;3350 readonly asQueryResponse: {3351 readonly queryId: Compact<u64>;3352 readonly response: XcmV0Response;3353 } & Struct;3354 readonly isTransferAsset: boolean;3355 readonly asTransferAsset: {3356 readonly assets: Vec<XcmV0MultiAsset>;3357 readonly dest: XcmV0MultiLocation;3358 } & Struct;3359 readonly isTransferReserveAsset: boolean;3360 readonly asTransferReserveAsset: {3361 readonly assets: Vec<XcmV0MultiAsset>;3362 readonly dest: XcmV0MultiLocation;3363 readonly effects: Vec<XcmV0Order>;3364 } & Struct;3365 readonly isTransact: boolean;3366 readonly asTransact: {3367 readonly originType: XcmV0OriginKind;3368 readonly requireWeightAtMost: u64;3369 readonly call: XcmDoubleEncoded;3370 } & Struct;3371 readonly isHrmpNewChannelOpenRequest: boolean;3372 readonly asHrmpNewChannelOpenRequest: {3373 readonly sender: Compact<u32>;3374 readonly maxMessageSize: Compact<u32>;3375 readonly maxCapacity: Compact<u32>;3376 } & Struct;3377 readonly isHrmpChannelAccepted: boolean;3378 readonly asHrmpChannelAccepted: {3379 readonly recipient: Compact<u32>;3380 } & Struct;3381 readonly isHrmpChannelClosing: boolean;3382 readonly asHrmpChannelClosing: {3383 readonly initiator: Compact<u32>;3384 readonly sender: Compact<u32>;3385 readonly recipient: Compact<u32>;3386 } & Struct;3387 readonly isRelayedFrom: boolean;3388 readonly asRelayedFrom: {3389 readonly who: XcmV0MultiLocation;3390 readonly message: XcmV0Xcm;3391 } & Struct;3392 readonly type: 'WithdrawAsset' | 'ReserveAssetDeposit' | 'TeleportAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom';3393}33943395/** @name XcmV1Junction */3396export interface XcmV1Junction extends Enum {3397 readonly isParachain: boolean;3398 readonly asParachain: Compact<u32>;3399 readonly isAccountId32: boolean;3400 readonly asAccountId32: {3401 readonly network: XcmV0JunctionNetworkId;3402 readonly id: U8aFixed;3403 } & Struct;3404 readonly isAccountIndex64: boolean;3405 readonly asAccountIndex64: {3406 readonly network: XcmV0JunctionNetworkId;3407 readonly index: Compact<u64>;3408 } & Struct;3409 readonly isAccountKey20: boolean;3410 readonly asAccountKey20: {3411 readonly network: XcmV0JunctionNetworkId;3412 readonly key: U8aFixed;3413 } & Struct;3414 readonly isPalletInstance: boolean;3415 readonly asPalletInstance: u8;3416 readonly isGeneralIndex: boolean;3417 readonly asGeneralIndex: Compact<u128>;3418 readonly isGeneralKey: boolean;3419 readonly asGeneralKey: Bytes;3420 readonly isOnlyChild: boolean;3421 readonly isPlurality: boolean;3422 readonly asPlurality: {3423 readonly id: XcmV0JunctionBodyId;3424 readonly part: XcmV0JunctionBodyPart;3425 } & Struct;3426 readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';3427}34283429/** @name XcmV1MultiAsset */3430export interface XcmV1MultiAsset extends Struct {3431 readonly id: XcmV1MultiassetAssetId;3432 readonly fun: XcmV1MultiassetFungibility;3433}34343435/** @name XcmV1MultiassetAssetId */3436export interface XcmV1MultiassetAssetId extends Enum {3437 readonly isConcrete: boolean;3438 readonly asConcrete: XcmV1MultiLocation;3439 readonly isAbstract: boolean;3440 readonly asAbstract: Bytes;3441 readonly type: 'Concrete' | 'Abstract';3442}34433444/** @name XcmV1MultiassetAssetInstance */3445export interface XcmV1MultiassetAssetInstance extends Enum {3446 readonly isUndefined: boolean;3447 readonly isIndex: boolean;3448 readonly asIndex: Compact<u128>;3449 readonly isArray4: boolean;3450 readonly asArray4: U8aFixed;3451 readonly isArray8: boolean;3452 readonly asArray8: U8aFixed;3453 readonly isArray16: boolean;3454 readonly asArray16: U8aFixed;3455 readonly isArray32: boolean;3456 readonly asArray32: U8aFixed;3457 readonly isBlob: boolean;3458 readonly asBlob: Bytes;3459 readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob';3460}34613462/** @name XcmV1MultiassetFungibility */3463export interface XcmV1MultiassetFungibility extends Enum {3464 readonly isFungible: boolean;3465 readonly asFungible: Compact<u128>;3466 readonly isNonFungible: boolean;3467 readonly asNonFungible: XcmV1MultiassetAssetInstance;3468 readonly type: 'Fungible' | 'NonFungible';3469}34703471/** @name XcmV1MultiassetMultiAssetFilter */3472export interface XcmV1MultiassetMultiAssetFilter extends Enum {3473 readonly isDefinite: boolean;3474 readonly asDefinite: XcmV1MultiassetMultiAssets;3475 readonly isWild: boolean;3476 readonly asWild: XcmV1MultiassetWildMultiAsset;3477 readonly type: 'Definite' | 'Wild';3478}34793480/** @name XcmV1MultiassetMultiAssets */3481export interface XcmV1MultiassetMultiAssets extends Vec<XcmV1MultiAsset> {}34823483/** @name XcmV1MultiassetWildFungibility */3484export interface XcmV1MultiassetWildFungibility extends Enum {3485 readonly isFungible: boolean;3486 readonly isNonFungible: boolean;3487 readonly type: 'Fungible' | 'NonFungible';3488}34893490/** @name XcmV1MultiassetWildMultiAsset */3491export interface XcmV1MultiassetWildMultiAsset extends Enum {3492 readonly isAll: boolean;3493 readonly isAllOf: boolean;3494 readonly asAllOf: {3495 readonly id: XcmV1MultiassetAssetId;3496 readonly fun: XcmV1MultiassetWildFungibility;3497 } & Struct;3498 readonly type: 'All' | 'AllOf';3499}35003501/** @name XcmV1MultiLocation */3502export interface XcmV1MultiLocation extends Struct {3503 readonly parents: u8;3504 readonly interior: XcmV1MultilocationJunctions;3505}35063507/** @name XcmV1MultilocationJunctions */3508export interface XcmV1MultilocationJunctions extends Enum {3509 readonly isHere: boolean;3510 readonly isX1: boolean;3511 readonly asX1: XcmV1Junction;3512 readonly isX2: boolean;3513 readonly asX2: ITuple<[XcmV1Junction, XcmV1Junction]>;3514 readonly isX3: boolean;3515 readonly asX3: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction]>;3516 readonly isX4: boolean;3517 readonly asX4: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;3518 readonly isX5: boolean;3519 readonly asX5: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;3520 readonly isX6: boolean;3521 readonly asX6: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;3522 readonly isX7: boolean;3523 readonly asX7: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;3524 readonly isX8: boolean;3525 readonly asX8: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;3526 readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';3527}35283529/** @name XcmV1Order */3530export interface XcmV1Order extends Enum {3531 readonly isNoop: boolean;3532 readonly isDepositAsset: boolean;3533 readonly asDepositAsset: {3534 readonly assets: XcmV1MultiassetMultiAssetFilter;3535 readonly maxAssets: u32;3536 readonly beneficiary: XcmV1MultiLocation;3537 } & Struct;3538 readonly isDepositReserveAsset: boolean;3539 readonly asDepositReserveAsset: {3540 readonly assets: XcmV1MultiassetMultiAssetFilter;3541 readonly maxAssets: u32;3542 readonly dest: XcmV1MultiLocation;3543 readonly effects: Vec<XcmV1Order>;3544 } & Struct;3545 readonly isExchangeAsset: boolean;3546 readonly asExchangeAsset: {3547 readonly give: XcmV1MultiassetMultiAssetFilter;3548 readonly receive: XcmV1MultiassetMultiAssets;3549 } & Struct;3550 readonly isInitiateReserveWithdraw: boolean;3551 readonly asInitiateReserveWithdraw: {3552 readonly assets: XcmV1MultiassetMultiAssetFilter;3553 readonly reserve: XcmV1MultiLocation;3554 readonly effects: Vec<XcmV1Order>;3555 } & Struct;3556 readonly isInitiateTeleport: boolean;3557 readonly asInitiateTeleport: {3558 readonly assets: XcmV1MultiassetMultiAssetFilter;3559 readonly dest: XcmV1MultiLocation;3560 readonly effects: Vec<XcmV1Order>;3561 } & Struct;3562 readonly isQueryHolding: boolean;3563 readonly asQueryHolding: {3564 readonly queryId: Compact<u64>;3565 readonly dest: XcmV1MultiLocation;3566 readonly assets: XcmV1MultiassetMultiAssetFilter;3567 } & Struct;3568 readonly isBuyExecution: boolean;3569 readonly asBuyExecution: {3570 readonly fees: XcmV1MultiAsset;3571 readonly weight: u64;3572 readonly debt: u64;3573 readonly haltOnError: bool;3574 readonly instructions: Vec<XcmV1Xcm>;3575 } & Struct;3576 readonly type: 'Noop' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';3577}35783579/** @name XcmV1Response */3580export interface XcmV1Response extends Enum {3581 readonly isAssets: boolean;3582 readonly asAssets: XcmV1MultiassetMultiAssets;3583 readonly isVersion: boolean;3584 readonly asVersion: u32;3585 readonly type: 'Assets' | 'Version';3586}35873588/** @name XcmV1Xcm */3589export interface XcmV1Xcm extends Enum {3590 readonly isWithdrawAsset: boolean;3591 readonly asWithdrawAsset: {3592 readonly assets: XcmV1MultiassetMultiAssets;3593 readonly effects: Vec<XcmV1Order>;3594 } & Struct;3595 readonly isReserveAssetDeposited: boolean;3596 readonly asReserveAssetDeposited: {3597 readonly assets: XcmV1MultiassetMultiAssets;3598 readonly effects: Vec<XcmV1Order>;3599 } & Struct;3600 readonly isReceiveTeleportedAsset: boolean;3601 readonly asReceiveTeleportedAsset: {3602 readonly assets: XcmV1MultiassetMultiAssets;3603 readonly effects: Vec<XcmV1Order>;3604 } & Struct;3605 readonly isQueryResponse: boolean;3606 readonly asQueryResponse: {3607 readonly queryId: Compact<u64>;3608 readonly response: XcmV1Response;3609 } & Struct;3610 readonly isTransferAsset: boolean;3611 readonly asTransferAsset: {3612 readonly assets: XcmV1MultiassetMultiAssets;3613 readonly beneficiary: XcmV1MultiLocation;3614 } & Struct;3615 readonly isTransferReserveAsset: boolean;3616 readonly asTransferReserveAsset: {3617 readonly assets: XcmV1MultiassetMultiAssets;3618 readonly dest: XcmV1MultiLocation;3619 readonly effects: Vec<XcmV1Order>;3620 } & Struct;3621 readonly isTransact: boolean;3622 readonly asTransact: {3623 readonly originType: XcmV0OriginKind;3624 readonly requireWeightAtMost: u64;3625 readonly call: XcmDoubleEncoded;3626 } & Struct;3627 readonly isHrmpNewChannelOpenRequest: boolean;3628 readonly asHrmpNewChannelOpenRequest: {3629 readonly sender: Compact<u32>;3630 readonly maxMessageSize: Compact<u32>;3631 readonly maxCapacity: Compact<u32>;3632 } & Struct;3633 readonly isHrmpChannelAccepted: boolean;3634 readonly asHrmpChannelAccepted: {3635 readonly recipient: Compact<u32>;3636 } & Struct;3637 readonly isHrmpChannelClosing: boolean;3638 readonly asHrmpChannelClosing: {3639 readonly initiator: Compact<u32>;3640 readonly sender: Compact<u32>;3641 readonly recipient: Compact<u32>;3642 } & Struct;3643 readonly isRelayedFrom: boolean;3644 readonly asRelayedFrom: {3645 readonly who: XcmV1MultilocationJunctions;3646 readonly message: XcmV1Xcm;3647 } & Struct;3648 readonly isSubscribeVersion: boolean;3649 readonly asSubscribeVersion: {3650 readonly queryId: Compact<u64>;3651 readonly maxResponseWeight: Compact<u64>;3652 } & Struct;3653 readonly isUnsubscribeVersion: boolean;3654 readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom' | 'SubscribeVersion' | 'UnsubscribeVersion';3655}36563657/** @name XcmV2Instruction */3658export interface XcmV2Instruction extends Enum {3659 readonly isWithdrawAsset: boolean;3660 readonly asWithdrawAsset: XcmV1MultiassetMultiAssets;3661 readonly isReserveAssetDeposited: boolean;3662 readonly asReserveAssetDeposited: XcmV1MultiassetMultiAssets;3663 readonly isReceiveTeleportedAsset: boolean;3664 readonly asReceiveTeleportedAsset: XcmV1MultiassetMultiAssets;3665 readonly isQueryResponse: boolean;3666 readonly asQueryResponse: {3667 readonly queryId: Compact<u64>;3668 readonly response: XcmV2Response;3669 readonly maxWeight: Compact<u64>;3670 } & Struct;3671 readonly isTransferAsset: boolean;3672 readonly asTransferAsset: {3673 readonly assets: XcmV1MultiassetMultiAssets;3674 readonly beneficiary: XcmV1MultiLocation;3675 } & Struct;3676 readonly isTransferReserveAsset: boolean;3677 readonly asTransferReserveAsset: {3678 readonly assets: XcmV1MultiassetMultiAssets;3679 readonly dest: XcmV1MultiLocation;3680 readonly xcm: XcmV2Xcm;3681 } & Struct;3682 readonly isTransact: boolean;3683 readonly asTransact: {3684 readonly originType: XcmV0OriginKind;3685 readonly requireWeightAtMost: Compact<u64>;3686 readonly call: XcmDoubleEncoded;3687 } & Struct;3688 readonly isHrmpNewChannelOpenRequest: boolean;3689 readonly asHrmpNewChannelOpenRequest: {3690 readonly sender: Compact<u32>;3691 readonly maxMessageSize: Compact<u32>;3692 readonly maxCapacity: Compact<u32>;3693 } & Struct;3694 readonly isHrmpChannelAccepted: boolean;3695 readonly asHrmpChannelAccepted: {3696 readonly recipient: Compact<u32>;3697 } & Struct;3698 readonly isHrmpChannelClosing: boolean;3699 readonly asHrmpChannelClosing: {3700 readonly initiator: Compact<u32>;3701 readonly sender: Compact<u32>;3702 readonly recipient: Compact<u32>;3703 } & Struct;3704 readonly isClearOrigin: boolean;3705 readonly isDescendOrigin: boolean;3706 readonly asDescendOrigin: XcmV1MultilocationJunctions;3707 readonly isReportError: boolean;3708 readonly asReportError: {3709 readonly queryId: Compact<u64>;3710 readonly dest: XcmV1MultiLocation;3711 readonly maxResponseWeight: Compact<u64>;3712 } & Struct;3713 readonly isDepositAsset: boolean;3714 readonly asDepositAsset: {3715 readonly assets: XcmV1MultiassetMultiAssetFilter;3716 readonly maxAssets: Compact<u32>;3717 readonly beneficiary: XcmV1MultiLocation;3718 } & Struct;3719 readonly isDepositReserveAsset: boolean;3720 readonly asDepositReserveAsset: {3721 readonly assets: XcmV1MultiassetMultiAssetFilter;3722 readonly maxAssets: Compact<u32>;3723 readonly dest: XcmV1MultiLocation;3724 readonly xcm: XcmV2Xcm;3725 } & Struct;3726 readonly isExchangeAsset: boolean;3727 readonly asExchangeAsset: {3728 readonly give: XcmV1MultiassetMultiAssetFilter;3729 readonly receive: XcmV1MultiassetMultiAssets;3730 } & Struct;3731 readonly isInitiateReserveWithdraw: boolean;3732 readonly asInitiateReserveWithdraw: {3733 readonly assets: XcmV1MultiassetMultiAssetFilter;3734 readonly reserve: XcmV1MultiLocation;3735 readonly xcm: XcmV2Xcm;3736 } & Struct;3737 readonly isInitiateTeleport: boolean;3738 readonly asInitiateTeleport: {3739 readonly assets: XcmV1MultiassetMultiAssetFilter;3740 readonly dest: XcmV1MultiLocation;3741 readonly xcm: XcmV2Xcm;3742 } & Struct;3743 readonly isQueryHolding: boolean;3744 readonly asQueryHolding: {3745 readonly queryId: Compact<u64>;3746 readonly dest: XcmV1MultiLocation;3747 readonly assets: XcmV1MultiassetMultiAssetFilter;3748 readonly maxResponseWeight: Compact<u64>;3749 } & Struct;3750 readonly isBuyExecution: boolean;3751 readonly asBuyExecution: {3752 readonly fees: XcmV1MultiAsset;3753 readonly weightLimit: XcmV2WeightLimit;3754 } & Struct;3755 readonly isRefundSurplus: boolean;3756 readonly isSetErrorHandler: boolean;3757 readonly asSetErrorHandler: XcmV2Xcm;3758 readonly isSetAppendix: boolean;3759 readonly asSetAppendix: XcmV2Xcm;3760 readonly isClearError: boolean;3761 readonly isClaimAsset: boolean;3762 readonly asClaimAsset: {3763 readonly assets: XcmV1MultiassetMultiAssets;3764 readonly ticket: XcmV1MultiLocation;3765 } & Struct;3766 readonly isTrap: boolean;3767 readonly asTrap: Compact<u64>;3768 readonly isSubscribeVersion: boolean;3769 readonly asSubscribeVersion: {3770 readonly queryId: Compact<u64>;3771 readonly maxResponseWeight: Compact<u64>;3772 } & Struct;3773 readonly isUnsubscribeVersion: boolean;3774 readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion';3775}37763777/** @name XcmV2Response */3778export interface XcmV2Response extends Enum {3779 readonly isNull: boolean;3780 readonly isAssets: boolean;3781 readonly asAssets: XcmV1MultiassetMultiAssets;3782 readonly isExecutionResult: boolean;3783 readonly asExecutionResult: Option<ITuple<[u32, XcmV2TraitsError]>>;3784 readonly isVersion: boolean;3785 readonly asVersion: u32;3786 readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version';3787}37883789/** @name XcmV2TraitsError */3790export interface XcmV2TraitsError extends Enum {3791 readonly isOverflow: boolean;3792 readonly isUnimplemented: boolean;3793 readonly isUntrustedReserveLocation: boolean;3794 readonly isUntrustedTeleportLocation: boolean;3795 readonly isMultiLocationFull: boolean;3796 readonly isMultiLocationNotInvertible: boolean;3797 readonly isBadOrigin: boolean;3798 readonly isInvalidLocation: boolean;3799 readonly isAssetNotFound: boolean;3800 readonly isFailedToTransactAsset: boolean;3801 readonly isNotWithdrawable: boolean;3802 readonly isLocationCannotHold: boolean;3803 readonly isExceedsMaxMessageSize: boolean;3804 readonly isDestinationUnsupported: boolean;3805 readonly isTransport: boolean;3806 readonly isUnroutable: boolean;3807 readonly isUnknownClaim: boolean;3808 readonly isFailedToDecode: boolean;3809 readonly isMaxWeightInvalid: boolean;3810 readonly isNotHoldingFees: boolean;3811 readonly isTooExpensive: boolean;3812 readonly isTrap: boolean;3813 readonly asTrap: u64;3814 readonly isUnhandledXcmVersion: boolean;3815 readonly isWeightLimitReached: boolean;3816 readonly asWeightLimitReached: u64;3817 readonly isBarrier: boolean;3818 readonly isWeightNotComputable: boolean;3819 readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable';3820}38213822/** @name XcmV2TraitsOutcome */3823export interface XcmV2TraitsOutcome extends Enum {3824 readonly isComplete: boolean;3825 readonly asComplete: u64;3826 readonly isIncomplete: boolean;3827 readonly asIncomplete: ITuple<[u64, XcmV2TraitsError]>;3828 readonly isError: boolean;3829 readonly asError: XcmV2TraitsError;3830 readonly type: 'Complete' | 'Incomplete' | 'Error';3831}38323833/** @name XcmV2WeightLimit */3834export interface XcmV2WeightLimit extends Enum {3835 readonly isUnlimited: boolean;3836 readonly isLimited: boolean;3837 readonly asLimited: Compact<u64>;3838 readonly type: 'Unlimited' | 'Limited';3839}38403841/** @name XcmV2Xcm */3842export interface XcmV2Xcm extends Vec<XcmV2Instruction> {}38433844/** @name XcmVersionedMultiAsset */3845export interface XcmVersionedMultiAsset extends Enum {3846 readonly isV0: boolean;3847 readonly asV0: XcmV0MultiAsset;3848 readonly isV1: boolean;3849 readonly asV1: XcmV1MultiAsset;3850 readonly type: 'V0' | 'V1';3851}38523853/** @name XcmVersionedMultiAssets */3854export interface XcmVersionedMultiAssets extends Enum {3855 readonly isV0: boolean;3856 readonly asV0: Vec<XcmV0MultiAsset>;3857 readonly isV1: boolean;3858 readonly asV1: XcmV1MultiassetMultiAssets;3859 readonly type: 'V0' | 'V1';3860}38613862/** @name XcmVersionedMultiLocation */3863export interface XcmVersionedMultiLocation extends Enum {3864 readonly isV0: boolean;3865 readonly asV0: XcmV0MultiLocation;3866 readonly isV1: boolean;3867 readonly asV1: XcmV1MultiLocation;3868 readonly type: 'V0' | 'V1';3869}38703871/** @name XcmVersionedXcm */3872export interface XcmVersionedXcm extends Enum {3873 readonly isV0: boolean;3874 readonly asV0: XcmV0Xcm;3875 readonly isV1: boolean;3876 readonly asV1: XcmV1Xcm;3877 readonly isV2: boolean;3878 readonly asV2: XcmV2Xcm;3879 readonly type: 'V0' | 'V1' | 'V2';3880}38813882export type PHANTOM_DEFAULT = 'default';tests/src/interfaces/lookup.tsdiffbeforeafterboth--- a/tests/src/interfaces/lookup.ts
+++ b/tests/src/interfaces/lookup.ts
@@ -2264,6 +2264,13 @@
itemId: 'u32',
amount: 'u128',
},
+ approve_from: {
+ from: 'PalletEvmAccountBasicCrossAccountIdRepr',
+ to: 'PalletEvmAccountBasicCrossAccountIdRepr',
+ collectionId: 'u32',
+ itemId: 'u32',
+ amount: 'u128',
+ },
transfer_from: {
from: 'PalletEvmAccountBasicCrossAccountIdRepr',
recipient: 'PalletEvmAccountBasicCrossAccountIdRepr',
@@ -3280,7 +3287,7 @@
* Lookup423: pallet_common::pallet::Error<T>
**/
PalletCommonError: {
- _enum: ['CollectionNotFound', 'MustBeTokenOwner', 'NoPermission', 'CantDestroyNotEmptyCollection', 'PublicMintingNotAllowed', 'AddressNotInAllowlist', 'CollectionNameLimitExceeded', 'CollectionDescriptionLimitExceeded', 'CollectionTokenPrefixLimitExceeded', 'TotalCollectionsLimitExceeded', 'CollectionAdminCountExceeded', 'CollectionLimitBoundsExceeded', 'OwnerPermissionsCantBeReverted', 'TransferNotAllowed', 'AccountTokenLimitExceeded', 'CollectionTokenLimitExceeded', 'MetadataFlagFrozen', 'TokenNotFound', 'TokenValueTooLow', 'ApprovedValueTooLow', 'CantApproveMoreThanOwned', 'AddressIsZero', 'UnsupportedOperation', 'NotSufficientFounds', 'UserIsNotAllowedToNest', 'SourceCollectionIsNotAllowedToNest', 'CollectionFieldSizeExceeded', 'NoSpaceForProperty', 'PropertyLimitReached', 'PropertyKeyIsTooLong', 'InvalidCharacterInPropertyKey', 'EmptyPropertyKey', 'CollectionIsExternal', 'CollectionIsInternal', 'ConfirmSponsorshipFail', 'UserIsNotCollectionAdmin']
+ _enum: ['CollectionNotFound', 'MustBeTokenOwner', 'NoPermission', 'CantDestroyNotEmptyCollection', 'PublicMintingNotAllowed', 'AddressNotInAllowlist', 'CollectionNameLimitExceeded', 'CollectionDescriptionLimitExceeded', 'CollectionTokenPrefixLimitExceeded', 'TotalCollectionsLimitExceeded', 'CollectionAdminCountExceeded', 'CollectionLimitBoundsExceeded', 'OwnerPermissionsCantBeReverted', 'TransferNotAllowed', 'AccountTokenLimitExceeded', 'CollectionTokenLimitExceeded', 'MetadataFlagFrozen', 'TokenNotFound', 'TokenValueTooLow', 'ApprovedValueTooLow', 'CantApproveMoreThanOwned', 'AddressIsNotEthMirror', 'AddressIsZero', 'UnsupportedOperation', 'NotSufficientFounds', 'UserIsNotAllowedToNest', 'SourceCollectionIsNotAllowedToNest', 'CollectionFieldSizeExceeded', 'NoSpaceForProperty', 'PropertyLimitReached', 'PropertyKeyIsTooLong', 'InvalidCharacterInPropertyKey', 'EmptyPropertyKey', 'CollectionIsExternal', 'CollectionIsInternal', 'ConfirmSponsorshipFail', 'UserIsNotCollectionAdmin']
},
/**
* Lookup425: pallet_fungible::pallet::Error<T>
tests/src/interfaces/types-lookup.tsdiffbeforeafterboth--- a/tests/src/interfaces/types-lookup.ts
+++ b/tests/src/interfaces/types-lookup.ts
@@ -2493,6 +2493,14 @@
readonly itemId: u32;
readonly amount: u128;
} & Struct;
+ readonly isApproveFrom: boolean;
+ readonly asApproveFrom: {
+ readonly from: PalletEvmAccountBasicCrossAccountIdRepr;
+ readonly to: PalletEvmAccountBasicCrossAccountIdRepr;
+ readonly collectionId: u32;
+ readonly itemId: u32;
+ readonly amount: u128;
+ } & Struct;
readonly isTransferFrom: boolean;
readonly asTransferFrom: {
readonly from: PalletEvmAccountBasicCrossAccountIdRepr;
@@ -2532,7 +2540,7 @@
readonly collectionId: u32;
readonly itemId: u32;
} & Struct;
- readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions' | 'Repartition' | 'SetAllowanceForAll' | 'ForceRepairCollection' | 'ForceRepairItem';
+ readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'ApproveFrom' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions' | 'Repartition' | 'SetAllowanceForAll' | 'ForceRepairCollection' | 'ForceRepairItem';
}
/** @name UpDataStructsCollectionMode (236) */
@@ -3564,6 +3572,7 @@
readonly isTokenValueTooLow: boolean;
readonly isApprovedValueTooLow: boolean;
readonly isCantApproveMoreThanOwned: boolean;
+ readonly isAddressIsNotEthMirror: boolean;
readonly isAddressIsZero: boolean;
readonly isUnsupportedOperation: boolean;
readonly isNotSufficientFounds: boolean;
@@ -3579,7 +3588,7 @@
readonly isCollectionIsInternal: boolean;
readonly isConfirmSponsorshipFail: boolean;
readonly isUserIsNotCollectionAdmin: boolean;
- readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'CantDestroyNotEmptyCollection' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'UserIsNotAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey' | 'CollectionIsExternal' | 'CollectionIsInternal' | 'ConfirmSponsorshipFail' | 'UserIsNotCollectionAdmin';
+ readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'CantDestroyNotEmptyCollection' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsNotEthMirror' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'UserIsNotAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey' | 'CollectionIsExternal' | 'CollectionIsInternal' | 'ConfirmSponsorshipFail' | 'UserIsNotCollectionAdmin';
}
/** @name PalletFungibleError (425) */
tests/src/util/playgrounds/unique.tsdiffbeforeafterboth--- a/tests/src/util/playgrounds/unique.ts
+++ b/tests/src/util/playgrounds/unique.ts
@@ -633,6 +633,10 @@
let call = this.getApi() as any;
for(const part of apiCall.slice(4).split('.')) {
call = call[part];
+ if (!call) {
+ const advice = part.includes('_') ? ' Looks like it needs to be converted to camel case.' : '';
+ throw Error(`Function ${part} of api call ${apiCall} not found.${advice}`);
+ }
}
return call(...params);
}
@@ -1259,6 +1263,42 @@
}
/**
+ * Set, change, or remove approved address to transfer the ownership of the NFT from eth mirror.
+ *
+ * @param signer keyring of signer
+ * @param collectionId ID of collection
+ * @param tokenId ID of token
+ * @param fromAddressObj Signer's Ethereum address containing her tokens
+ * @param toAddressObj Substrate or Ethereum address which gets approved use of the signer's tokens
+ * @param amount amount of token to be approved. For NFT must be set to 1n
+ * @returns ```true``` if extrinsic success, otherwise ```false```
+ */
+ async approveTokenFrom(signer: IKeyringPair, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId, amount=1n) {
+ const approveResult = await this.helper.executeExtrinsic(
+ signer,
+ 'api.tx.unique.approveFrom', [fromAddressObj, toAddressObj, collectionId, tokenId, amount],
+ true, // `Unable to approve token for ${label}`,
+ );
+
+ return this.helper.util.findCollectionInEvents(approveResult.result.events, collectionId, 'common', 'Approved');
+ }
+
+ /**
+ * Set, change, or remove approved address to transfer the ownership of the NFT from eth mirror.
+ *
+ * @param signer keyring of signer
+ * @param collectionId ID of collection
+ * @param tokenId ID of token
+ * @param toAddressObj Substrate or Ethereum address which gets approved use of the signer's tokens
+ * @param amount amount of token to be approved. For NFT must be set to 1n
+ * @returns ```true``` if extrinsic success, otherwise ```false```
+ */
+ async approveTokenFromEth(signer: IKeyringPair, collectionId: number, tokenId: number, toAddressObj: ICrossAccountId, amount=1n) {
+ const ethMirror = CrossAccountId.fromKeyring(signer).toEthereum();
+ return await this.approveTokenFrom(signer, collectionId, tokenId, ethMirror, toAddressObj, amount);
+ }
+
+ /**
* Get the amount of token pieces approved to transfer or burn. Normally 0.
*
* @param collectionId ID of collection
@@ -1756,8 +1796,8 @@
* @example approveToken(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."})
* @returns ```true``` if extrinsic success, otherwise ```false```
*/
- approveToken(signer: IKeyringPair, collectionId: number, tokenId: number, toAddressObj: ICrossAccountId) {
- return super.approveToken(signer, collectionId, tokenId, toAddressObj, 1n);
+ approveToken(signer: IKeyringPair, collectionId: number, tokenId: number, toAddressObj: ICrossAccountId, amount=1n) {
+ return super.approveToken(signer, collectionId, tokenId, toAddressObj, amount);
}
}