difftreelog
tests(collator-selection): integration tests + types + minor refactor of thee pallet
in: master
20 files changed
node/cli/src/chain_spec.rsdiffbeforeafterboth--- a/node/cli/src/chain_spec.rs
+++ b/node/cli/src/chain_spec.rs
@@ -196,9 +196,9 @@
.cloned()
.map(|(acc, _)| acc)
.collect(),
+ desired_collators: 10,
license_bond: GENESIS_LICENSE_BOND,
kick_threshold: SESSION_LENGTH,
- ..Default::default()
},
session: SessionConfig {
keys: $initial_invulnerables
pallets/collator-selection/src/lib.rsdiffbeforeafterboth--- a/pallets/collator-selection/src/lib.rs
+++ b/pallets/collator-selection/src/lib.rs
@@ -183,11 +183,8 @@
/// The (community, limited) collation candidates.
#[pallet::storage]
#[pallet::getter(fn candidates)]
- pub type Candidates<T: Config> = StorageValue<
- _,
- BoundedVec<T::AccountId, T::MaxCollators>, //LicenseInfo<T::AccountId, BalanceOf<T>>, T::MaxCollators>, // license ID?
- ValueQuery,
- >;
+ pub type Candidates<T: Config> =
+ StorageValue<_, BoundedVec<T::AccountId, T::MaxCollators>, ValueQuery>;
/// Collator will be kicked if it does not produce a block within the threshold (does not apply to invulnerables).
///
@@ -348,7 +345,6 @@
T::ValidatorRegistration::is_registered(&validator_key),
Error::<T>::ValidatorNotRegistered
);
- // ensure!(!Self::invulnerables().contains(&new), Error::<T>::AlreadyInvulnerable);
if Self::invulnerables().contains(&new) {
return Ok(().into());
}
@@ -371,7 +367,6 @@
) -> DispatchResultWithPostInfo {
T::UpdateOrigin::ensure_origin(origin)?;
- // let index = Self::invulnerables().into_iter().position(|r| r == who).ok_or(Error::<T>::NotInvulnerable)?;
<Invulnerables<T>>::try_mutate(|invulnerables| -> DispatchResult {
if invulnerables.len() <= 1 {
return Err(Error::<T>::TooFewInvulnerables.into());
@@ -384,10 +379,6 @@
invulnerables.remove(index);
Ok(())
})?;
- /*let bounded_invulnerables = BoundedVec::<_, T::MaxInvulnerables>::try_from(new)
- .map_err(|_| Error::<T>::TooManyInvulnerables)?;
-
- <Invulnerables<T>>::put(&bounded_invulnerables);*/
Self::deposit_event(Event::InvulnerableRemoved { invulnerable: who });
Ok(().into())
}
@@ -451,11 +442,6 @@
return Err(Error::<T>::AlreadyHoldingLicense.into());
}
- /*ensure!(
- !Self::invulnerables().contains(&who),
- Error::<T>::AlreadyInvulnerable
- );*/
-
let validator_key = T::ValidatorIdOf::convert(who.clone())
.ok_or(Error::<T>::NoAssociatedValidatorId)?;
ensure!(
@@ -464,34 +450,9 @@
);
let deposit = Self::license_bond();
- // First authored block is current block plus kick threshold to handle session delay
- /*let incoming = LicenseInfo {
- who: who.clone(),
- deposit,
- };*/
T::Currency::reserve(&who, deposit)?;
Licenses::<T>::insert(who.clone(), deposit);
-
- /*let current_count =
- <Licenses<T>>::try_mutate(|licenses| -> Result<usize, DispatchError> {
- if T::OriginPrivilegeCmp::cmp_privilege(&origin, &scheduled.origin) {
- return Err(BadOrigin.into());
- }
- if candidates.iter().any(|candidate| *candidate == who) {
- Err(Error::<T>::AlreadyHoldingLicense)?
- } else {
- T::Currency::reserve(&who, deposit)?;
- candidates
- .try_push(incoming)
- .map_err(|_| Error::<T>::TooManyCandidates)?;
- <LastAuthoredBlock<T>>::insert(
- who.clone(),
- frame_system::Pallet::<T>::block_number() + Self::kick_threshold(),
- );
- Ok(candidates.len())
- }
- })?;*/
Self::deposit_event(Event::LicenseObtained {
account_id: who,
@@ -518,17 +479,11 @@
(length as u32) < Self::desired_collators(),
Error::<T>::TooManyCandidates
);
- // todo:collator really need it?
ensure!(
!Self::invulnerables().contains(&who),
Error::<T>::AlreadyInvulnerable
);
- /*let incoming = LicenseInfo {
- who: who.clone(),
- deposit,
- };*/
-
let current_count =
<Candidates<T>>::try_mutate(|candidates| -> Result<usize, DispatchError> {
if candidates.iter().any(|candidate| *candidate == who) {
@@ -552,17 +507,10 @@
/// Deregister `origin` as a collator candidate. Note that the collator can only leave on
/// session change. The license to `onboard` later at any other time will remain.
- ///
- /// This call will fail if the total number of candidates would drop below `MinCandidates`. todo:collator maybe not
#[pallet::weight(T::WeightInfo::leave_intent(T::MaxCollators::get()))] // todo:collator weight
pub fn offboard(origin: OriginFor<T>) -> DispatchResultWithPostInfo {
// leave_intent
let who = ensure_signed(origin)?;
- /* todo:collator invulnerables and candidates should count against min candidates together
- ensure!(
- Self::candidates().len() as u32 > T::MinCandidates::get(),
- Error::<T>::TooFewCandidates
- );*/
let current_count = Self::try_remove_candidate(&who)?;
Ok(Some(T::WeightInfo::leave_intent(current_count as u32)).into()) // todo:collator weight
@@ -585,7 +533,7 @@
/// Note that the collator can only leave on session change.
/// The `LicenseBond` will be unreserved and returned immediately.
///
- /// This call is not available to `Invulnerable` collators.
+ /// This call is, of course, not applicable to `Invulnerable` collators.
#[pallet::weight(T::WeightInfo::leave_intent(T::MaxCollators::get()))] // todo:collator weight
pub fn force_revoke_license(
origin: OriginFor<T>,
@@ -606,6 +554,8 @@
T::PotId::get().into_account_truncating()
}
+ /// Removes a candidate and their license, optionally slashed and optionally ignoring,
+ /// whether or not they actually are a candidate.
fn try_remove_candidate_and_release_license(
who: &T::AccountId,
should_slash: bool,
@@ -687,7 +637,7 @@
/// Kicks out candidates that did not produce a block in the kick threshold
/// and **confiscates** their deposits to the treasury.
pub fn kick_stale_candidates(
- candidates: BoundedVec<T::AccountId, T::MaxCollators>, //LicenseInfo<T::AccountId, BalanceOf<T>>
+ candidates: BoundedVec<T::AccountId, T::MaxCollators>,
) -> BoundedVec<T::AccountId, T::MaxCollators> {
let now = frame_system::Pallet::<T>::block_number();
let kick_threshold = Self::kick_threshold();
pallets/collator-selection/src/mock.rsdiffbeforeafterboth--- a/pallets/collator-selection/src/mock.rs
+++ b/pallets/collator-selection/src/mock.rs
@@ -223,13 +223,11 @@
}
impl Config for Test {
- // todo:collator mocks and stocks
type RuntimeEvent = RuntimeEvent;
type Currency = Balances;
type UpdateOrigin = EnsureSignedBy<RootAccount, u64>;
type PotId = PotId;
type MaxCollators = MaxCollators;
- // type KickThreshold = Period;
type SlashRatio = SlashRatio;
type TreasuryAccountId = ();
type ValidatorId = <Self as frame_system::Config>::AccountId;
pallets/collator-selection/src/tests.rsdiffbeforeafterboth--- a/pallets/collator-selection/src/tests.rs
+++ b/pallets/collator-selection/src/tests.rs
@@ -59,9 +59,6 @@
});
}
-// todo:collator add more tests later
-// invulnerable after onboard + invulnerables can bypass desired_candidates
-
#[test]
fn it_should_add_invulnerables() {
new_test_ext().execute_with(|| {
runtime/common/mod.rsdiffbeforeafterboth--- a/runtime/common/mod.rs
+++ b/runtime/common/mod.rs
@@ -191,7 +191,7 @@
RuntimeAppPublic,
};
use pallet_session::SessionManager;
- use up_common::constants::GENESIS_LICENSE_BOND;
+ use up_common::constants::{GENESIS_LICENSE_BOND, SESSION_LENGTH};
use crate::config::pallets::collator_selection::MaxCollators;
let mut weight = <Runtime as frame_system::Config>::DbWeight::get().reads(1);
@@ -241,6 +241,7 @@
.expect("Existing collators/invulnerables are more than MaxCollators");
<pallet_collator_selection::Invulnerables<Runtime>>::put(bounded_invulnerables);
+ <pallet_collator_selection::KickThreshold<Runtime>>::put(SESSION_LENGTH);
<pallet_collator_selection::DesiredCollators<Runtime>>::put(MaxCollators::get());
<pallet_collator_selection::LicenseBond<Runtime>>::put(GENESIS_LICENSE_BOND);
tests/src/collatorSelection.seqtest.tsdiffbeforeafterboth--- a/tests/src/collatorSelection.seqtest.ts
+++ b/tests/src/collatorSelection.seqtest.ts
@@ -17,6 +17,8 @@
import {IKeyringPair} from '@polkadot/types/types';
import {usingPlaygrounds, expect, itSub, Pallets, requirePalletsOrSkip} from './util';
+const MAX_INVULNERABLES = 10;
+
async function resetInvulnerables() {
await usingPlaygrounds(async (helper, privateKey) => {
const superuser = await privateKey('//Alice');
@@ -28,6 +30,15 @@
+ 'Current invulnerables\' size: ' + invulnerables.length);
let nonce = await helper.chain.getNonce(alice.address);
+ // In case there are too many invulnerables already, remove some of them, leaving space for Alice and Bob.
+ if (invulnerables.length + 2 >= MAX_INVULNERABLES) {
+ await Promise.all([
+ helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [invulnerables.pop()], true, {nonce: nonce++}),
+ helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [invulnerables.pop()], true, {nonce: nonce++}),
+ ]);
+ }
+
+ nonce = await helper.chain.getNonce(alice.address);
await Promise.all([
helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.addInvulnerable', [alice.address], true, {nonce: nonce++}),
helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.addInvulnerable', [bob.address], true, {nonce: nonce++}),
@@ -43,14 +54,19 @@
}
// todo:collator Most preferable to launch this test in parallel somehow -- or change the session period (1 hr).
-// + 18 tests: 5 (1+4) on session change
describe('Integration Test: Collator Selection', () => {
let superuser: IKeyringPair;
+ let previousLicenseBond = 0n;
+ let licenseBond = 0n;
before(async function() {
await usingPlaygrounds(async (helper, privateKey) => {
requirePalletsOrSkip(this, helper, [Pallets.CollatorSelection]);
superuser = await privateKey('//Alice');
+
+ previousLicenseBond = await helper.collatorSelection.getLicenseBond();
+ licenseBond = 10n * helper.balance.getOneTokenNominal();
+ await helper.getSudo().collatorSelection.setLicenseBond(superuser, licenseBond);
});
});
@@ -73,13 +89,11 @@
charlie = await privateKey('//Charlie');
dave = await privateKey('//Dave');
- expect((await helper.collatorSelection.setOwnKeys(charlie))
+ expect((await helper.session.setOwnKeysFromAddress(charlie))
.status.toLowerCase()).to.be.equal('success');
- expect((await helper.collatorSelection.setOwnKeys(dave))
+ expect((await helper.session.setOwnKeysFromAddress(dave))
.status.toLowerCase()).to.be.equal('success');
- // todo:collator check necessity + add RPC for invulnerables / just improve in general
- // validators = await helper.callRpc('api.query.session.validators');
const invulnerables = await helper.collatorSelection.getInvulnerables();
if (!invulnerables.includes(alice.address) || !invulnerables.includes(bob.address) || invulnerables.length != 2) {
console.warn('Alice and Bob are not the invulnerables! Reinstating them back. '
@@ -116,19 +130,7 @@
const newInvulnerables = await helper.collatorSelection.getInvulnerables();
expect(newInvulnerables).to.contain(charlie.address).and.contain(dave.address).and.be.length(2);
- const expectedSessionIndex = (await helper.callRpc('api.query.session.currentIndex')).toNumber() + 2;
- let currentSessionIndex = -1;
- console.log('Waiting for the session after the next.'
- + ' This might take a while -- check SessionPeriod in pallet_session::Config for session time.');
-
- while (currentSessionIndex < expectedSessionIndex) {
- // eslint-disable-next-line no-async-promise-executor
- currentSessionIndex = await expect(helper.wait.withTimeout(new Promise(async (resolve) => {
- await helper.wait.newBlocks(1);
- const res = (await helper.callRpc('api.query.session.currentIndex')).toNumber();
- resolve(res);
- }), 24000, 'The chain has stopped producing blocks!')).to.be.fulfilled;
- }
+ await helper.wait.newSessions(2);
const newValidators = await helper.callRpc('api.query.session.validators');
expect(newValidators).to.contain(charlie.address).and.contain(dave.address).and.be.length(2);
@@ -140,9 +142,6 @@
expect(lastCharlieBlock >= lastBlockNumber || lastDaveBlock >= lastBlockNumber).to.be.true;
});
- // todo:collator keyless invulnerables? will hang, so, a breaking test, eh
- // register candidate without sudos and the like
-
after(async () => {
await usingPlaygrounds(async (helper) => {
if (await helper.arrange.isDevNode()) return;
@@ -162,9 +161,185 @@
});
});
- // todo:collator make sure that there is enough session time for a set of tests
- // 28 non-functioning collators, teehee.
+ describe('Getting and releasing licenses to collate', () => {
+ let charlie: IKeyringPair;
+ let dave: IKeyringPair;
+ let crowd: IKeyringPair[];
+
+ before(async function() {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ charlie = await privateKey('//Charlie');
+ dave = await privateKey('//Dave');
+ crowd = await helper.arrange.createCrowd(20, 100n, superuser);
+
+ // set session keys for everyone
+ expect((await helper.session.setOwnKeysFromAddress(charlie))
+ .status.toLowerCase()).to.be.equal('success');
+ expect((await helper.session.setOwnKeysFromAddress(dave))
+ .status.toLowerCase()).to.be.equal('success');
+ await Promise.all(crowd.map(acc => helper.session.setOwnKeysFromAddress(acc)));
+ });
+ });
+
+ describe('Positive', () => {
+ itSub('Can lease and release a license', async ({helper}) => {
+ const account = crowd.pop()!;
+
+ // make sure it does not have any reserved funds
+ expect((await helper.balance.getSubstrateFull(account.address)).reserved).to.be.equal(0n);
+
+ // getting a license reserves a license bond cost
+ await helper.collatorSelection.obtainLicense(account);
+ expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(licenseBond);
+ expect((await helper.balance.getSubstrateFull(account.address)).reserved).to.be.equal(licenseBond);
+
+ // releasing a license un-reserves the license bond cost
+ await helper.collatorSelection.releaseLicense(account);
+ expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(0n);
+
+ const balance = await helper.balance.getSubstrateFull(account.address);
+ expect(balance.reserved).to.be.equal(0n);
+ expect(balance.free > 100n - licenseBond);
+ });
+
+ itSub('Can force revoke a license', async ({helper}) => {
+ const account = crowd.pop()!;
+
+ // getting a license reserves a license bond cost
+ const previousBalance = await helper.balance.getSubstrateFull(account.address);
+ await helper.collatorSelection.obtainLicense(account);
+ expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(licenseBond);
+
+ // force-releasing a license un-reserves the license bond cost as well
+ await helper.getSudo().collatorSelection.forceRevokeLicense(superuser, account.address);
+ expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(previousBalance.reserved);
+
+ const balance = await helper.balance.getSubstrateFull(account.address);
+ expect(balance.reserved).to.be.equal(previousBalance.reserved);
+ expect(balance.free > previousBalance.free - licenseBond);
+ });
+ });
+ describe('Negative', () => {
+ itSub('Cannot get a license without session keys set', async ({helper}) => {
+ const [account] = await helper.arrange.createAccounts([100n], superuser);
+ await expect(helper.collatorSelection.obtainLicense(account))
+ .to.be.rejectedWith(/collatorSelection.ValidatorNotRegistered/);
+ });
+
+ itSub('Cannot register a license twice', async ({helper}) => {
+ const account = crowd.pop()!;
+ await helper.collatorSelection.obtainLicense(account);
+ await expect(helper.collatorSelection.obtainLicense(account))
+ .to.be.rejectedWith(/collatorSelection.AlreadyHoldingLicense/);
+ });
+
+ itSub('Cannot release a license twice', async ({helper}) => {
+ const account = crowd.pop()!;
+ await helper.collatorSelection.obtainLicense(account);
+ await helper.collatorSelection.releaseLicense(account);
+ await expect(helper.collatorSelection.releaseLicense(account))
+ .to.be.rejectedWith(/collatorSelection.NoLicense/);
+ });
+
+ itSub('Cannot force revoke a license as non-sudo', async ({helper}) => {
+ const account = crowd.pop()!;
+ await helper.collatorSelection.obtainLicense(account);
+ await expect(helper.collatorSelection.forceRevokeLicense(superuser, account.address))
+ .to.be.rejectedWith(/BadOrigin/);
+ });
+ });
+ });
+
+ describe('Onboarding, collating, and offboarding as collator candidates', () => {
+ // These two are the default invulnerables, and should return to be invulnerables after this suite.
+ let charlie: IKeyringPair;
+ let dave: IKeyringPair;
+ let crowd: IKeyringPair[];
+
+ before(async function() {
+ await usingPlaygrounds(async (helper, privateKey) => {
+ charlie = await privateKey('//Charlie');
+ dave = await privateKey('//Dave');
+ crowd = await helper.arrange.createCrowd(20, 100n, superuser);
+
+ // set session keys for everyone
+ expect((await helper.session.setOwnKeysFromAddress(charlie))
+ .status.toLowerCase()).to.be.equal('success');
+ expect((await helper.session.setOwnKeysFromAddress(dave))
+ .status.toLowerCase()).to.be.equal('success');
+ await Promise.all(crowd.map(acc => helper.session.setOwnKeysFromAddress(acc)));
+ });
+ });
+
+ describe('Positive', () => {
+ itSub('Can onboard and offboard repeatedly', async ({helper}) => {
+ const account = crowd.pop()!;
+ await helper.collatorSelection.obtainLicense(account);
+ await helper.collatorSelection.onboard(account);
+ expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([account.address]);
+
+ await helper.collatorSelection.offboard(account);
+ expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([]);
+
+ await helper.collatorSelection.onboard(account);
+ expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([account.address]);
+
+ await helper.collatorSelection.offboard(account);
+ expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([]);
+ });
+
+ itSub('Dithmarschen', async ({helper}) => {
+ // This one shouldn't even be able to produce blocks.
+ const account = crowd.pop()!;
+ await helper.collatorSelection.obtainLicense(account);
+ await helper.collatorSelection.onboard(account);
+ expect(await helper.collatorSelection.getCandidates()).to.contain(account.address);
+
+ // Wait for 3 new sessions before checking that the collator will be kicked:
+ // one to get collator onboarded, and another two for the collator to fail
+ await helper.wait.newSessions(3);
+
+ expect(await helper.collatorSelection.getCandidates()).to.not.contain(account.address);
+ expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(0n);
+
+ // The account's reserved funds get slashed as a penalty
+ const balance = await helper.balance.getSubstrateFull(account.address);
+ expect(balance.reserved).to.be.equal(0n);
+ expect(balance.free < 100n - licenseBond);
+ });
+ });
+
+ describe('Negative', () => {
+ itSub('Cannot onboard without a license', async ({helper}) => {
+ const account = crowd.pop()!;
+ await expect(helper.collatorSelection.onboard(account))
+ .to.be.rejectedWith(/collatorSelection.NoLicense/);
+ });
+
+ itSub('Cannot offboard without a license', async ({helper}) => {
+ const account = crowd.pop()!;
+ await expect(helper.collatorSelection.offboard(account))
+ .to.be.rejectedWith(/collatorSelection.NotCandidate/);
+ });
+
+ itSub('Cannot offboard while not onboarded', async ({helper}) => {
+ const account = crowd.pop()!;
+ await helper.collatorSelection.obtainLicense(account);
+ await expect(helper.collatorSelection.offboard(account))
+ .to.be.rejectedWith(/collatorSelection.NotCandidate/);
+ });
+
+ itSub('Cannot onboard while already onboarded', async ({helper}) => {
+ const account = crowd.pop()!;
+ await helper.collatorSelection.obtainLicense(account);
+ await helper.collatorSelection.onboard(account);
+ await expect(helper.collatorSelection.onboard(account))
+ .to.be.rejectedWith(/collatorSelection.AlreadyCandidate/);
+ });
+ });
+ });
+
describe('Addition and removal of invulnerables', () => {
before(async function() {
await resetInvulnerables();
@@ -175,7 +350,7 @@
const [account] = await helper.arrange.createAccounts([10n], superuser);
const invulnerables = await helper.collatorSelection.getInvulnerables();
- await helper.collatorSelection.setOwnKeys(account);
+ await helper.session.setOwnKeysFromAddress(account);
await helper.getSudo().collatorSelection.addInvulnerable(superuser, account.address);
const newInvulnerables = await helper.collatorSelection.getInvulnerables();
@@ -184,7 +359,7 @@
itSub('Removes an invulnerable', async ({helper}) => {
const invulnerables = await helper.collatorSelection.getInvulnerables();
- const lastInvulnerable = invulnerables.pop();
+ const lastInvulnerable = invulnerables.pop()!;
await helper.getSudo().collatorSelection.removeInvulnerable(superuser, lastInvulnerable);
const newInvulnerables = await helper.collatorSelection.getInvulnerables();
@@ -203,16 +378,22 @@
expect(newInvulnerables).to.have.all.members(invulnerables);
});
+ itSub('Cannot remove a non-existent invulnerable', async ({helper}) => {
+ const [account] = await helper.arrange.createAccounts([0n], superuser);
+ await expect(helper.getSudo().collatorSelection.removeInvulnerable(superuser, account.address))
+ .to.be.rejectedWith(/collatorSelection.NotInvulnerable/);
+ });
+
itSub('Cannot allow invulnerables to be empty', async ({helper}) => {
const invulnerables = await helper.collatorSelection.getInvulnerables();
- const lastInvulnerable = invulnerables.pop();
+ const lastInvulnerable = invulnerables.pop()!;
let nonce = await helper.chain.getNonce(superuser.address);
await Promise.all(invulnerables.map((i: any) =>
helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [i], true, {nonce: nonce++})));
await expect(helper.getSudo().collatorSelection.removeInvulnerable(superuser, lastInvulnerable))
- .to.be.rejected;//todo:collator With(/collatorSelection.TooFewInvulnerables/);
+ .to.be.rejectedWith(/collatorSelection.TooFewInvulnerables/);
const newInvulnerables = await helper.collatorSelection.getInvulnerables();
expect(newInvulnerables).to.be.deep.equal([lastInvulnerable]);
@@ -224,21 +405,24 @@
});
itSub('Cannot have too many invulnerables', async ({helper}) => {
+ // todo:collator make sure that there is enough session time for a set of tests
+ // 28 non-functioning collators, teehee.
+
const invulnerablesLength = (await helper.collatorSelection.getInvulnerables()).length;
- const invulnerablesUntilLimit = 30 - invulnerablesLength;
+ const invulnerablesUntilLimit = MAX_INVULNERABLES - invulnerablesLength;
const newInvulnerables = await helper.arrange.createAccounts(Array(invulnerablesUntilLimit).fill(10n), superuser);
const [lastInvulnerable] = await helper.arrange.createAccounts([10n], superuser);
await Promise.all(newInvulnerables.map((i: IKeyringPair) =>
- helper.collatorSelection.setOwnKeys(i)));
- await helper.collatorSelection.setOwnKeys(lastInvulnerable);
+ helper.session.setOwnKeysFromAddress(i)));
+ await helper.session.setOwnKeysFromAddress(lastInvulnerable);
let nonce = await helper.chain.getNonce(superuser.address);
await Promise.all(newInvulnerables.map((i: IKeyringPair) =>
helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.addInvulnerable', [i.address], true, {nonce: nonce++})));
await expect(helper.getSudo().collatorSelection.addInvulnerable(superuser, lastInvulnerable.address))
- .to.be.rejected; // todo:collator With(/collatorSelection.TooManyInvulnerables/);
+ .to.be.rejectedWith(/collatorSelection.TooManyInvulnerables/);
// restore the invulnerables to the previous state
nonce = await helper.chain.getNonce(superuser.address);
@@ -250,7 +434,7 @@
const [account] = await helper.arrange.createAccounts([10n], superuser);
const invulnerables = await helper.collatorSelection.getInvulnerables();
- await helper.collatorSelection.setOwnKeys(account);
+ await helper.session.setOwnKeysFromAddress(account);
await expect(helper.collatorSelection.addInvulnerable(superuser, account.address))
.to.be.rejectedWith(/BadOrigin/);
@@ -265,14 +449,19 @@
expect(await helper.collatorSelection.getInvulnerables()).to.have.all.members(invulnerables);
});
});
+ });
- after(async () => {
- // eslint-disable-next-line require-await
- await usingPlaygrounds(async (helper) => {
- if (helper.fetchMissingPalletNames([Pallets.CollatorSelection]).length != 0) return;
-
- // todo:collator after
- });
+ after(async () => {
+ // eslint-disable-next-line require-await
+ await usingPlaygrounds(async (helper) => {
+ if (helper.fetchMissingPalletNames([Pallets.CollatorSelection]).length != 0) return;
+
+ await helper.getSudo().collatorSelection.setLicenseBond(superuser, previousLicenseBond);
+
+ const candidates = await helper.collatorSelection.getCandidates();
+ let nonce = await helper.chain.getNonce(superuser.address);
+ await Promise.all(candidates.map(candidate =>
+ helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [candidate], true, {nonce: nonce++})));
});
});
});
\ No newline at end of file
tests/src/interfaces/augment-api-consts.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-consts.ts
+++ b/tests/src/interfaces/augment-api-consts.ts
@@ -41,6 +41,18 @@
**/
[key: string]: Codec;
};
+ authorship: {
+ /**
+ * The number of blocks back we should accept uncles.
+ * This means that we will deal with uncle-parents that are
+ * `UncleGenerations + 1` before `now`.
+ **/
+ uncleGenerations: u32 & AugmentedConst<ApiType>;
+ /**
+ * Generic const
+ **/
+ [key: string]: Codec;
+ };
balances: {
/**
* The minimum amount required to keep an account open.
tests/src/interfaces/augment-api-errors.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-errors.ts
+++ b/tests/src/interfaces/augment-api-errors.ts
@@ -41,6 +41,40 @@
**/
[key: string]: AugmentedError<ApiType>;
};
+ authorship: {
+ /**
+ * The uncle is genesis.
+ **/
+ GenesisUncle: AugmentedError<ApiType>;
+ /**
+ * The uncle parent not in the chain.
+ **/
+ InvalidUncleParent: AugmentedError<ApiType>;
+ /**
+ * The uncle isn't recent enough to be included.
+ **/
+ OldUncle: AugmentedError<ApiType>;
+ /**
+ * The uncle is too high in chain.
+ **/
+ TooHighUncle: AugmentedError<ApiType>;
+ /**
+ * Too many uncles.
+ **/
+ TooManyUncles: AugmentedError<ApiType>;
+ /**
+ * The uncle is already included.
+ **/
+ UncleAlreadyIncluded: AugmentedError<ApiType>;
+ /**
+ * Uncles already set in the block.
+ **/
+ UnclesAlreadySet: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
balances: {
/**
* Beneficiary account must pre-exist
@@ -79,6 +113,64 @@
**/
[key: string]: AugmentedError<ApiType>;
};
+ collatorSelection: {
+ /**
+ * User is already a candidate
+ **/
+ AlreadyCandidate: AugmentedError<ApiType>;
+ /**
+ * User already holds license to collate
+ **/
+ AlreadyHoldingLicense: AugmentedError<ApiType>;
+ /**
+ * User is already an Invulnerable
+ **/
+ AlreadyInvulnerable: AugmentedError<ApiType>;
+ /**
+ * Account has no associated validator ID
+ **/
+ NoAssociatedValidatorId: AugmentedError<ApiType>;
+ /**
+ * User does not hold a license to collate
+ **/
+ NoLicense: AugmentedError<ApiType>;
+ /**
+ * User is not a candidate
+ **/
+ NotCandidate: AugmentedError<ApiType>;
+ /**
+ * User is not an Invulnerable
+ **/
+ NotInvulnerable: AugmentedError<ApiType>;
+ /**
+ * Permission issue
+ **/
+ Permission: AugmentedError<ApiType>;
+ /**
+ * Too few invulnerables
+ **/
+ TooFewInvulnerables: AugmentedError<ApiType>;
+ /**
+ * Too many candidates
+ **/
+ TooManyCandidates: AugmentedError<ApiType>;
+ /**
+ * Too many invulnerables
+ **/
+ TooManyInvulnerables: AugmentedError<ApiType>;
+ /**
+ * Unknown error
+ **/
+ Unknown: AugmentedError<ApiType>;
+ /**
+ * Validator ID is not yet registered
+ **/
+ ValidatorNotRegistered: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
common: {
/**
* Account token limit exceeded per collection
@@ -685,6 +777,32 @@
**/
[key: string]: AugmentedError<ApiType>;
};
+ session: {
+ /**
+ * Registered duplicate key.
+ **/
+ DuplicatedKey: AugmentedError<ApiType>;
+ /**
+ * Invalid ownership proof.
+ **/
+ InvalidProof: AugmentedError<ApiType>;
+ /**
+ * Key setting account is not live, so it's impossible to associate keys.
+ **/
+ NoAccount: AugmentedError<ApiType>;
+ /**
+ * No associated validator ID for account.
+ **/
+ NoAssociatedValidatorId: AugmentedError<ApiType>;
+ /**
+ * No keys are associated with this account.
+ **/
+ NoKeys: AugmentedError<ApiType>;
+ /**
+ * Generic error
+ **/
+ [key: string]: AugmentedError<ApiType>;
+ };
structure: {
/**
* While nesting, reached the breadth limit of nesting, exceeding the provided budget.
tests/src/interfaces/augment-api-events.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-events.ts
+++ b/tests/src/interfaces/augment-api-events.ts
@@ -100,6 +100,21 @@
**/
[key: string]: AugmentedEvent<ApiType>;
};
+ collatorSelection: {
+ CandidateAdded: AugmentedEvent<ApiType, [accountId: AccountId32], { accountId: AccountId32 }>;
+ CandidateRemoved: AugmentedEvent<ApiType, [accountId: AccountId32], { accountId: AccountId32 }>;
+ InvulnerableAdded: AugmentedEvent<ApiType, [invulnerable: AccountId32], { invulnerable: AccountId32 }>;
+ InvulnerableRemoved: AugmentedEvent<ApiType, [invulnerable: AccountId32], { invulnerable: AccountId32 }>;
+ LicenseForfeited: AugmentedEvent<ApiType, [accountId: AccountId32, depositReturned: u128], { accountId: AccountId32, depositReturned: u128 }>;
+ LicenseObtained: AugmentedEvent<ApiType, [accountId: AccountId32, deposit: u128], { accountId: AccountId32, deposit: u128 }>;
+ NewDesiredCollators: AugmentedEvent<ApiType, [desiredCollators: u32], { desiredCollators: u32 }>;
+ NewKickThreshold: AugmentedEvent<ApiType, [lengthInBlocks: u32], { lengthInBlocks: u32 }>;
+ NewLicenseBond: AugmentedEvent<ApiType, [bondAmount: u128], { bondAmount: u128 }>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
common: {
/**
* Address was added to the allow list.
@@ -526,6 +541,17 @@
**/
[key: string]: AugmentedEvent<ApiType>;
};
+ session: {
+ /**
+ * New session has happened. Note that the argument is the session index, not the
+ * block number as the type might suggest.
+ **/
+ NewSession: AugmentedEvent<ApiType, [sessionIndex: u32], { sessionIndex: u32 }>;
+ /**
+ * Generic event
+ **/
+ [key: string]: AugmentedEvent<ApiType>;
+ };
structure: {
/**
* Executed call on behalf of the token.
tests/src/interfaces/augment-api-query.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-query.ts
+++ b/tests/src/interfaces/augment-api-query.ts
@@ -9,7 +9,7 @@
import type { BTreeMap, Bytes, Option, U256, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';
import type { AnyNumber, ITuple } from '@polkadot/types-codec/types';
import type { AccountId32, H160, H256 } from '@polkadot/types/interfaces/runtime';
-import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, EthereumBlock, EthereumLog, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportDispatchPerDispatchClassWeight, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensReserveData, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletConfigurationAppPromotionConfiguration, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletNonfungibleItemData, PalletRefungibleItemData, PalletTransactionPaymentReleases, PalletTreasuryProposal, PhantomTypeUpDataStructs, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, UpDataStructsCollection, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, XcmV1MultiLocation } from '@polkadot/types/lookup';
+import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, EthereumBlock, EthereumLog, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportDispatchPerDispatchClassWeight, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OpalRuntimeRuntimeCommonSessionKeys, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensReserveData, OrmlVestingVestingSchedule, PalletAuthorshipUncleEntryItem, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletConfigurationAppPromotionConfiguration, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletNonfungibleItemData, PalletRefungibleItemData, PalletTransactionPaymentReleases, PalletTreasuryProposal, PhantomTypeUpDataStructs, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, UpDataStructsCollection, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, XcmV1MultiLocation } from '@polkadot/types/lookup';
import type { Observable } from '@polkadot/types/types';
export type __AugmentedQuery<ApiType extends ApiTypes> = AugmentedQuery<ApiType, () => unknown>;
@@ -59,6 +59,24 @@
**/
[key: string]: QueryableStorageEntry<ApiType>;
};
+ authorship: {
+ /**
+ * Author of current block.
+ **/
+ author: AugmentedQuery<ApiType, () => Observable<Option<AccountId32>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Whether uncles were already set in this block.
+ **/
+ didSetUncles: AugmentedQuery<ApiType, () => Observable<bool>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Uncles
+ **/
+ uncles: AugmentedQuery<ApiType, () => Observable<Vec<PalletAuthorshipUncleEntryItem>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
balances: {
/**
* The Balances pallet example of storing the balance of an account.
@@ -117,6 +135,46 @@
**/
[key: string]: QueryableStorageEntry<ApiType>;
};
+ collatorSelection: {
+ /**
+ * The (community, limited) collation candidates.
+ **/
+ candidates: AugmentedQuery<ApiType, () => Observable<Vec<AccountId32>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Desired number of candidates.
+ *
+ * This should ideally always be less than [`Config::MaxCollators`] for weights to be correct.
+ **/
+ desiredCollators: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The invulnerable, fixed collators.
+ **/
+ invulnerables: AugmentedQuery<ApiType, () => Observable<Vec<AccountId32>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Collator will be kicked if it does not produce a block within the threshold (does not apply to invulnerables).
+ *
+ * Should be a multiple of session or things will get inconsistent. todo:collator reword?
+ **/
+ kickThreshold: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Last block authored by collator.
+ **/
+ lastAuthoredBlock: AugmentedQuery<ApiType, (arg: AccountId32 | string | Uint8Array) => Observable<u32>, [AccountId32]> & QueryableStorageEntry<ApiType, [AccountId32]>;
+ /**
+ * Fixed amount to deposit to become a collator.
+ *
+ * When a collator calls `leave_intent` they immediately receive the deposit back.
+ **/
+ licenseBond: AugmentedQuery<ApiType, () => Observable<u128>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The (community) collation license holders.
+ **/
+ licenses: AugmentedQuery<ApiType, (arg: AccountId32 | string | Uint8Array) => Observable<u128>, [AccountId32]> & QueryableStorageEntry<ApiType, [AccountId32]>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
common: {
/**
* Storage of the amount of collection admins.
@@ -687,6 +745,46 @@
**/
[key: string]: QueryableStorageEntry<ApiType>;
};
+ session: {
+ /**
+ * Current index of the session.
+ **/
+ currentIndex: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Indices of disabled validators.
+ *
+ * The vec is always kept sorted so that we can find whether a given validator is
+ * disabled using binary search. It gets cleared when `on_session_ending` returns
+ * a new set of identities.
+ **/
+ disabledValidators: AugmentedQuery<ApiType, () => Observable<Vec<u32>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The owner of a key. The key is the `KeyTypeId` + the encoded key.
+ **/
+ keyOwner: AugmentedQuery<ApiType, (arg: ITuple<[SpCoreCryptoKeyTypeId, Bytes]> | [SpCoreCryptoKeyTypeId | string | Uint8Array, Bytes | string | Uint8Array]) => Observable<Option<AccountId32>>, [ITuple<[SpCoreCryptoKeyTypeId, Bytes]>]> & QueryableStorageEntry<ApiType, [ITuple<[SpCoreCryptoKeyTypeId, Bytes]>]>;
+ /**
+ * The next session keys for a validator.
+ **/
+ nextKeys: AugmentedQuery<ApiType, (arg: AccountId32 | string | Uint8Array) => Observable<Option<OpalRuntimeRuntimeCommonSessionKeys>>, [AccountId32]> & QueryableStorageEntry<ApiType, [AccountId32]>;
+ /**
+ * True if the underlying economic identities or weighting behind the validators
+ * has changed in the queued validator set.
+ **/
+ queuedChanged: AugmentedQuery<ApiType, () => Observable<bool>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The queued keys for the next session. When the next session begins, these keys
+ * will be used to determine the validator's session keys.
+ **/
+ queuedKeys: AugmentedQuery<ApiType, () => Observable<Vec<ITuple<[AccountId32, OpalRuntimeRuntimeCommonSessionKeys]>>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * The current set of validators.
+ **/
+ validators: AugmentedQuery<ApiType, () => Observable<Vec<AccountId32>>, []> & QueryableStorageEntry<ApiType, []>;
+ /**
+ * Generic query
+ **/
+ [key: string]: QueryableStorageEntry<ApiType>;
+ };
structure: {
/**
* Generic query
tests/src/interfaces/augment-api-rpc.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-rpc.ts
+++ b/tests/src/interfaces/augment-api-rpc.ts
@@ -16,7 +16,7 @@
import type { BlockHash } from '@polkadot/types/interfaces/chain';
import type { PrefixedStorageKey } from '@polkadot/types/interfaces/childstate';
import type { AuthorityId } from '@polkadot/types/interfaces/consensus';
-import type { CodeUploadRequest, CodeUploadResult, ContractCallRequest, ContractExecResult, ContractInstantiateResult, InstantiateRequest } from '@polkadot/types/interfaces/contracts';
+import type { CodeUploadRequest, CodeUploadResult, ContractCallRequest, ContractExecResult, ContractInstantiateResult, InstantiateRequestV1 } from '@polkadot/types/interfaces/contracts';
import type { BlockStats } from '@polkadot/types/interfaces/dev';
import type { CreatedBlock } from '@polkadot/types/interfaces/engine';
import type { EthAccount, EthCallRequest, EthFeeHistory, EthFilter, EthFilterChanges, EthLog, EthReceipt, EthRichBlock, EthSubKind, EthSubParams, EthSyncStatus, EthTransaction, EthTransactionRequest, EthWork } from '@polkadot/types/interfaces/eth';
@@ -24,7 +24,7 @@
import type { EncodedFinalityProofs, JustificationNotification, ReportedRoundStates } from '@polkadot/types/interfaces/grandpa';
import type { MmrLeafBatchProof, MmrLeafProof } from '@polkadot/types/interfaces/mmr';
import type { StorageKind } from '@polkadot/types/interfaces/offchain';
-import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment';
+import type { FeeDetails, RuntimeDispatchInfoV1 } from '@polkadot/types/interfaces/payment';
import type { RpcMethods } from '@polkadot/types/interfaces/rpc';
import type { AccountId, AccountId32, BlockNumber, H160, H256, H64, Hash, Header, Index, Justification, KeyValue, SignedBlock, StorageData } from '@polkadot/types/interfaces/runtime';
import type { MigrationStatusResult, ReadProof, RuntimeVersion, TraceBlockResponse } from '@polkadot/types/interfaces/state';
@@ -174,7 +174,7 @@
* @deprecated Use the runtime interface `api.call.contractsApi.instantiate` instead
* Instantiate a new contract
**/
- instantiate: AugmentedRpc<(request: InstantiateRequest | { origin?: any; value?: any; gasLimit?: any; storageDepositLimit?: any; code?: any; data?: any; salt?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<ContractInstantiateResult>>;
+ instantiate: AugmentedRpc<(request: InstantiateRequestV1 | { origin?: any; value?: any; gasLimit?: any; code?: any; data?: any; salt?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<ContractInstantiateResult>>;
/**
* @deprecated Not available in newer versions of the contracts interfaces
* Returns the projected time a given contract will be able to sustain paying its rent
@@ -426,13 +426,15 @@
};
payment: {
/**
+ * @deprecated Use `api.call.transactionPaymentApi.queryFeeDetails` instead
* Query the detailed fee of a given encoded extrinsic
**/
queryFeeDetails: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<FeeDetails>>;
/**
+ * @deprecated Use `api.call.transactionPaymentApi.queryInfo` instead
* Retrieves the fee information for an encoded extrinsic
**/
- queryInfo: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<RuntimeDispatchInfo>>;
+ queryInfo: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable<RuntimeDispatchInfoV1>>;
};
rmrk: {
/**
tests/src/interfaces/augment-api-runtime.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-runtime.ts
+++ b/tests/src/interfaces/augment-api-runtime.ts
@@ -6,7 +6,7 @@
import '@polkadot/api-base/types/calls';
import type { ApiTypes, AugmentedCall, DecoratedCallBase } from '@polkadot/api-base/types';
-import type { Bytes, Null, Option, Result, U256, Vec, bool, u256, u64 } from '@polkadot/types-codec';
+import type { Bytes, Null, Option, Result, U256, Vec, bool, u256, u32, u64 } from '@polkadot/types-codec';
import type { AnyNumber, ITuple } from '@polkadot/types-codec/types';
import type { CheckInherentsResult, InherentData } from '@polkadot/types/interfaces/blockbuilder';
import type { BlockHash } from '@polkadot/types/interfaces/chain';
@@ -16,6 +16,7 @@
import type { EvmAccount, EvmCallInfo, EvmCreateInfo } from '@polkadot/types/interfaces/evm';
import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics';
import type { OpaqueMetadata } from '@polkadot/types/interfaces/metadata';
+import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment';
import type { AccountId, Block, H160, H256, Header, Index, KeyTypeId, Permill, SlotDuration } from '@polkadot/types/interfaces/runtime';
import type { RuntimeVersion } from '@polkadot/types/interfaces/state';
import type { ApplyExtrinsicResult, DispatchError } from '@polkadot/types/interfaces/system';
@@ -228,5 +229,20 @@
**/
[key: string]: DecoratedCallBase<ApiType>;
};
+ /** 0x37c8bb1350a9a2a8/2 */
+ transactionPaymentApi: {
+ /**
+ * The transaction fee details
+ **/
+ queryFeeDetails: AugmentedCall<ApiType, (uxt: Extrinsic | IExtrinsic | string | Uint8Array, len: u32 | AnyNumber | Uint8Array) => Observable<FeeDetails>>;
+ /**
+ * The transaction info
+ **/
+ queryInfo: AugmentedCall<ApiType, (uxt: Extrinsic | IExtrinsic | string | Uint8Array, len: u32 | AnyNumber | Uint8Array) => Observable<RuntimeDispatchInfo>>;
+ /**
+ * Generic call
+ **/
+ [key: string]: DecoratedCallBase<ApiType>;
+ };
} // AugmentedCalls
} // declare module
tests/src/interfaces/augment-api-tx.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-api-tx.ts
+++ b/tests/src/interfaces/augment-api-tx.ts
@@ -9,7 +9,7 @@
import type { Bytes, Compact, Option, U256, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';
import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types';
import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';
-import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumLog, EthereumTransactionTransactionV2, OrmlVestingVestingSchedule, PalletConfigurationAppPromotionConfiguration, PalletEvmAccountBasicCrossAccountIdRepr, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsPartEquippableList, RmrkTraitsPartPartType, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, SpWeightsWeightV2Weight, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
+import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumLog, EthereumTransactionTransactionV2, OpalRuntimeRuntimeCommonSessionKeys, OrmlVestingVestingSchedule, PalletConfigurationAppPromotionConfiguration, PalletEvmAccountBasicCrossAccountIdRepr, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsPartEquippableList, RmrkTraitsPartPartType, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, SpRuntimeHeader, SpWeightsWeightV2Weight, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
export type __AugmentedSubmittable = AugmentedSubmittable<() => unknown>;
export type __SubmittableExtrinsic<ApiType extends ApiTypes> = SubmittableExtrinsic<ApiType>;
@@ -119,6 +119,16 @@
**/
[key: string]: SubmittableExtrinsicFunction<ApiType>;
};
+ authorship: {
+ /**
+ * Provide a set of uncles.
+ **/
+ setUncles: AugmentedSubmittable<(newUncles: Vec<SpRuntimeHeader> | (SpRuntimeHeader | { parentHash?: any; number?: any; stateRoot?: any; extrinsicsRoot?: any; digest?: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [Vec<SpRuntimeHeader>]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
balances: {
/**
* Exactly as `transfer`, except the origin must be root and the source account may be
@@ -214,6 +224,71 @@
**/
[key: string]: SubmittableExtrinsicFunction<ApiType>;
};
+ collatorSelection: {
+ /**
+ * Add a collator to the list of invulnerable (fixed) collators.
+ **/
+ addInvulnerable: AugmentedSubmittable<(updated: AccountId32 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32]>;
+ /**
+ * Force deregister `origin` as a collator candidate as a governing authority, and revoke its license.
+ * Note that the collator can only leave on session change.
+ * The `LicenseBond` will be unreserved and returned immediately.
+ *
+ * This call is not available to `Invulnerable` collators.
+ **/
+ forceRevokeLicense: AugmentedSubmittable<(who: AccountId32 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32]>;
+ /**
+ * Purchase a license on block collation for this account.
+ * It does not make it a collator candidate, use `onboard` afterward. The account must
+ * (a) already have registered session keys and (b) be able to reserve the `LicenseBond`.
+ *
+ * This call is not available to `Invulnerable` collators.
+ **/
+ getLicense: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
+ /**
+ * Deregister `origin` as a collator candidate. Note that the collator can only leave on
+ * session change. The license to `onboard` later at any other time will remain.
+ *
+ * This call will fail if the total number of candidates would drop below `MinCandidates`. todo:collator maybe not
+ **/
+ offboard: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
+ /**
+ * Register this account as a candidate for collators for next sessions.
+ * The account must already hold a license, and cannot offboard immediately during a session.
+ *
+ * This call is not available to `Invulnerable` collators.
+ **/
+ onboard: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
+ /**
+ * Forfeit `origin`'s own license. The `LicenseBond` will be unreserved immediately.
+ *
+ * This call is not available to `Invulnerable` collators.
+ **/
+ releaseLicense: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
+ /**
+ * Remove a collator from the list of invulnerable (fixed) collators.
+ **/
+ removeInvulnerable: AugmentedSubmittable<(who: AccountId32 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32]>;
+ /**
+ * Set the ideal number of collators. If lowering this number,
+ * then the number of running collators could be higher than this figure.
+ * Aside from that edge case, there should be no other way to have more collators than the desired number.
+ **/
+ setDesiredCollators: AugmentedSubmittable<(max: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32]>;
+ /**
+ * Set the length of the kick threshold.
+ * Note that if the length is not a multiple of the session period, it might get inconsistent.
+ **/
+ setKickThreshold: AugmentedSubmittable<(kickThreshold: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32]>;
+ /**
+ * Set the candidacy bond amount.
+ **/
+ setLicenseBond: AugmentedSubmittable<(bond: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u128]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
configuration: {
setAppPromotionConfigurationOverride: AugmentedSubmittable<(configuration: PalletConfigurationAppPromotionConfiguration | { recalculationInterval?: any; pendingInterval?: any; intervalIncome?: any; maxStakersPerCalculation?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [PalletConfigurationAppPromotionConfiguration]>;
setMinGasPriceOverride: AugmentedSubmittable<(coeff: Option<u64> | null | Uint8Array | u64 | AnyNumber) => SubmittableExtrinsic<ApiType>, [Option<u64>]>;
@@ -839,6 +914,48 @@
**/
[key: string]: SubmittableExtrinsicFunction<ApiType>;
};
+ session: {
+ /**
+ * Removes any session key(s) of the function caller.
+ *
+ * This doesn't take effect until the next session.
+ *
+ * The dispatch origin of this function must be Signed and the account must be either be
+ * convertible to a validator ID using the chain's typical addressing system (this usually
+ * means being a controller account) or directly convertible into a validator ID (which
+ * usually means being a stash account).
+ *
+ * # <weight>
+ * - Complexity: `O(1)` in number of key types. Actual cost depends on the number of length
+ * of `T::Keys::key_ids()` which is fixed.
+ * - DbReads: `T::ValidatorIdOf`, `NextKeys`, `origin account`
+ * - DbWrites: `NextKeys`, `origin account`
+ * - DbWrites per key id: `KeyOwner`
+ * # </weight>
+ **/
+ purgeKeys: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
+ /**
+ * Sets the session key(s) of the function caller to `keys`.
+ * Allows an account to set its session key prior to becoming a validator.
+ * This doesn't take effect until the next session.
+ *
+ * The dispatch origin of this function must be signed.
+ *
+ * # <weight>
+ * - Complexity: `O(1)`. Actual cost depends on the number of length of
+ * `T::Keys::key_ids()` which is fixed.
+ * - DbReads: `origin account`, `T::ValidatorIdOf`, `NextKeys`
+ * - DbWrites: `origin account`, `NextKeys`
+ * - DbReads per key id: `KeyOwner`
+ * - DbWrites per key id: `KeyOwner`
+ * # </weight>
+ **/
+ setKeys: AugmentedSubmittable<(keys: OpalRuntimeRuntimeCommonSessionKeys | { aura?: any } | string | Uint8Array, proof: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [OpalRuntimeRuntimeCommonSessionKeys, Bytes]>;
+ /**
+ * Generic tx
+ **/
+ [key: string]: SubmittableExtrinsicFunction<ApiType>;
+ };
structure: {
/**
* Generic tx
@@ -1432,6 +1549,23 @@
**/
destroyCollection: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32]>;
/**
+ * Repairs a collection if the data was somehow corrupted.
+ *
+ * # Arguments
+ *
+ * * `collection_id`: ID of the collection to repair.
+ **/
+ forceRepairCollection: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32]>;
+ /**
+ * Repairs a token if the data was somehow corrupted.
+ *
+ * # Arguments
+ *
+ * * `collection_id`: ID of the collection the item belongs to.
+ * * `item_id`: ID of the item.
+ **/
+ forceRepairItem: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32]>;
+ /**
* Remove admin of a collection.
*
* An admin address can remove itself. List of admins may become empty,
@@ -1474,15 +1608,6 @@
* * `address`: ID of the address to be removed from the allowlist.
**/
removeFromAllowList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletEvmAccountBasicCrossAccountIdRepr]>;
- /**
- * Repairs a broken item
- *
- * # Arguments
- *
- * * `collection_id`: ID of the collection the item belongs to.
- * * `item_id`: ID of the item.
- **/
- repairItem: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, itemId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32]>;
/**
* Re-partition a refungible token, while owning all of its parts/pieces.
*
tests/src/interfaces/augment-types.tsdiffbeforeafterboth--- a/tests/src/interfaces/augment-types.ts
+++ b/tests/src/interfaces/augment-types.ts
@@ -5,7 +5,7 @@
// this is required to allow for ambient/previous definitions
import '@polkadot/types/types/registry';
-import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportPalletId, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletXcmCall, PalletXcmError, PalletXcmEvent, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default';
+import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportPalletId, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OpalRuntimeRuntimeCommonSessionKeys, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletAuthorshipCall, PalletAuthorshipError, PalletAuthorshipUncleEntryItem, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCollatorSelectionCall, PalletCollatorSelectionError, PalletCollatorSelectionEvent, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletXcmCall, PalletXcmError, PalletXcmEvent, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpRuntimeArithmeticError, SpRuntimeBlakeTwo256, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeHeader, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default';
import type { Data, StorageKey } from '@polkadot/types';
import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec';
import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets';
@@ -24,7 +24,7 @@
import type { StatementKind } from '@polkadot/types/interfaces/claims';
import type { CollectiveOrigin, MemberCount, ProposalIndex, Votes, VotesTo230 } from '@polkadot/types/interfaces/collective';
import type { AuthorityId, RawVRFOutput } from '@polkadot/types/interfaces/consensus';
-import type { AliveContractInfo, CodeHash, CodeSource, CodeUploadRequest, CodeUploadResult, CodeUploadResultValue, ContractCallFlags, ContractCallRequest, ContractExecResult, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractExecResultTo267, ContractInfo, ContractInstantiateResult, ContractInstantiateResultTo267, ContractInstantiateResultTo299, ContractReturnFlags, ContractStorageKey, DeletedContract, ExecReturnValue, Gas, HostFnWeights, HostFnWeightsTo264, InstantiateRequest, InstantiateRequestV1, InstantiateRequestV2, InstantiateReturnValue, InstantiateReturnValueOk, InstantiateReturnValueTo267, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, RentProjection, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, StorageDeposit, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts';
+import type { AliveContractInfo, CodeHash, CodeSource, CodeUploadRequest, CodeUploadResult, CodeUploadResultValue, ContractCallFlags, ContractCallRequest, ContractExecResult, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractExecResultTo267, ContractExecResultU64, ContractInfo, ContractInstantiateResult, ContractInstantiateResultTo267, ContractInstantiateResultTo299, ContractInstantiateResultU64, ContractReturnFlags, ContractStorageKey, DeletedContract, ExecReturnValue, Gas, HostFnWeights, HostFnWeightsTo264, InstantiateRequest, InstantiateRequestV1, InstantiateRequestV2, InstantiateReturnValue, InstantiateReturnValueOk, InstantiateReturnValueTo267, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, RentProjection, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, StorageDeposit, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts';
import type { ContractConstructorSpecLatest, ContractConstructorSpecV0, ContractConstructorSpecV1, ContractConstructorSpecV2, ContractConstructorSpecV3, ContractContractSpecV0, ContractContractSpecV1, ContractContractSpecV2, ContractContractSpecV3, ContractContractSpecV4, ContractCryptoHasher, ContractDiscriminant, ContractDisplayName, ContractEventParamSpecLatest, ContractEventParamSpecV0, ContractEventParamSpecV2, ContractEventSpecLatest, ContractEventSpecV0, ContractEventSpecV1, ContractEventSpecV2, ContractLayoutArray, ContractLayoutCell, ContractLayoutEnum, ContractLayoutHash, ContractLayoutHashingStrategy, ContractLayoutKey, ContractLayoutStruct, ContractLayoutStructField, ContractMessageParamSpecLatest, ContractMessageParamSpecV0, ContractMessageParamSpecV2, ContractMessageSpecLatest, ContractMessageSpecV0, ContractMessageSpecV1, ContractMessageSpecV2, ContractMetadata, ContractMetadataLatest, ContractMetadataV0, ContractMetadataV1, ContractMetadataV2, ContractMetadataV3, ContractMetadataV4, ContractProject, ContractProjectContract, ContractProjectInfo, ContractProjectSource, ContractProjectV0, ContractSelector, ContractStorageLayout, ContractTypeSpec } from '@polkadot/types/interfaces/contractsAbi';
import type { FundIndex, FundInfo, LastContribution, TrieIndex } from '@polkadot/types/interfaces/crowdloan';
import type { CollationInfo, CollationInfoV1, ConfigData, MessageId, OverweightIndex, PageCounter, PageIndexData } from '@polkadot/types/interfaces/cumulus';
@@ -47,7 +47,7 @@
import type { StorageKind } from '@polkadot/types/interfaces/offchain';
import type { DeferredOffenceOf, Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences';
import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, CoreState, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, GroupRotationInfo, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OccupiedCore, OccupiedCoreAssumption, OldV1SessionInfo, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, PvfCheckStatement, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, ScheduledCore, Scheduling, ScrapedOnChainVotes, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains';
-import type { FeeDetails, InclusionFee, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment';
+import type { FeeDetails, InclusionFee, RuntimeDispatchInfo, RuntimeDispatchInfoV1, RuntimeDispatchInfoV2 } from '@polkadot/types/interfaces/payment';
import type { Approvals } from '@polkadot/types/interfaces/poll';
import type { ProxyAnnouncement, ProxyDefinition, ProxyType } from '@polkadot/types/interfaces/proxy';
import type { AccountStatus, AccountValidity } from '@polkadot/types/interfaces/purchase';
@@ -273,10 +273,12 @@
ContractExecResultTo255: ContractExecResultTo255;
ContractExecResultTo260: ContractExecResultTo260;
ContractExecResultTo267: ContractExecResultTo267;
+ ContractExecResultU64: ContractExecResultU64;
ContractInfo: ContractInfo;
ContractInstantiateResult: ContractInstantiateResult;
ContractInstantiateResultTo267: ContractInstantiateResultTo267;
ContractInstantiateResultTo299: ContractInstantiateResultTo299;
+ ContractInstantiateResultU64: ContractInstantiateResultU64;
ContractLayoutArray: ContractLayoutArray;
ContractLayoutCell: ContractLayoutCell;
ContractLayoutEnum: ContractLayoutEnum;
@@ -771,6 +773,7 @@
OldV1SessionInfo: OldV1SessionInfo;
OpalRuntimeRuntime: OpalRuntimeRuntime;
OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance: OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance;
+ OpalRuntimeRuntimeCommonSessionKeys: OpalRuntimeRuntimeCommonSessionKeys;
OpaqueCall: OpaqueCall;
OpaqueKeyOwnershipProof: OpaqueKeyOwnershipProof;
OpaqueMetadata: OpaqueMetadata;
@@ -815,6 +818,9 @@
PalletAppPromotionCall: PalletAppPromotionCall;
PalletAppPromotionError: PalletAppPromotionError;
PalletAppPromotionEvent: PalletAppPromotionEvent;
+ PalletAuthorshipCall: PalletAuthorshipCall;
+ PalletAuthorshipError: PalletAuthorshipError;
+ PalletAuthorshipUncleEntryItem: PalletAuthorshipUncleEntryItem;
PalletBalancesAccountData: PalletBalancesAccountData;
PalletBalancesBalanceLock: PalletBalancesBalanceLock;
PalletBalancesCall: PalletBalancesCall;
@@ -825,6 +831,9 @@
PalletBalancesReserveData: PalletBalancesReserveData;
PalletCallMetadataLatest: PalletCallMetadataLatest;
PalletCallMetadataV14: PalletCallMetadataV14;
+ PalletCollatorSelectionCall: PalletCollatorSelectionCall;
+ PalletCollatorSelectionError: PalletCollatorSelectionError;
+ PalletCollatorSelectionEvent: PalletCollatorSelectionEvent;
PalletCommonError: PalletCommonError;
PalletCommonEvent: PalletCommonEvent;
PalletConfigurationAppPromotionConfiguration: PalletConfigurationAppPromotionConfiguration;
@@ -875,6 +884,9 @@
PalletRmrkEquipCall: PalletRmrkEquipCall;
PalletRmrkEquipError: PalletRmrkEquipError;
PalletRmrkEquipEvent: PalletRmrkEquipEvent;
+ PalletSessionCall: PalletSessionCall;
+ PalletSessionError: PalletSessionError;
+ PalletSessionEvent: PalletSessionEvent;
PalletsOrigin: PalletsOrigin;
PalletStorageMetadataLatest: PalletStorageMetadataLatest;
PalletStorageMetadataV14: PalletStorageMetadataV14;
@@ -1057,6 +1069,8 @@
RpcMethods: RpcMethods;
RuntimeDbWeight: RuntimeDbWeight;
RuntimeDispatchInfo: RuntimeDispatchInfo;
+ RuntimeDispatchInfoV1: RuntimeDispatchInfoV1;
+ RuntimeDispatchInfoV2: RuntimeDispatchInfoV2;
RuntimeVersion: RuntimeVersion;
RuntimeVersionApi: RuntimeVersionApi;
RuntimeVersionPartial: RuntimeVersionPartial;
@@ -1172,14 +1186,19 @@
SolutionSupports: SolutionSupports;
SpanIndex: SpanIndex;
SpanRecord: SpanRecord;
+ SpConsensusAuraSr25519AppSr25519Public: SpConsensusAuraSr25519AppSr25519Public;
+ SpCoreCryptoKeyTypeId: SpCoreCryptoKeyTypeId;
SpCoreEcdsaSignature: SpCoreEcdsaSignature;
SpCoreEd25519Signature: SpCoreEd25519Signature;
+ SpCoreSr25519Public: SpCoreSr25519Public;
SpCoreSr25519Signature: SpCoreSr25519Signature;
SpecVersion: SpecVersion;
SpRuntimeArithmeticError: SpRuntimeArithmeticError;
+ SpRuntimeBlakeTwo256: SpRuntimeBlakeTwo256;
SpRuntimeDigest: SpRuntimeDigest;
SpRuntimeDigestDigestItem: SpRuntimeDigestDigestItem;
SpRuntimeDispatchError: SpRuntimeDispatchError;
+ SpRuntimeHeader: SpRuntimeHeader;
SpRuntimeModuleError: SpRuntimeModuleError;
SpRuntimeMultiSignature: SpRuntimeMultiSignature;
SpRuntimeTokenError: SpRuntimeTokenError;
tests/src/interfaces/default/types.tsdiffbeforeafterboth--- a/tests/src/interfaces/default/types.ts
+++ b/tests/src/interfaces/default/types.ts
@@ -699,6 +699,11 @@
/** @name OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance */
export interface OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance extends Null {}
+/** @name OpalRuntimeRuntimeCommonSessionKeys */
+export interface OpalRuntimeRuntimeCommonSessionKeys extends Struct {
+ readonly aura: SpConsensusAuraSr25519AppSr25519Public;
+}
+
/** @name OrmlTokensAccountData */
export interface OrmlTokensAccountData extends Struct {
readonly free: u128;
@@ -1056,6 +1061,36 @@
readonly type: 'StakingRecalculation' | 'Stake' | 'Unstake' | 'SetAdmin';
}
+/** @name PalletAuthorshipCall */
+export interface PalletAuthorshipCall extends Enum {
+ readonly isSetUncles: boolean;
+ readonly asSetUncles: {
+ readonly newUncles: Vec<SpRuntimeHeader>;
+ } & Struct;
+ readonly type: 'SetUncles';
+}
+
+/** @name PalletAuthorshipError */
+export interface PalletAuthorshipError extends Enum {
+ readonly isInvalidUncleParent: boolean;
+ readonly isUnclesAlreadySet: boolean;
+ readonly isTooManyUncles: boolean;
+ readonly isGenesisUncle: boolean;
+ readonly isTooHighUncle: boolean;
+ readonly isUncleAlreadyIncluded: boolean;
+ readonly isOldUncle: boolean;
+ readonly type: 'InvalidUncleParent' | 'UnclesAlreadySet' | 'TooManyUncles' | 'GenesisUncle' | 'TooHighUncle' | 'UncleAlreadyIncluded' | 'OldUncle';
+}
+
+/** @name PalletAuthorshipUncleEntryItem */
+export interface PalletAuthorshipUncleEntryItem extends Enum {
+ readonly isInclusionHeight: boolean;
+ readonly asInclusionHeight: u32;
+ readonly isUncle: boolean;
+ readonly asUncle: ITuple<[H256, Option<AccountId32>]>;
+ readonly type: 'InclusionHeight' | 'Uncle';
+}
+
/** @name PalletBalancesAccountData */
export interface PalletBalancesAccountData extends Struct {
readonly free: u128;
@@ -1201,6 +1236,100 @@
readonly amount: u128;
}
+/** @name PalletCollatorSelectionCall */
+export interface PalletCollatorSelectionCall extends Enum {
+ readonly isAddInvulnerable: boolean;
+ readonly asAddInvulnerable: {
+ readonly new_: AccountId32;
+ } & Struct;
+ readonly isRemoveInvulnerable: boolean;
+ readonly asRemoveInvulnerable: {
+ readonly who: AccountId32;
+ } & Struct;
+ readonly isSetDesiredCollators: boolean;
+ readonly asSetDesiredCollators: {
+ readonly max: u32;
+ } & Struct;
+ readonly isSetLicenseBond: boolean;
+ readonly asSetLicenseBond: {
+ readonly bond: u128;
+ } & Struct;
+ readonly isSetKickThreshold: boolean;
+ readonly asSetKickThreshold: {
+ readonly kickThreshold: u32;
+ } & Struct;
+ readonly isGetLicense: boolean;
+ readonly isOnboard: boolean;
+ readonly isOffboard: boolean;
+ readonly isReleaseLicense: boolean;
+ readonly isForceRevokeLicense: boolean;
+ readonly asForceRevokeLicense: {
+ readonly who: AccountId32;
+ } & Struct;
+ readonly type: 'AddInvulnerable' | 'RemoveInvulnerable' | 'SetDesiredCollators' | 'SetLicenseBond' | 'SetKickThreshold' | 'GetLicense' | 'Onboard' | 'Offboard' | 'ReleaseLicense' | 'ForceRevokeLicense';
+}
+
+/** @name PalletCollatorSelectionError */
+export interface PalletCollatorSelectionError extends Enum {
+ readonly isTooManyCandidates: boolean;
+ readonly isUnknown: boolean;
+ readonly isPermission: boolean;
+ readonly isAlreadyHoldingLicense: boolean;
+ readonly isNoLicense: boolean;
+ readonly isAlreadyCandidate: boolean;
+ readonly isNotCandidate: boolean;
+ readonly isTooManyInvulnerables: boolean;
+ readonly isTooFewInvulnerables: boolean;
+ readonly isAlreadyInvulnerable: boolean;
+ readonly isNotInvulnerable: boolean;
+ readonly isNoAssociatedValidatorId: boolean;
+ readonly isValidatorNotRegistered: boolean;
+ readonly type: 'TooManyCandidates' | 'Unknown' | 'Permission' | 'AlreadyHoldingLicense' | 'NoLicense' | 'AlreadyCandidate' | 'NotCandidate' | 'TooManyInvulnerables' | 'TooFewInvulnerables' | 'AlreadyInvulnerable' | 'NotInvulnerable' | 'NoAssociatedValidatorId' | 'ValidatorNotRegistered';
+}
+
+/** @name PalletCollatorSelectionEvent */
+export interface PalletCollatorSelectionEvent extends Enum {
+ readonly isNewDesiredCollators: boolean;
+ readonly asNewDesiredCollators: {
+ readonly desiredCollators: u32;
+ } & Struct;
+ readonly isNewLicenseBond: boolean;
+ readonly asNewLicenseBond: {
+ readonly bondAmount: u128;
+ } & Struct;
+ readonly isNewKickThreshold: boolean;
+ readonly asNewKickThreshold: {
+ readonly lengthInBlocks: u32;
+ } & Struct;
+ readonly isInvulnerableAdded: boolean;
+ readonly asInvulnerableAdded: {
+ readonly invulnerable: AccountId32;
+ } & Struct;
+ readonly isInvulnerableRemoved: boolean;
+ readonly asInvulnerableRemoved: {
+ readonly invulnerable: AccountId32;
+ } & Struct;
+ readonly isLicenseObtained: boolean;
+ readonly asLicenseObtained: {
+ readonly accountId: AccountId32;
+ readonly deposit: u128;
+ } & Struct;
+ readonly isLicenseForfeited: boolean;
+ readonly asLicenseForfeited: {
+ readonly accountId: AccountId32;
+ readonly depositReturned: u128;
+ } & Struct;
+ readonly isCandidateAdded: boolean;
+ readonly asCandidateAdded: {
+ readonly accountId: AccountId32;
+ } & Struct;
+ readonly isCandidateRemoved: boolean;
+ readonly asCandidateRemoved: {
+ readonly accountId: AccountId32;
+ } & Struct;
+ readonly type: 'NewDesiredCollators' | 'NewLicenseBond' | 'NewKickThreshold' | 'InvulnerableAdded' | 'InvulnerableRemoved' | 'LicenseObtained' | 'LicenseForfeited' | 'CandidateAdded' | 'CandidateRemoved';
+}
+
/** @name PalletCommonError */
export interface PalletCommonError extends Enum {
readonly isCollectionNotFound: boolean;
@@ -1938,6 +2067,36 @@
readonly type: 'BaseCreated' | 'EquippablesUpdated';
}
+/** @name PalletSessionCall */
+export interface PalletSessionCall extends Enum {
+ readonly isSetKeys: boolean;
+ readonly asSetKeys: {
+ readonly keys_: OpalRuntimeRuntimeCommonSessionKeys;
+ readonly proof: Bytes;
+ } & Struct;
+ readonly isPurgeKeys: boolean;
+ readonly type: 'SetKeys' | 'PurgeKeys';
+}
+
+/** @name PalletSessionError */
+export interface PalletSessionError extends Enum {
+ readonly isInvalidProof: boolean;
+ readonly isNoAssociatedValidatorId: boolean;
+ readonly isDuplicatedKey: boolean;
+ readonly isNoKeys: boolean;
+ readonly isNoAccount: boolean;
+ readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount';
+}
+
+/** @name PalletSessionEvent */
+export interface PalletSessionEvent extends Enum {
+ readonly isNewSession: boolean;
+ readonly asNewSession: {
+ readonly sessionIndex: u32;
+ } & Struct;
+ readonly type: 'NewSession';
+}
+
/** @name PalletStructureCall */
export interface PalletStructureCall extends Null {}
@@ -2319,12 +2478,16 @@
readonly operator: PalletEvmAccountBasicCrossAccountIdRepr;
readonly approve: bool;
} & Struct;
- readonly isRepairItem: boolean;
- readonly asRepairItem: {
+ readonly isForceRepairCollection: boolean;
+ readonly asForceRepairCollection: {
+ readonly collectionId: u32;
+ } & Struct;
+ readonly isForceRepairItem: boolean;
+ readonly asForceRepairItem: {
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' | 'RepairItem';
+ 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';
}
/** @name PalletUniqueError */
@@ -2665,12 +2828,21 @@
readonly value: Bytes;
}
+/** @name SpConsensusAuraSr25519AppSr25519Public */
+export interface SpConsensusAuraSr25519AppSr25519Public extends SpCoreSr25519Public {}
+
+/** @name SpCoreCryptoKeyTypeId */
+export interface SpCoreCryptoKeyTypeId extends U8aFixed {}
+
/** @name SpCoreEcdsaSignature */
export interface SpCoreEcdsaSignature extends U8aFixed {}
/** @name SpCoreEd25519Signature */
export interface SpCoreEd25519Signature extends U8aFixed {}
+/** @name SpCoreSr25519Public */
+export interface SpCoreSr25519Public extends U8aFixed {}
+
/** @name SpCoreSr25519Signature */
export interface SpCoreSr25519Signature extends U8aFixed {}
@@ -2682,6 +2854,9 @@
readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero';
}
+/** @name SpRuntimeBlakeTwo256 */
+export interface SpRuntimeBlakeTwo256 extends Null {}
+
/** @name SpRuntimeDigest */
export interface SpRuntimeDigest extends Struct {
readonly logs: Vec<SpRuntimeDigestDigestItem>;
@@ -2723,6 +2898,15 @@
readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional' | 'Exhausted' | 'Corruption' | 'Unavailable';
}
+/** @name SpRuntimeHeader */
+export interface SpRuntimeHeader extends Struct {
+ readonly parentHash: H256;
+ readonly number: Compact<u32>;
+ readonly stateRoot: H256;
+ readonly extrinsicsRoot: H256;
+ readonly digest: SpRuntimeDigest;
+}
+
/** @name SpRuntimeModuleError */
export interface SpRuntimeModuleError extends Struct {
readonly index: u8;
tests/src/interfaces/lookup.tsdiffbeforeafterboth--- a/tests/src/interfaces/lookup.ts
+++ b/tests/src/interfaces/lookup.ts
@@ -184,8 +184,54 @@
}
},
/**
- * Lookup30: pallet_balances::pallet::Event<T, I>
+ * Lookup30: pallet_collator_selection::pallet::Event<T>
+ **/
+ PalletCollatorSelectionEvent: {
+ _enum: {
+ NewDesiredCollators: {
+ desiredCollators: 'u32',
+ },
+ NewLicenseBond: {
+ bondAmount: 'u128',
+ },
+ NewKickThreshold: {
+ lengthInBlocks: 'u32',
+ },
+ InvulnerableAdded: {
+ invulnerable: 'AccountId32',
+ },
+ InvulnerableRemoved: {
+ invulnerable: 'AccountId32',
+ },
+ LicenseObtained: {
+ accountId: 'AccountId32',
+ deposit: 'u128',
+ },
+ LicenseForfeited: {
+ accountId: 'AccountId32',
+ depositReturned: 'u128',
+ },
+ CandidateAdded: {
+ accountId: 'AccountId32',
+ },
+ CandidateRemoved: {
+ accountId: 'AccountId32'
+ }
+ }
+ },
+ /**
+ * Lookup31: pallet_session::pallet::Event
**/
+ PalletSessionEvent: {
+ _enum: {
+ NewSession: {
+ sessionIndex: 'u32'
+ }
+ }
+ },
+ /**
+ * Lookup32: pallet_balances::pallet::Event<T, I>
+ **/
PalletBalancesEvent: {
_enum: {
Endowed: {
@@ -235,13 +281,13 @@
}
},
/**
- * Lookup31: frame_support::traits::tokens::misc::BalanceStatus
+ * Lookup33: frame_support::traits::tokens::misc::BalanceStatus
**/
FrameSupportTokensMiscBalanceStatus: {
_enum: ['Free', 'Reserved']
},
/**
- * Lookup32: pallet_transaction_payment::pallet::Event<T>
+ * Lookup34: pallet_transaction_payment::pallet::Event<T>
**/
PalletTransactionPaymentEvent: {
_enum: {
@@ -253,7 +299,7 @@
}
},
/**
- * Lookup33: pallet_treasury::pallet::Event<T, I>
+ * Lookup35: pallet_treasury::pallet::Event<T, I>
**/
PalletTreasuryEvent: {
_enum: {
@@ -289,7 +335,7 @@
}
},
/**
- * Lookup34: pallet_sudo::pallet::Event<T>
+ * Lookup36: pallet_sudo::pallet::Event<T>
**/
PalletSudoEvent: {
_enum: {
@@ -305,7 +351,7 @@
}
},
/**
- * Lookup38: orml_vesting::module::Event<T>
+ * Lookup40: orml_vesting::module::Event<T>
**/
OrmlVestingModuleEvent: {
_enum: {
@@ -324,7 +370,7 @@
}
},
/**
- * Lookup39: orml_vesting::VestingSchedule<BlockNumber, Balance>
+ * Lookup41: orml_vesting::VestingSchedule<BlockNumber, Balance>
**/
OrmlVestingVestingSchedule: {
start: 'u32',
@@ -333,7 +379,7 @@
perPeriod: 'Compact<u128>'
},
/**
- * Lookup41: orml_xtokens::module::Event<T>
+ * Lookup43: orml_xtokens::module::Event<T>
**/
OrmlXtokensModuleEvent: {
_enum: {
@@ -346,18 +392,18 @@
}
},
/**
- * Lookup42: xcm::v1::multiasset::MultiAssets
+ * Lookup44: xcm::v1::multiasset::MultiAssets
**/
XcmV1MultiassetMultiAssets: 'Vec<XcmV1MultiAsset>',
/**
- * Lookup44: xcm::v1::multiasset::MultiAsset
+ * Lookup46: xcm::v1::multiasset::MultiAsset
**/
XcmV1MultiAsset: {
id: 'XcmV1MultiassetAssetId',
fun: 'XcmV1MultiassetFungibility'
},
/**
- * Lookup45: xcm::v1::multiasset::AssetId
+ * Lookup47: xcm::v1::multiasset::AssetId
**/
XcmV1MultiassetAssetId: {
_enum: {
@@ -366,14 +412,14 @@
}
},
/**
- * Lookup46: xcm::v1::multilocation::MultiLocation
+ * Lookup48: xcm::v1::multilocation::MultiLocation
**/
XcmV1MultiLocation: {
parents: 'u8',
interior: 'XcmV1MultilocationJunctions'
},
/**
- * Lookup47: xcm::v1::multilocation::Junctions
+ * Lookup49: xcm::v1::multilocation::Junctions
**/
XcmV1MultilocationJunctions: {
_enum: {
@@ -389,7 +435,7 @@
}
},
/**
- * Lookup48: xcm::v1::junction::Junction
+ * Lookup50: xcm::v1::junction::Junction
**/
XcmV1Junction: {
_enum: {
@@ -417,7 +463,7 @@
}
},
/**
- * Lookup50: xcm::v0::junction::NetworkId
+ * Lookup52: xcm::v0::junction::NetworkId
**/
XcmV0JunctionNetworkId: {
_enum: {
@@ -428,7 +474,7 @@
}
},
/**
- * Lookup53: xcm::v0::junction::BodyId
+ * Lookup55: xcm::v0::junction::BodyId
**/
XcmV0JunctionBodyId: {
_enum: {
@@ -442,7 +488,7 @@
}
},
/**
- * Lookup54: xcm::v0::junction::BodyPart
+ * Lookup56: xcm::v0::junction::BodyPart
**/
XcmV0JunctionBodyPart: {
_enum: {
@@ -465,7 +511,7 @@
}
},
/**
- * Lookup55: xcm::v1::multiasset::Fungibility
+ * Lookup57: xcm::v1::multiasset::Fungibility
**/
XcmV1MultiassetFungibility: {
_enum: {
@@ -474,7 +520,7 @@
}
},
/**
- * Lookup56: xcm::v1::multiasset::AssetInstance
+ * Lookup58: xcm::v1::multiasset::AssetInstance
**/
XcmV1MultiassetAssetInstance: {
_enum: {
@@ -488,7 +534,7 @@
}
},
/**
- * Lookup59: orml_tokens::module::Event<T>
+ * Lookup61: orml_tokens::module::Event<T>
**/
OrmlTokensModuleEvent: {
_enum: {
@@ -565,7 +611,7 @@
}
},
/**
- * Lookup60: pallet_foreign_assets::AssetIds
+ * Lookup62: pallet_foreign_assets::AssetIds
**/
PalletForeignAssetsAssetIds: {
_enum: {
@@ -574,13 +620,13 @@
}
},
/**
- * Lookup61: pallet_foreign_assets::NativeCurrency
+ * Lookup63: pallet_foreign_assets::NativeCurrency
**/
PalletForeignAssetsNativeCurrency: {
_enum: ['Here', 'Parent']
},
/**
- * Lookup62: cumulus_pallet_xcmp_queue::pallet::Event<T>
+ * Lookup64: cumulus_pallet_xcmp_queue::pallet::Event<T>
**/
CumulusPalletXcmpQueueEvent: {
_enum: {
@@ -618,7 +664,7 @@
}
},
/**
- * Lookup64: xcm::v2::traits::Error
+ * Lookup66: xcm::v2::traits::Error
**/
XcmV2TraitsError: {
_enum: {
@@ -651,7 +697,7 @@
}
},
/**
- * Lookup66: pallet_xcm::pallet::Event<T>
+ * Lookup68: pallet_xcm::pallet::Event<T>
**/
PalletXcmEvent: {
_enum: {
@@ -675,7 +721,7 @@
}
},
/**
- * Lookup67: xcm::v2::traits::Outcome
+ * Lookup69: xcm::v2::traits::Outcome
**/
XcmV2TraitsOutcome: {
_enum: {
@@ -685,11 +731,11 @@
}
},
/**
- * Lookup68: xcm::v2::Xcm<RuntimeCall>
+ * Lookup70: xcm::v2::Xcm<RuntimeCall>
**/
XcmV2Xcm: 'Vec<XcmV2Instruction>',
/**
- * Lookup70: xcm::v2::Instruction<RuntimeCall>
+ * Lookup72: xcm::v2::Instruction<RuntimeCall>
**/
XcmV2Instruction: {
_enum: {
@@ -787,7 +833,7 @@
}
},
/**
- * Lookup71: xcm::v2::Response
+ * Lookup73: xcm::v2::Response
**/
XcmV2Response: {
_enum: {
@@ -798,19 +844,19 @@
}
},
/**
- * Lookup74: xcm::v0::OriginKind
+ * Lookup76: xcm::v0::OriginKind
**/
XcmV0OriginKind: {
_enum: ['Native', 'SovereignAccount', 'Superuser', 'Xcm']
},
/**
- * Lookup75: xcm::double_encoded::DoubleEncoded<T>
+ * Lookup77: xcm::double_encoded::DoubleEncoded<T>
**/
XcmDoubleEncoded: {
encoded: 'Bytes'
},
/**
- * Lookup76: xcm::v1::multiasset::MultiAssetFilter
+ * Lookup78: xcm::v1::multiasset::MultiAssetFilter
**/
XcmV1MultiassetMultiAssetFilter: {
_enum: {
@@ -819,7 +865,7 @@
}
},
/**
- * Lookup77: xcm::v1::multiasset::WildMultiAsset
+ * Lookup79: xcm::v1::multiasset::WildMultiAsset
**/
XcmV1MultiassetWildMultiAsset: {
_enum: {
@@ -831,13 +877,13 @@
}
},
/**
- * Lookup78: xcm::v1::multiasset::WildFungibility
+ * Lookup80: xcm::v1::multiasset::WildFungibility
**/
XcmV1MultiassetWildFungibility: {
_enum: ['Fungible', 'NonFungible']
},
/**
- * Lookup79: xcm::v2::WeightLimit
+ * Lookup81: xcm::v2::WeightLimit
**/
XcmV2WeightLimit: {
_enum: {
@@ -846,7 +892,7 @@
}
},
/**
- * Lookup81: xcm::VersionedMultiAssets
+ * Lookup83: xcm::VersionedMultiAssets
**/
XcmVersionedMultiAssets: {
_enum: {
@@ -855,7 +901,7 @@
}
},
/**
- * Lookup83: xcm::v0::multi_asset::MultiAsset
+ * Lookup85: xcm::v0::multi_asset::MultiAsset
**/
XcmV0MultiAsset: {
_enum: {
@@ -894,7 +940,7 @@
}
},
/**
- * Lookup84: xcm::v0::multi_location::MultiLocation
+ * Lookup86: xcm::v0::multi_location::MultiLocation
**/
XcmV0MultiLocation: {
_enum: {
@@ -910,7 +956,7 @@
}
},
/**
- * Lookup85: xcm::v0::junction::Junction
+ * Lookup87: xcm::v0::junction::Junction
**/
XcmV0Junction: {
_enum: {
@@ -939,7 +985,7 @@
}
},
/**
- * Lookup86: xcm::VersionedMultiLocation
+ * Lookup88: xcm::VersionedMultiLocation
**/
XcmVersionedMultiLocation: {
_enum: {
@@ -948,7 +994,7 @@
}
},
/**
- * Lookup87: cumulus_pallet_xcm::pallet::Event<T>
+ * Lookup89: cumulus_pallet_xcm::pallet::Event<T>
**/
CumulusPalletXcmEvent: {
_enum: {
@@ -958,7 +1004,7 @@
}
},
/**
- * Lookup88: cumulus_pallet_dmp_queue::pallet::Event<T>
+ * Lookup90: cumulus_pallet_dmp_queue::pallet::Event<T>
**/
CumulusPalletDmpQueueEvent: {
_enum: {
@@ -989,7 +1035,7 @@
}
},
/**
- * Lookup89: pallet_common::pallet::Event<T>
+ * Lookup91: pallet_common::pallet::Event<T>
**/
PalletCommonEvent: {
_enum: {
@@ -1018,7 +1064,7 @@
}
},
/**
- * Lookup92: pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>
+ * Lookup94: pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>
**/
PalletEvmAccountBasicCrossAccountIdRepr: {
_enum: {
@@ -1027,7 +1073,7 @@
}
},
/**
- * Lookup96: pallet_structure::pallet::Event<T>
+ * Lookup98: pallet_structure::pallet::Event<T>
**/
PalletStructureEvent: {
_enum: {
@@ -1035,7 +1081,7 @@
}
},
/**
- * Lookup97: pallet_rmrk_core::pallet::Event<T>
+ * Lookup99: pallet_rmrk_core::pallet::Event<T>
**/
PalletRmrkCoreEvent: {
_enum: {
@@ -1112,7 +1158,7 @@
}
},
/**
- * Lookup98: rmrk_traits::nft::AccountIdOrCollectionNftTuple<sp_core::crypto::AccountId32>
+ * Lookup100: rmrk_traits::nft::AccountIdOrCollectionNftTuple<sp_core::crypto::AccountId32>
**/
RmrkTraitsNftAccountIdOrCollectionNftTuple: {
_enum: {
@@ -1121,7 +1167,7 @@
}
},
/**
- * Lookup102: pallet_rmrk_equip::pallet::Event<T>
+ * Lookup104: pallet_rmrk_equip::pallet::Event<T>
**/
PalletRmrkEquipEvent: {
_enum: {
@@ -1136,7 +1182,7 @@
}
},
/**
- * Lookup103: pallet_app_promotion::pallet::Event<T>
+ * Lookup105: pallet_app_promotion::pallet::Event<T>
**/
PalletAppPromotionEvent: {
_enum: {
@@ -1147,7 +1193,7 @@
}
},
/**
- * Lookup104: pallet_foreign_assets::module::Event<T>
+ * Lookup106: pallet_foreign_assets::module::Event<T>
**/
PalletForeignAssetsModuleEvent: {
_enum: {
@@ -1172,7 +1218,7 @@
}
},
/**
- * Lookup105: pallet_foreign_assets::module::AssetMetadata<Balance>
+ * Lookup107: pallet_foreign_assets::module::AssetMetadata<Balance>
**/
PalletForeignAssetsModuleAssetMetadata: {
name: 'Bytes',
@@ -1181,7 +1227,7 @@
minimalBalance: 'u128'
},
/**
- * Lookup106: pallet_evm::pallet::Event<T>
+ * Lookup108: pallet_evm::pallet::Event<T>
**/
PalletEvmEvent: {
_enum: {
@@ -1203,7 +1249,7 @@
}
},
/**
- * Lookup107: ethereum::log::Log
+ * Lookup109: ethereum::log::Log
**/
EthereumLog: {
address: 'H160',
@@ -1211,7 +1257,7 @@
data: 'Bytes'
},
/**
- * Lookup109: pallet_ethereum::pallet::Event
+ * Lookup111: pallet_ethereum::pallet::Event
**/
PalletEthereumEvent: {
_enum: {
@@ -1224,7 +1270,7 @@
}
},
/**
- * Lookup110: evm_core::error::ExitReason
+ * Lookup112: evm_core::error::ExitReason
**/
EvmCoreErrorExitReason: {
_enum: {
@@ -1235,13 +1281,13 @@
}
},
/**
- * Lookup111: evm_core::error::ExitSucceed
+ * Lookup113: evm_core::error::ExitSucceed
**/
EvmCoreErrorExitSucceed: {
_enum: ['Stopped', 'Returned', 'Suicided']
},
/**
- * Lookup112: evm_core::error::ExitError
+ * Lookup114: evm_core::error::ExitError
**/
EvmCoreErrorExitError: {
_enum: {
@@ -1263,13 +1309,13 @@
}
},
/**
- * Lookup115: evm_core::error::ExitRevert
+ * Lookup117: evm_core::error::ExitRevert
**/
EvmCoreErrorExitRevert: {
_enum: ['Reverted']
},
/**
- * Lookup116: evm_core::error::ExitFatal
+ * Lookup118: evm_core::error::ExitFatal
**/
EvmCoreErrorExitFatal: {
_enum: {
@@ -1280,7 +1326,7 @@
}
},
/**
- * Lookup117: pallet_evm_contract_helpers::pallet::Event<T>
+ * Lookup119: pallet_evm_contract_helpers::pallet::Event<T>
**/
PalletEvmContractHelpersEvent: {
_enum: {
@@ -1290,25 +1336,25 @@
}
},
/**
- * Lookup118: pallet_evm_migration::pallet::Event<T>
+ * Lookup120: pallet_evm_migration::pallet::Event<T>
**/
PalletEvmMigrationEvent: {
_enum: ['TestEvent']
},
/**
- * Lookup119: pallet_maintenance::pallet::Event<T>
+ * Lookup121: pallet_maintenance::pallet::Event<T>
**/
PalletMaintenanceEvent: {
_enum: ['MaintenanceEnabled', 'MaintenanceDisabled']
},
/**
- * Lookup120: pallet_test_utils::pallet::Event<T>
+ * Lookup122: pallet_test_utils::pallet::Event<T>
**/
PalletTestUtilsEvent: {
_enum: ['ValueIsSet', 'ShouldRollback', 'BatchCompleted']
},
/**
- * Lookup121: frame_system::Phase
+ * Lookup123: frame_system::Phase
**/
FrameSystemPhase: {
_enum: {
@@ -1318,14 +1364,14 @@
}
},
/**
- * Lookup124: frame_system::LastRuntimeUpgradeInfo
+ * Lookup126: frame_system::LastRuntimeUpgradeInfo
**/
FrameSystemLastRuntimeUpgradeInfo: {
specVersion: 'Compact<u32>',
specName: 'Text'
},
/**
- * Lookup125: frame_system::pallet::Call<T>
+ * Lookup127: frame_system::pallet::Call<T>
**/
FrameSystemCall: {
_enum: {
@@ -1363,7 +1409,7 @@
}
},
/**
- * Lookup130: frame_system::limits::BlockWeights
+ * Lookup132: frame_system::limits::BlockWeights
**/
FrameSystemLimitsBlockWeights: {
baseBlock: 'SpWeightsWeightV2Weight',
@@ -1371,7 +1417,7 @@
perClass: 'FrameSupportDispatchPerDispatchClassWeightsPerClass'
},
/**
- * Lookup131: frame_support::dispatch::PerDispatchClass<frame_system::limits::WeightsPerClass>
+ * Lookup133: frame_support::dispatch::PerDispatchClass<frame_system::limits::WeightsPerClass>
**/
FrameSupportDispatchPerDispatchClassWeightsPerClass: {
normal: 'FrameSystemLimitsWeightsPerClass',
@@ -1379,7 +1425,7 @@
mandatory: 'FrameSystemLimitsWeightsPerClass'
},
/**
- * Lookup132: frame_system::limits::WeightsPerClass
+ * Lookup134: frame_system::limits::WeightsPerClass
**/
FrameSystemLimitsWeightsPerClass: {
baseExtrinsic: 'SpWeightsWeightV2Weight',
@@ -1388,13 +1434,13 @@
reserved: 'Option<SpWeightsWeightV2Weight>'
},
/**
- * Lookup134: frame_system::limits::BlockLength
+ * Lookup136: frame_system::limits::BlockLength
**/
FrameSystemLimitsBlockLength: {
max: 'FrameSupportDispatchPerDispatchClassU32'
},
/**
- * Lookup135: frame_support::dispatch::PerDispatchClass<T>
+ * Lookup137: frame_support::dispatch::PerDispatchClass<T>
**/
FrameSupportDispatchPerDispatchClassU32: {
normal: 'u32',
@@ -1402,14 +1448,14 @@
mandatory: 'u32'
},
/**
- * Lookup136: sp_weights::RuntimeDbWeight
+ * Lookup138: sp_weights::RuntimeDbWeight
**/
SpWeightsRuntimeDbWeight: {
read: 'u64',
write: 'u64'
},
/**
- * Lookup137: sp_version::RuntimeVersion
+ * Lookup139: sp_version::RuntimeVersion
**/
SpVersionRuntimeVersion: {
specName: 'Text',
@@ -1422,13 +1468,13 @@
stateVersion: 'u8'
},
/**
- * Lookup142: frame_system::pallet::Error<T>
+ * Lookup144: frame_system::pallet::Error<T>
**/
FrameSystemError: {
_enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered']
},
/**
- * Lookup143: polkadot_primitives::v2::PersistedValidationData<primitive_types::H256, N>
+ * Lookup145: polkadot_primitives::v2::PersistedValidationData<primitive_types::H256, N>
**/
PolkadotPrimitivesV2PersistedValidationData: {
parentHead: 'Bytes',
@@ -1437,19 +1483,19 @@
maxPovSize: 'u32'
},
/**
- * Lookup146: polkadot_primitives::v2::UpgradeRestriction
+ * Lookup148: polkadot_primitives::v2::UpgradeRestriction
**/
PolkadotPrimitivesV2UpgradeRestriction: {
_enum: ['Present']
},
/**
- * Lookup147: sp_trie::storage_proof::StorageProof
+ * Lookup149: sp_trie::storage_proof::StorageProof
**/
SpTrieStorageProof: {
trieNodes: 'BTreeSet<Bytes>'
},
/**
- * Lookup149: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot
+ * Lookup151: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot
**/
CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: {
dmqMqcHead: 'H256',
@@ -1458,7 +1504,7 @@
egressChannels: 'Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>'
},
/**
- * Lookup152: polkadot_primitives::v2::AbridgedHrmpChannel
+ * Lookup154: polkadot_primitives::v2::AbridgedHrmpChannel
**/
PolkadotPrimitivesV2AbridgedHrmpChannel: {
maxCapacity: 'u32',
@@ -1469,7 +1515,7 @@
mqcHead: 'Option<H256>'
},
/**
- * Lookup153: polkadot_primitives::v2::AbridgedHostConfiguration
+ * Lookup155: polkadot_primitives::v2::AbridgedHostConfiguration
**/
PolkadotPrimitivesV2AbridgedHostConfiguration: {
maxCodeSize: 'u32',
@@ -1483,14 +1529,14 @@
validationUpgradeDelay: 'u32'
},
/**
- * Lookup159: polkadot_core_primitives::OutboundHrmpMessage<polkadot_parachain::primitives::Id>
+ * Lookup161: polkadot_core_primitives::OutboundHrmpMessage<polkadot_parachain::primitives::Id>
**/
PolkadotCorePrimitivesOutboundHrmpMessage: {
recipient: 'u32',
data: 'Bytes'
},
/**
- * Lookup160: cumulus_pallet_parachain_system::pallet::Call<T>
+ * Lookup162: cumulus_pallet_parachain_system::pallet::Call<T>
**/
CumulusPalletParachainSystemCall: {
_enum: {
@@ -1509,7 +1555,7 @@
}
},
/**
- * Lookup161: cumulus_primitives_parachain_inherent::ParachainInherentData
+ * Lookup163: cumulus_primitives_parachain_inherent::ParachainInherentData
**/
CumulusPrimitivesParachainInherentParachainInherentData: {
validationData: 'PolkadotPrimitivesV2PersistedValidationData',
@@ -1518,54 +1564,170 @@
horizontalMessages: 'BTreeMap<u32, Vec<PolkadotCorePrimitivesInboundHrmpMessage>>'
},
/**
- * Lookup163: polkadot_core_primitives::InboundDownwardMessage<BlockNumber>
+ * Lookup165: polkadot_core_primitives::InboundDownwardMessage<BlockNumber>
**/
PolkadotCorePrimitivesInboundDownwardMessage: {
sentAt: 'u32',
msg: 'Bytes'
},
/**
- * Lookup166: polkadot_core_primitives::InboundHrmpMessage<BlockNumber>
+ * Lookup168: polkadot_core_primitives::InboundHrmpMessage<BlockNumber>
**/
PolkadotCorePrimitivesInboundHrmpMessage: {
sentAt: 'u32',
data: 'Bytes'
},
/**
- * Lookup169: cumulus_pallet_parachain_system::pallet::Error<T>
+ * Lookup171: cumulus_pallet_parachain_system::pallet::Error<T>
**/
CumulusPalletParachainSystemError: {
_enum: ['OverlappingUpgrades', 'ProhibitedByPolkadot', 'TooBig', 'ValidationDataNotAvailable', 'HostConfigurationNotAvailable', 'NotScheduled', 'NothingAuthorized', 'Unauthorized']
},
/**
- * Lookup171: pallet_balances::BalanceLock<Balance>
+ * Lookup173: pallet_authorship::UncleEntryItem<BlockNumber, primitive_types::H256, sp_core::crypto::AccountId32>
+ **/
+ PalletAuthorshipUncleEntryItem: {
+ _enum: {
+ InclusionHeight: 'u32',
+ Uncle: '(H256,Option<AccountId32>)'
+ }
+ },
+ /**
+ * Lookup175: pallet_authorship::pallet::Call<T>
+ **/
+ PalletAuthorshipCall: {
+ _enum: {
+ set_uncles: {
+ newUncles: 'Vec<SpRuntimeHeader>'
+ }
+ }
+ },
+ /**
+ * Lookup177: sp_runtime::generic::header::Header<Number, sp_runtime::traits::BlakeTwo256>
+ **/
+ SpRuntimeHeader: {
+ parentHash: 'H256',
+ number: 'Compact<u32>',
+ stateRoot: 'H256',
+ extrinsicsRoot: 'H256',
+ digest: 'SpRuntimeDigest'
+ },
+ /**
+ * Lookup178: sp_runtime::traits::BlakeTwo256
+ **/
+ SpRuntimeBlakeTwo256: 'Null',
+ /**
+ * Lookup179: pallet_authorship::pallet::Error<T>
+ **/
+ PalletAuthorshipError: {
+ _enum: ['InvalidUncleParent', 'UnclesAlreadySet', 'TooManyUncles', 'GenesisUncle', 'TooHighUncle', 'UncleAlreadyIncluded', 'OldUncle']
+ },
+ /**
+ * Lookup182: pallet_collator_selection::pallet::Call<T>
+ **/
+ PalletCollatorSelectionCall: {
+ _enum: {
+ add_invulnerable: {
+ _alias: {
+ new_: 'new',
+ },
+ new_: 'AccountId32',
+ },
+ remove_invulnerable: {
+ who: 'AccountId32',
+ },
+ set_desired_collators: {
+ max: 'u32',
+ },
+ set_license_bond: {
+ bond: 'u128',
+ },
+ set_kick_threshold: {
+ kickThreshold: 'u32',
+ },
+ get_license: 'Null',
+ onboard: 'Null',
+ offboard: 'Null',
+ release_license: 'Null',
+ force_revoke_license: {
+ who: 'AccountId32'
+ }
+ }
+ },
+ /**
+ * Lookup183: pallet_collator_selection::pallet::Error<T>
**/
+ PalletCollatorSelectionError: {
+ _enum: ['TooManyCandidates', 'Unknown', 'Permission', 'AlreadyHoldingLicense', 'NoLicense', 'AlreadyCandidate', 'NotCandidate', 'TooManyInvulnerables', 'TooFewInvulnerables', 'AlreadyInvulnerable', 'NotInvulnerable', 'NoAssociatedValidatorId', 'ValidatorNotRegistered']
+ },
+ /**
+ * Lookup186: opal_runtime::runtime_common::SessionKeys
+ **/
+ OpalRuntimeRuntimeCommonSessionKeys: {
+ aura: 'SpConsensusAuraSr25519AppSr25519Public'
+ },
+ /**
+ * Lookup187: sp_consensus_aura::sr25519::app_sr25519::Public
+ **/
+ SpConsensusAuraSr25519AppSr25519Public: 'SpCoreSr25519Public',
+ /**
+ * Lookup188: sp_core::sr25519::Public
+ **/
+ SpCoreSr25519Public: '[u8;32]',
+ /**
+ * Lookup191: sp_core::crypto::KeyTypeId
+ **/
+ SpCoreCryptoKeyTypeId: '[u8;4]',
+ /**
+ * Lookup192: pallet_session::pallet::Call<T>
+ **/
+ PalletSessionCall: {
+ _enum: {
+ set_keys: {
+ _alias: {
+ keys_: 'keys',
+ },
+ keys_: 'OpalRuntimeRuntimeCommonSessionKeys',
+ proof: 'Bytes',
+ },
+ purge_keys: 'Null'
+ }
+ },
+ /**
+ * Lookup193: pallet_session::pallet::Error<T>
+ **/
+ PalletSessionError: {
+ _enum: ['InvalidProof', 'NoAssociatedValidatorId', 'DuplicatedKey', 'NoKeys', 'NoAccount']
+ },
+ /**
+ * Lookup195: pallet_balances::BalanceLock<Balance>
+ **/
PalletBalancesBalanceLock: {
id: '[u8;8]',
amount: 'u128',
reasons: 'PalletBalancesReasons'
},
/**
- * Lookup172: pallet_balances::Reasons
+ * Lookup196: pallet_balances::Reasons
**/
PalletBalancesReasons: {
_enum: ['Fee', 'Misc', 'All']
},
/**
- * Lookup175: pallet_balances::ReserveData<ReserveIdentifier, Balance>
+ * Lookup199: pallet_balances::ReserveData<ReserveIdentifier, Balance>
**/
PalletBalancesReserveData: {
id: '[u8;16]',
amount: 'u128'
},
/**
- * Lookup177: pallet_balances::Releases
+ * Lookup201: pallet_balances::Releases
**/
PalletBalancesReleases: {
_enum: ['V1_0_0', 'V2_0_0']
},
/**
- * Lookup178: pallet_balances::pallet::Call<T, I>
+ * Lookup202: pallet_balances::pallet::Call<T, I>
**/
PalletBalancesCall: {
_enum: {
@@ -1598,13 +1760,13 @@
}
},
/**
- * Lookup181: pallet_balances::pallet::Error<T, I>
+ * Lookup205: pallet_balances::pallet::Error<T, I>
**/
PalletBalancesError: {
_enum: ['VestingBalance', 'LiquidityRestrictions', 'InsufficientBalance', 'ExistentialDeposit', 'KeepAlive', 'ExistingVestingSchedule', 'DeadAccount', 'TooManyReserves']
},
/**
- * Lookup183: pallet_timestamp::pallet::Call<T>
+ * Lookup207: pallet_timestamp::pallet::Call<T>
**/
PalletTimestampCall: {
_enum: {
@@ -1614,13 +1776,13 @@
}
},
/**
- * Lookup185: pallet_transaction_payment::Releases
+ * Lookup209: pallet_transaction_payment::Releases
**/
PalletTransactionPaymentReleases: {
_enum: ['V1Ancient', 'V2']
},
/**
- * Lookup186: pallet_treasury::Proposal<sp_core::crypto::AccountId32, Balance>
+ * Lookup210: pallet_treasury::Proposal<sp_core::crypto::AccountId32, Balance>
**/
PalletTreasuryProposal: {
proposer: 'AccountId32',
@@ -1629,7 +1791,7 @@
bond: 'u128'
},
/**
- * Lookup189: pallet_treasury::pallet::Call<T, I>
+ * Lookup212: pallet_treasury::pallet::Call<T, I>
**/
PalletTreasuryCall: {
_enum: {
@@ -1653,17 +1815,17 @@
}
},
/**
- * Lookup192: frame_support::PalletId
+ * Lookup215: frame_support::PalletId
**/
FrameSupportPalletId: '[u8;8]',
/**
- * Lookup193: pallet_treasury::pallet::Error<T, I>
+ * Lookup216: pallet_treasury::pallet::Error<T, I>
**/
PalletTreasuryError: {
_enum: ['InsufficientProposersBalance', 'InvalidIndex', 'TooManyApprovals', 'InsufficientPermission', 'ProposalNotApproved']
},
/**
- * Lookup194: pallet_sudo::pallet::Call<T>
+ * Lookup217: pallet_sudo::pallet::Call<T>
**/
PalletSudoCall: {
_enum: {
@@ -1687,7 +1849,7 @@
}
},
/**
- * Lookup196: orml_vesting::module::Call<T>
+ * Lookup219: orml_vesting::module::Call<T>
**/
OrmlVestingModuleCall: {
_enum: {
@@ -1706,7 +1868,7 @@
}
},
/**
- * Lookup198: orml_xtokens::module::Call<T>
+ * Lookup221: orml_xtokens::module::Call<T>
**/
OrmlXtokensModuleCall: {
_enum: {
@@ -1749,7 +1911,7 @@
}
},
/**
- * Lookup199: xcm::VersionedMultiAsset
+ * Lookup222: xcm::VersionedMultiAsset
**/
XcmVersionedMultiAsset: {
_enum: {
@@ -1758,7 +1920,7 @@
}
},
/**
- * Lookup202: orml_tokens::module::Call<T>
+ * Lookup225: orml_tokens::module::Call<T>
**/
OrmlTokensModuleCall: {
_enum: {
@@ -1792,7 +1954,7 @@
}
},
/**
- * Lookup203: cumulus_pallet_xcmp_queue::pallet::Call<T>
+ * Lookup226: cumulus_pallet_xcmp_queue::pallet::Call<T>
**/
CumulusPalletXcmpQueueCall: {
_enum: {
@@ -1841,7 +2003,7 @@
}
},
/**
- * Lookup204: pallet_xcm::pallet::Call<T>
+ * Lookup227: pallet_xcm::pallet::Call<T>
**/
PalletXcmCall: {
_enum: {
@@ -1895,7 +2057,7 @@
}
},
/**
- * Lookup205: xcm::VersionedXcm<RuntimeCall>
+ * Lookup228: xcm::VersionedXcm<RuntimeCall>
**/
XcmVersionedXcm: {
_enum: {
@@ -1905,7 +2067,7 @@
}
},
/**
- * Lookup206: xcm::v0::Xcm<RuntimeCall>
+ * Lookup229: xcm::v0::Xcm<RuntimeCall>
**/
XcmV0Xcm: {
_enum: {
@@ -1959,7 +2121,7 @@
}
},
/**
- * Lookup208: xcm::v0::order::Order<RuntimeCall>
+ * Lookup231: xcm::v0::order::Order<RuntimeCall>
**/
XcmV0Order: {
_enum: {
@@ -2002,7 +2164,7 @@
}
},
/**
- * Lookup210: xcm::v0::Response
+ * Lookup233: xcm::v0::Response
**/
XcmV0Response: {
_enum: {
@@ -2010,7 +2172,7 @@
}
},
/**
- * Lookup211: xcm::v1::Xcm<RuntimeCall>
+ * Lookup234: xcm::v1::Xcm<RuntimeCall>
**/
XcmV1Xcm: {
_enum: {
@@ -2069,7 +2231,7 @@
}
},
/**
- * Lookup213: xcm::v1::order::Order<RuntimeCall>
+ * Lookup236: xcm::v1::order::Order<RuntimeCall>
**/
XcmV1Order: {
_enum: {
@@ -2114,7 +2276,7 @@
}
},
/**
- * Lookup215: xcm::v1::Response
+ * Lookup238: xcm::v1::Response
**/
XcmV1Response: {
_enum: {
@@ -2123,11 +2285,11 @@
}
},
/**
- * Lookup229: cumulus_pallet_xcm::pallet::Call<T>
+ * Lookup252: cumulus_pallet_xcm::pallet::Call<T>
**/
CumulusPalletXcmCall: 'Null',
/**
- * Lookup230: cumulus_pallet_dmp_queue::pallet::Call<T>
+ * Lookup253: cumulus_pallet_dmp_queue::pallet::Call<T>
**/
CumulusPalletDmpQueueCall: {
_enum: {
@@ -2138,7 +2300,7 @@
}
},
/**
- * Lookup231: pallet_inflation::pallet::Call<T>
+ * Lookup254: pallet_inflation::pallet::Call<T>
**/
PalletInflationCall: {
_enum: {
@@ -2148,7 +2310,7 @@
}
},
/**
- * Lookup232: pallet_unique::Call<T>
+ * Lookup255: pallet_unique::Call<T>
**/
PalletUniqueCall: {
_enum: {
@@ -2282,14 +2444,17 @@
operator: 'PalletEvmAccountBasicCrossAccountIdRepr',
approve: 'bool',
},
- repair_item: {
+ force_repair_collection: {
+ collectionId: 'u32',
+ },
+ force_repair_item: {
collectionId: 'u32',
itemId: 'u32'
}
}
},
/**
- * Lookup237: up_data_structs::CollectionMode
+ * Lookup260: up_data_structs::CollectionMode
**/
UpDataStructsCollectionMode: {
_enum: {
@@ -2299,7 +2464,7 @@
}
},
/**
- * Lookup238: up_data_structs::CreateCollectionData<sp_core::crypto::AccountId32>
+ * Lookup261: up_data_structs::CreateCollectionData<sp_core::crypto::AccountId32>
**/
UpDataStructsCreateCollectionData: {
mode: 'UpDataStructsCollectionMode',
@@ -2314,13 +2479,13 @@
properties: 'Vec<UpDataStructsProperty>'
},
/**
- * Lookup240: up_data_structs::AccessMode
+ * Lookup263: up_data_structs::AccessMode
**/
UpDataStructsAccessMode: {
_enum: ['Normal', 'AllowList']
},
/**
- * Lookup242: up_data_structs::CollectionLimits
+ * Lookup265: up_data_structs::CollectionLimits
**/
UpDataStructsCollectionLimits: {
accountTokenOwnershipLimit: 'Option<u32>',
@@ -2334,7 +2499,7 @@
transfersEnabled: 'Option<bool>'
},
/**
- * Lookup244: up_data_structs::SponsoringRateLimit
+ * Lookup267: up_data_structs::SponsoringRateLimit
**/
UpDataStructsSponsoringRateLimit: {
_enum: {
@@ -2343,7 +2508,7 @@
}
},
/**
- * Lookup247: up_data_structs::CollectionPermissions
+ * Lookup270: up_data_structs::CollectionPermissions
**/
UpDataStructsCollectionPermissions: {
access: 'Option<UpDataStructsAccessMode>',
@@ -2351,7 +2516,7 @@
nesting: 'Option<UpDataStructsNestingPermissions>'
},
/**
- * Lookup249: up_data_structs::NestingPermissions
+ * Lookup272: up_data_structs::NestingPermissions
**/
UpDataStructsNestingPermissions: {
tokenOwner: 'bool',
@@ -2359,18 +2524,18 @@
restricted: 'Option<UpDataStructsOwnerRestrictedSet>'
},
/**
- * Lookup251: up_data_structs::OwnerRestrictedSet
+ * Lookup274: up_data_structs::OwnerRestrictedSet
**/
UpDataStructsOwnerRestrictedSet: 'BTreeSet<u32>',
/**
- * Lookup256: up_data_structs::PropertyKeyPermission
+ * Lookup279: up_data_structs::PropertyKeyPermission
**/
UpDataStructsPropertyKeyPermission: {
key: 'Bytes',
permission: 'UpDataStructsPropertyPermission'
},
/**
- * Lookup257: up_data_structs::PropertyPermission
+ * Lookup280: up_data_structs::PropertyPermission
**/
UpDataStructsPropertyPermission: {
mutable: 'bool',
@@ -2378,14 +2543,14 @@
tokenOwner: 'bool'
},
/**
- * Lookup260: up_data_structs::Property
+ * Lookup283: up_data_structs::Property
**/
UpDataStructsProperty: {
key: 'Bytes',
value: 'Bytes'
},
/**
- * Lookup263: up_data_structs::CreateItemData
+ * Lookup286: up_data_structs::CreateItemData
**/
UpDataStructsCreateItemData: {
_enum: {
@@ -2395,26 +2560,26 @@
}
},
/**
- * Lookup264: up_data_structs::CreateNftData
+ * Lookup287: up_data_structs::CreateNftData
**/
UpDataStructsCreateNftData: {
properties: 'Vec<UpDataStructsProperty>'
},
/**
- * Lookup265: up_data_structs::CreateFungibleData
+ * Lookup288: up_data_structs::CreateFungibleData
**/
UpDataStructsCreateFungibleData: {
value: 'u128'
},
/**
- * Lookup266: up_data_structs::CreateReFungibleData
+ * Lookup289: up_data_structs::CreateReFungibleData
**/
UpDataStructsCreateReFungibleData: {
pieces: 'u128',
properties: 'Vec<UpDataStructsProperty>'
},
/**
- * Lookup269: up_data_structs::CreateItemExData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+ * Lookup292: up_data_structs::CreateItemExData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
**/
UpDataStructsCreateItemExData: {
_enum: {
@@ -2425,14 +2590,14 @@
}
},
/**
- * Lookup271: up_data_structs::CreateNftExData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+ * Lookup294: up_data_structs::CreateNftExData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
**/
UpDataStructsCreateNftExData: {
properties: 'Vec<UpDataStructsProperty>',
owner: 'PalletEvmAccountBasicCrossAccountIdRepr'
},
/**
- * Lookup278: up_data_structs::CreateRefungibleExSingleOwner<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+ * Lookup301: up_data_structs::CreateRefungibleExSingleOwner<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
**/
UpDataStructsCreateRefungibleExSingleOwner: {
user: 'PalletEvmAccountBasicCrossAccountIdRepr',
@@ -2440,14 +2605,14 @@
properties: 'Vec<UpDataStructsProperty>'
},
/**
- * Lookup280: up_data_structs::CreateRefungibleExMultipleOwners<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+ * Lookup303: up_data_structs::CreateRefungibleExMultipleOwners<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
**/
UpDataStructsCreateRefungibleExMultipleOwners: {
users: 'BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>',
properties: 'Vec<UpDataStructsProperty>'
},
/**
- * Lookup281: pallet_configuration::pallet::Call<T>
+ * Lookup304: pallet_configuration::pallet::Call<T>
**/
PalletConfigurationCall: {
_enum: {
@@ -2466,7 +2631,7 @@
}
},
/**
- * Lookup286: pallet_configuration::AppPromotionConfiguration<BlockNumber>
+ * Lookup309: pallet_configuration::AppPromotionConfiguration<BlockNumber>
**/
PalletConfigurationAppPromotionConfiguration: {
recalculationInterval: 'Option<u32>',
@@ -2475,15 +2640,15 @@
maxStakersPerCalculation: 'Option<u8>'
},
/**
- * Lookup289: pallet_template_transaction_payment::Call<T>
+ * Lookup312: pallet_template_transaction_payment::Call<T>
**/
PalletTemplateTransactionPaymentCall: 'Null',
/**
- * Lookup290: pallet_structure::pallet::Call<T>
+ * Lookup313: pallet_structure::pallet::Call<T>
**/
PalletStructureCall: 'Null',
/**
- * Lookup291: pallet_rmrk_core::pallet::Call<T>
+ * Lookup314: pallet_rmrk_core::pallet::Call<T>
**/
PalletRmrkCoreCall: {
_enum: {
@@ -2574,7 +2739,7 @@
}
},
/**
- * Lookup297: rmrk_traits::resource::ResourceTypes<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup320: rmrk_traits::resource::ResourceTypes<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsResourceResourceTypes: {
_enum: {
@@ -2584,7 +2749,7 @@
}
},
/**
- * Lookup299: rmrk_traits::resource::BasicResource<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup322: rmrk_traits::resource::BasicResource<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsResourceBasicResource: {
src: 'Option<Bytes>',
@@ -2593,7 +2758,7 @@
thumb: 'Option<Bytes>'
},
/**
- * Lookup301: rmrk_traits::resource::ComposableResource<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup324: rmrk_traits::resource::ComposableResource<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsResourceComposableResource: {
parts: 'Vec<u32>',
@@ -2604,7 +2769,7 @@
thumb: 'Option<Bytes>'
},
/**
- * Lookup302: rmrk_traits::resource::SlotResource<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup325: rmrk_traits::resource::SlotResource<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsResourceSlotResource: {
base: 'u32',
@@ -2615,7 +2780,7 @@
thumb: 'Option<Bytes>'
},
/**
- * Lookup305: pallet_rmrk_equip::pallet::Call<T>
+ * Lookup328: pallet_rmrk_equip::pallet::Call<T>
**/
PalletRmrkEquipCall: {
_enum: {
@@ -2636,7 +2801,7 @@
}
},
/**
- * Lookup308: rmrk_traits::part::PartType<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup331: rmrk_traits::part::PartType<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsPartPartType: {
_enum: {
@@ -2645,7 +2810,7 @@
}
},
/**
- * Lookup310: rmrk_traits::part::FixedPart<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup333: rmrk_traits::part::FixedPart<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsPartFixedPart: {
id: 'u32',
@@ -2653,7 +2818,7 @@
src: 'Bytes'
},
/**
- * Lookup311: rmrk_traits::part::SlotPart<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup334: rmrk_traits::part::SlotPart<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsPartSlotPart: {
id: 'u32',
@@ -2662,7 +2827,7 @@
z: 'u32'
},
/**
- * Lookup312: rmrk_traits::part::EquippableList<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup335: rmrk_traits::part::EquippableList<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsPartEquippableList: {
_enum: {
@@ -2672,7 +2837,7 @@
}
},
/**
- * Lookup314: rmrk_traits::theme::Theme<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<rmrk_traits::theme::ThemeProperty<sp_core::bounded::bounded_vec::BoundedVec<T, S>>, S>>
+ * Lookup337: rmrk_traits::theme::Theme<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<rmrk_traits::theme::ThemeProperty<sp_core::bounded::bounded_vec::BoundedVec<T, S>>, S>>
**/
RmrkTraitsTheme: {
name: 'Bytes',
@@ -2680,14 +2845,14 @@
inherit: 'bool'
},
/**
- * Lookup316: rmrk_traits::theme::ThemeProperty<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup339: rmrk_traits::theme::ThemeProperty<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsThemeThemeProperty: {
key: 'Bytes',
value: 'Bytes'
},
/**
- * Lookup318: pallet_app_promotion::pallet::Call<T>
+ * Lookup341: pallet_app_promotion::pallet::Call<T>
**/
PalletAppPromotionCall: {
_enum: {
@@ -2716,7 +2881,7 @@
}
},
/**
- * Lookup319: pallet_foreign_assets::module::Call<T>
+ * Lookup342: pallet_foreign_assets::module::Call<T>
**/
PalletForeignAssetsModuleCall: {
_enum: {
@@ -2733,7 +2898,7 @@
}
},
/**
- * Lookup320: pallet_evm::pallet::Call<T>
+ * Lookup343: pallet_evm::pallet::Call<T>
**/
PalletEvmCall: {
_enum: {
@@ -2776,7 +2941,7 @@
}
},
/**
- * Lookup326: pallet_ethereum::pallet::Call<T>
+ * Lookup349: pallet_ethereum::pallet::Call<T>
**/
PalletEthereumCall: {
_enum: {
@@ -2786,7 +2951,7 @@
}
},
/**
- * Lookup327: ethereum::transaction::TransactionV2
+ * Lookup350: ethereum::transaction::TransactionV2
**/
EthereumTransactionTransactionV2: {
_enum: {
@@ -2796,7 +2961,7 @@
}
},
/**
- * Lookup328: ethereum::transaction::LegacyTransaction
+ * Lookup351: ethereum::transaction::LegacyTransaction
**/
EthereumTransactionLegacyTransaction: {
nonce: 'U256',
@@ -2808,7 +2973,7 @@
signature: 'EthereumTransactionTransactionSignature'
},
/**
- * Lookup329: ethereum::transaction::TransactionAction
+ * Lookup352: ethereum::transaction::TransactionAction
**/
EthereumTransactionTransactionAction: {
_enum: {
@@ -2817,7 +2982,7 @@
}
},
/**
- * Lookup330: ethereum::transaction::TransactionSignature
+ * Lookup353: ethereum::transaction::TransactionSignature
**/
EthereumTransactionTransactionSignature: {
v: 'u64',
@@ -2825,7 +2990,7 @@
s: 'H256'
},
/**
- * Lookup332: ethereum::transaction::EIP2930Transaction
+ * Lookup355: ethereum::transaction::EIP2930Transaction
**/
EthereumTransactionEip2930Transaction: {
chainId: 'u64',
@@ -2841,14 +3006,14 @@
s: 'H256'
},
/**
- * Lookup334: ethereum::transaction::AccessListItem
+ * Lookup357: ethereum::transaction::AccessListItem
**/
EthereumTransactionAccessListItem: {
address: 'H160',
storageKeys: 'Vec<H256>'
},
/**
- * Lookup335: ethereum::transaction::EIP1559Transaction
+ * Lookup358: ethereum::transaction::EIP1559Transaction
**/
EthereumTransactionEip1559Transaction: {
chainId: 'u64',
@@ -2865,7 +3030,7 @@
s: 'H256'
},
/**
- * Lookup336: pallet_evm_migration::pallet::Call<T>
+ * Lookup359: pallet_evm_migration::pallet::Call<T>
**/
PalletEvmMigrationCall: {
_enum: {
@@ -2889,13 +3054,13 @@
}
},
/**
- * Lookup340: pallet_maintenance::pallet::Call<T>
+ * Lookup363: pallet_maintenance::pallet::Call<T>
**/
PalletMaintenanceCall: {
_enum: ['enable', 'disable']
},
/**
- * Lookup341: pallet_test_utils::pallet::Call<T>
+ * Lookup364: pallet_test_utils::pallet::Call<T>
**/
PalletTestUtilsCall: {
_enum: {
@@ -2914,32 +3079,32 @@
}
},
/**
- * Lookup343: pallet_sudo::pallet::Error<T>
+ * Lookup366: pallet_sudo::pallet::Error<T>
**/
PalletSudoError: {
_enum: ['RequireSudo']
},
/**
- * Lookup345: orml_vesting::module::Error<T>
+ * Lookup368: orml_vesting::module::Error<T>
**/
OrmlVestingModuleError: {
_enum: ['ZeroVestingPeriod', 'ZeroVestingPeriodCount', 'InsufficientBalanceToLock', 'TooManyVestingSchedules', 'AmountLow', 'MaxVestingSchedulesExceeded']
},
/**
- * Lookup346: orml_xtokens::module::Error<T>
+ * Lookup369: orml_xtokens::module::Error<T>
**/
OrmlXtokensModuleError: {
_enum: ['AssetHasNoReserve', 'NotCrossChainTransfer', 'InvalidDest', 'NotCrossChainTransferableCurrency', 'UnweighableMessage', 'XcmExecutionFailed', 'CannotReanchor', 'InvalidAncestry', 'InvalidAsset', 'DestinationNotInvertible', 'BadVersion', 'DistinctReserveForAssetAndFee', 'ZeroFee', 'ZeroAmount', 'TooManyAssetsBeingSent', 'AssetIndexNonExistent', 'FeeNotEnough', 'NotSupportedMultiLocation', 'MinXcmFeeNotDefined']
},
/**
- * Lookup349: orml_tokens::BalanceLock<Balance>
+ * Lookup372: orml_tokens::BalanceLock<Balance>
**/
OrmlTokensBalanceLock: {
id: '[u8;8]',
amount: 'u128'
},
/**
- * Lookup351: orml_tokens::AccountData<Balance>
+ * Lookup374: orml_tokens::AccountData<Balance>
**/
OrmlTokensAccountData: {
free: 'u128',
@@ -2947,20 +3112,20 @@
frozen: 'u128'
},
/**
- * Lookup353: orml_tokens::ReserveData<ReserveIdentifier, Balance>
+ * Lookup376: orml_tokens::ReserveData<ReserveIdentifier, Balance>
**/
OrmlTokensReserveData: {
id: 'Null',
amount: 'u128'
},
/**
- * Lookup355: orml_tokens::module::Error<T>
+ * Lookup378: orml_tokens::module::Error<T>
**/
OrmlTokensModuleError: {
_enum: ['BalanceTooLow', 'AmountIntoBalanceFailed', 'LiquidityRestrictions', 'MaxLocksExceeded', 'KeepAlive', 'ExistentialDeposit', 'DeadAccount', 'TooManyReserves']
},
/**
- * Lookup357: cumulus_pallet_xcmp_queue::InboundChannelDetails
+ * Lookup380: cumulus_pallet_xcmp_queue::InboundChannelDetails
**/
CumulusPalletXcmpQueueInboundChannelDetails: {
sender: 'u32',
@@ -2968,19 +3133,19 @@
messageMetadata: 'Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>'
},
/**
- * Lookup358: cumulus_pallet_xcmp_queue::InboundState
+ * Lookup381: cumulus_pallet_xcmp_queue::InboundState
**/
CumulusPalletXcmpQueueInboundState: {
_enum: ['Ok', 'Suspended']
},
/**
- * Lookup361: polkadot_parachain::primitives::XcmpMessageFormat
+ * Lookup384: polkadot_parachain::primitives::XcmpMessageFormat
**/
PolkadotParachainPrimitivesXcmpMessageFormat: {
_enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals']
},
/**
- * Lookup364: cumulus_pallet_xcmp_queue::OutboundChannelDetails
+ * Lookup387: cumulus_pallet_xcmp_queue::OutboundChannelDetails
**/
CumulusPalletXcmpQueueOutboundChannelDetails: {
recipient: 'u32',
@@ -2990,13 +3155,13 @@
lastIndex: 'u16'
},
/**
- * Lookup365: cumulus_pallet_xcmp_queue::OutboundState
+ * Lookup388: cumulus_pallet_xcmp_queue::OutboundState
**/
CumulusPalletXcmpQueueOutboundState: {
_enum: ['Ok', 'Suspended']
},
/**
- * Lookup367: cumulus_pallet_xcmp_queue::QueueConfigData
+ * Lookup390: cumulus_pallet_xcmp_queue::QueueConfigData
**/
CumulusPalletXcmpQueueQueueConfigData: {
suspendThreshold: 'u32',
@@ -3007,29 +3172,29 @@
xcmpMaxIndividualWeight: 'SpWeightsWeightV2Weight'
},
/**
- * Lookup369: cumulus_pallet_xcmp_queue::pallet::Error<T>
+ * Lookup392: cumulus_pallet_xcmp_queue::pallet::Error<T>
**/
CumulusPalletXcmpQueueError: {
_enum: ['FailedToSend', 'BadXcmOrigin', 'BadXcm', 'BadOverweightIndex', 'WeightOverLimit']
},
/**
- * Lookup370: pallet_xcm::pallet::Error<T>
+ * Lookup393: pallet_xcm::pallet::Error<T>
**/
PalletXcmError: {
_enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed']
},
/**
- * Lookup371: cumulus_pallet_xcm::pallet::Error<T>
+ * Lookup394: cumulus_pallet_xcm::pallet::Error<T>
**/
CumulusPalletXcmError: 'Null',
/**
- * Lookup372: cumulus_pallet_dmp_queue::ConfigData
+ * Lookup395: cumulus_pallet_dmp_queue::ConfigData
**/
CumulusPalletDmpQueueConfigData: {
maxIndividual: 'SpWeightsWeightV2Weight'
},
/**
- * Lookup373: cumulus_pallet_dmp_queue::PageIndexData
+ * Lookup396: cumulus_pallet_dmp_queue::PageIndexData
**/
CumulusPalletDmpQueuePageIndexData: {
beginUsed: 'u32',
@@ -3037,25 +3202,25 @@
overweightCount: 'u64'
},
/**
- * Lookup376: cumulus_pallet_dmp_queue::pallet::Error<T>
+ * Lookup399: cumulus_pallet_dmp_queue::pallet::Error<T>
**/
CumulusPalletDmpQueueError: {
_enum: ['Unknown', 'OverLimit']
},
/**
- * Lookup380: pallet_unique::Error<T>
+ * Lookup403: pallet_unique::Error<T>
**/
PalletUniqueError: {
_enum: ['CollectionDecimalPointLimitExceeded', 'EmptyArgument', 'RepartitionCalledOnNonRefungibleCollection']
},
/**
- * Lookup381: pallet_configuration::pallet::Error<T>
+ * Lookup404: pallet_configuration::pallet::Error<T>
**/
PalletConfigurationError: {
_enum: ['InconsistentConfiguration']
},
/**
- * Lookup382: up_data_structs::Collection<sp_core::crypto::AccountId32>
+ * Lookup405: up_data_structs::Collection<sp_core::crypto::AccountId32>
**/
UpDataStructsCollection: {
owner: 'AccountId32',
@@ -3069,7 +3234,7 @@
flags: '[u8;1]'
},
/**
- * Lookup383: up_data_structs::SponsorshipState<sp_core::crypto::AccountId32>
+ * Lookup406: up_data_structs::SponsorshipState<sp_core::crypto::AccountId32>
**/
UpDataStructsSponsorshipStateAccountId32: {
_enum: {
@@ -3079,7 +3244,7 @@
}
},
/**
- * Lookup385: up_data_structs::Properties
+ * Lookup408: up_data_structs::Properties
**/
UpDataStructsProperties: {
map: 'UpDataStructsPropertiesMapBoundedVec',
@@ -3087,15 +3252,15 @@
spaceLimit: 'u32'
},
/**
- * Lookup386: up_data_structs::PropertiesMap<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup409: up_data_structs::PropertiesMap<sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
UpDataStructsPropertiesMapBoundedVec: 'BTreeMap<Bytes, Bytes>',
/**
- * Lookup391: up_data_structs::PropertiesMap<up_data_structs::PropertyPermission>
+ * Lookup414: up_data_structs::PropertiesMap<up_data_structs::PropertyPermission>
**/
UpDataStructsPropertiesMapPropertyPermission: 'BTreeMap<Bytes, UpDataStructsPropertyPermission>',
/**
- * Lookup398: up_data_structs::CollectionStats
+ * Lookup421: up_data_structs::CollectionStats
**/
UpDataStructsCollectionStats: {
created: 'u32',
@@ -3103,18 +3268,18 @@
alive: 'u32'
},
/**
- * Lookup399: up_data_structs::TokenChild
+ * Lookup422: up_data_structs::TokenChild
**/
UpDataStructsTokenChild: {
token: 'u32',
collection: 'u32'
},
/**
- * Lookup400: PhantomType::up_data_structs<T>
+ * Lookup423: PhantomType::up_data_structs<T>
**/
PhantomTypeUpDataStructs: '[(UpDataStructsTokenData,UpDataStructsRpcCollection,RmrkTraitsCollectionCollectionInfo,RmrkTraitsNftNftInfo,RmrkTraitsResourceResourceInfo,RmrkTraitsPropertyPropertyInfo,RmrkTraitsBaseBaseInfo,RmrkTraitsPartPartType,RmrkTraitsTheme,RmrkTraitsNftNftChild);0]',
/**
- * Lookup402: up_data_structs::TokenData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+ * Lookup425: up_data_structs::TokenData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
**/
UpDataStructsTokenData: {
properties: 'Vec<UpDataStructsProperty>',
@@ -3122,7 +3287,7 @@
pieces: 'u128'
},
/**
- * Lookup404: up_data_structs::RpcCollection<sp_core::crypto::AccountId32>
+ * Lookup427: up_data_structs::RpcCollection<sp_core::crypto::AccountId32>
**/
UpDataStructsRpcCollection: {
owner: 'AccountId32',
@@ -3139,14 +3304,14 @@
flags: 'UpDataStructsRpcCollectionFlags'
},
/**
- * Lookup405: up_data_structs::RpcCollectionFlags
+ * Lookup428: up_data_structs::RpcCollectionFlags
**/
UpDataStructsRpcCollectionFlags: {
foreign: 'bool',
erc721metadata: 'bool'
},
/**
- * Lookup406: rmrk_traits::collection::CollectionInfo<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::crypto::AccountId32>
+ * Lookup429: rmrk_traits::collection::CollectionInfo<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::crypto::AccountId32>
**/
RmrkTraitsCollectionCollectionInfo: {
issuer: 'AccountId32',
@@ -3156,7 +3321,7 @@
nftsCount: 'u32'
},
/**
- * Lookup407: rmrk_traits::nft::NftInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup430: rmrk_traits::nft::NftInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsNftNftInfo: {
owner: 'RmrkTraitsNftAccountIdOrCollectionNftTuple',
@@ -3166,14 +3331,14 @@
pending: 'bool'
},
/**
- * Lookup409: rmrk_traits::nft::RoyaltyInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill>
+ * Lookup432: rmrk_traits::nft::RoyaltyInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill>
**/
RmrkTraitsNftRoyaltyInfo: {
recipient: 'AccountId32',
amount: 'Permill'
},
/**
- * Lookup410: rmrk_traits::resource::ResourceInfo<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup433: rmrk_traits::resource::ResourceInfo<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsResourceResourceInfo: {
id: 'u32',
@@ -3182,14 +3347,14 @@
pendingRemoval: 'bool'
},
/**
- * Lookup411: rmrk_traits::property::PropertyInfo<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup434: rmrk_traits::property::PropertyInfo<sp_core::bounded::bounded_vec::BoundedVec<T, S>, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsPropertyPropertyInfo: {
key: 'Bytes',
value: 'Bytes'
},
/**
- * Lookup412: rmrk_traits::base::BaseInfo<sp_core::crypto::AccountId32, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
+ * Lookup435: rmrk_traits::base::BaseInfo<sp_core::crypto::AccountId32, sp_core::bounded::bounded_vec::BoundedVec<T, S>>
**/
RmrkTraitsBaseBaseInfo: {
issuer: 'AccountId32',
@@ -3197,92 +3362,92 @@
symbol: 'Bytes'
},
/**
- * Lookup413: rmrk_traits::nft::NftChild
+ * Lookup436: rmrk_traits::nft::NftChild
**/
RmrkTraitsNftNftChild: {
collectionId: 'u32',
nftId: 'u32'
},
/**
- * Lookup415: pallet_common::pallet::Error<T>
+ * Lookup438: 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']
},
/**
- * Lookup417: pallet_fungible::pallet::Error<T>
+ * Lookup440: pallet_fungible::pallet::Error<T>
**/
PalletFungibleError: {
_enum: ['NotFungibleDataUsedToMintFungibleCollectionToken', 'FungibleItemsHaveNoId', 'FungibleItemsDontHaveData', 'FungibleDisallowsNesting', 'SettingPropertiesNotAllowed', 'SettingAllowanceForAllNotAllowed', 'FungibleTokensAreAlwaysValid']
},
/**
- * Lookup418: pallet_refungible::ItemData
+ * Lookup441: pallet_refungible::ItemData
**/
PalletRefungibleItemData: {
constData: 'Bytes'
},
/**
- * Lookup423: pallet_refungible::pallet::Error<T>
+ * Lookup446: pallet_refungible::pallet::Error<T>
**/
PalletRefungibleError: {
_enum: ['NotRefungibleDataUsedToMintFungibleCollectionToken', 'WrongRefungiblePieces', 'RepartitionWhileNotOwningAllPieces', 'RefungibleDisallowsNesting', 'SettingPropertiesNotAllowed']
},
/**
- * Lookup424: pallet_nonfungible::ItemData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+ * Lookup447: pallet_nonfungible::ItemData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
**/
PalletNonfungibleItemData: {
owner: 'PalletEvmAccountBasicCrossAccountIdRepr'
},
/**
- * Lookup426: up_data_structs::PropertyScope
+ * Lookup449: up_data_structs::PropertyScope
**/
UpDataStructsPropertyScope: {
_enum: ['None', 'Rmrk']
},
/**
- * Lookup428: pallet_nonfungible::pallet::Error<T>
+ * Lookup451: pallet_nonfungible::pallet::Error<T>
**/
PalletNonfungibleError: {
_enum: ['NotNonfungibleDataUsedToMintFungibleCollectionToken', 'NonfungibleItemsHaveNoAmount', 'CantBurnNftWithChildren']
},
/**
- * Lookup429: pallet_structure::pallet::Error<T>
+ * Lookup452: pallet_structure::pallet::Error<T>
**/
PalletStructureError: {
_enum: ['OuroborosDetected', 'DepthLimit', 'BreadthLimit', 'TokenNotFound']
},
/**
- * Lookup430: pallet_rmrk_core::pallet::Error<T>
+ * Lookup453: pallet_rmrk_core::pallet::Error<T>
**/
PalletRmrkCoreError: {
_enum: ['CorruptedCollectionType', 'RmrkPropertyKeyIsTooLong', 'RmrkPropertyValueIsTooLong', 'RmrkPropertyIsNotFound', 'UnableToDecodeRmrkData', 'CollectionNotEmpty', 'NoAvailableCollectionId', 'NoAvailableNftId', 'CollectionUnknown', 'NoPermission', 'NonTransferable', 'CollectionFullOrLocked', 'ResourceDoesntExist', 'CannotSendToDescendentOrSelf', 'CannotAcceptNonOwnedNft', 'CannotRejectNonOwnedNft', 'CannotRejectNonPendingNft', 'ResourceNotPending', 'NoAvailableResourceId']
},
/**
- * Lookup432: pallet_rmrk_equip::pallet::Error<T>
+ * Lookup455: pallet_rmrk_equip::pallet::Error<T>
**/
PalletRmrkEquipError: {
_enum: ['PermissionError', 'NoAvailableBaseId', 'NoAvailablePartId', 'BaseDoesntExist', 'NeedsDefaultThemeFirst', 'PartDoesntExist', 'NoEquippableOnFixedPart']
},
/**
- * Lookup438: pallet_app_promotion::pallet::Error<T>
+ * Lookup461: pallet_app_promotion::pallet::Error<T>
**/
PalletAppPromotionError: {
_enum: ['AdminNotSet', 'NoPermission', 'NotSufficientFunds', 'PendingForBlockOverflow', 'SponsorNotSet', 'IncorrectLockedBalanceOperation']
},
/**
- * Lookup439: pallet_foreign_assets::module::Error<T>
+ * Lookup462: pallet_foreign_assets::module::Error<T>
**/
PalletForeignAssetsModuleError: {
_enum: ['BadLocation', 'MultiLocationExisted', 'AssetIdNotExists', 'AssetIdExisted']
},
/**
- * Lookup441: pallet_evm::pallet::Error<T>
+ * Lookup464: pallet_evm::pallet::Error<T>
**/
PalletEvmError: {
_enum: ['BalanceLow', 'FeeOverflow', 'PaymentOverflow', 'WithdrawFailed', 'GasPriceTooLow', 'InvalidNonce', 'GasLimitTooLow', 'GasLimitTooHigh', 'Undefined', 'Reentrancy']
},
/**
- * Lookup444: fp_rpc::TransactionStatus
+ * Lookup467: fp_rpc::TransactionStatus
**/
FpRpcTransactionStatus: {
transactionHash: 'H256',
@@ -3294,11 +3459,11 @@
logsBloom: 'EthbloomBloom'
},
/**
- * Lookup446: ethbloom::Bloom
+ * Lookup469: ethbloom::Bloom
**/
EthbloomBloom: '[u8;256]',
/**
- * Lookup448: ethereum::receipt::ReceiptV3
+ * Lookup471: ethereum::receipt::ReceiptV3
**/
EthereumReceiptReceiptV3: {
_enum: {
@@ -3308,7 +3473,7 @@
}
},
/**
- * Lookup449: ethereum::receipt::EIP658ReceiptData
+ * Lookup472: ethereum::receipt::EIP658ReceiptData
**/
EthereumReceiptEip658ReceiptData: {
statusCode: 'u8',
@@ -3317,7 +3482,7 @@
logs: 'Vec<EthereumLog>'
},
/**
- * Lookup450: ethereum::block::Block<ethereum::transaction::TransactionV2>
+ * Lookup473: ethereum::block::Block<ethereum::transaction::TransactionV2>
**/
EthereumBlock: {
header: 'EthereumHeader',
@@ -3325,7 +3490,7 @@
ommers: 'Vec<EthereumHeader>'
},
/**
- * Lookup451: ethereum::header::Header
+ * Lookup474: ethereum::header::Header
**/
EthereumHeader: {
parentHash: 'H256',
@@ -3345,23 +3510,23 @@
nonce: 'EthereumTypesHashH64'
},
/**
- * Lookup452: ethereum_types::hash::H64
+ * Lookup475: ethereum_types::hash::H64
**/
EthereumTypesHashH64: '[u8;8]',
/**
- * Lookup457: pallet_ethereum::pallet::Error<T>
+ * Lookup480: pallet_ethereum::pallet::Error<T>
**/
PalletEthereumError: {
_enum: ['InvalidSignature', 'PreLogExists']
},
/**
- * Lookup458: pallet_evm_coder_substrate::pallet::Error<T>
+ * Lookup481: pallet_evm_coder_substrate::pallet::Error<T>
**/
PalletEvmCoderSubstrateError: {
_enum: ['OutOfGas', 'OutOfFund']
},
/**
- * Lookup459: up_data_structs::SponsorshipState<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+ * Lookup482: up_data_structs::SponsorshipState<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
**/
UpDataStructsSponsorshipStateBasicCrossAccountIdRepr: {
_enum: {
@@ -3371,35 +3536,35 @@
}
},
/**
- * Lookup460: pallet_evm_contract_helpers::SponsoringModeT
+ * Lookup483: pallet_evm_contract_helpers::SponsoringModeT
**/
PalletEvmContractHelpersSponsoringModeT: {
_enum: ['Disabled', 'Allowlisted', 'Generous']
},
/**
- * Lookup466: pallet_evm_contract_helpers::pallet::Error<T>
+ * Lookup489: pallet_evm_contract_helpers::pallet::Error<T>
**/
PalletEvmContractHelpersError: {
_enum: ['NoPermission', 'NoPendingSponsor', 'TooManyMethodsHaveSponsoredLimit']
},
/**
- * Lookup467: pallet_evm_migration::pallet::Error<T>
+ * Lookup490: pallet_evm_migration::pallet::Error<T>
**/
PalletEvmMigrationError: {
_enum: ['AccountNotEmpty', 'AccountIsNotMigrating', 'BadEvent']
},
/**
- * Lookup468: pallet_maintenance::pallet::Error<T>
+ * Lookup491: pallet_maintenance::pallet::Error<T>
**/
PalletMaintenanceError: 'Null',
/**
- * Lookup469: pallet_test_utils::pallet::Error<T>
+ * Lookup492: pallet_test_utils::pallet::Error<T>
**/
PalletTestUtilsError: {
_enum: ['TestPalletDisabled', 'TriggerRollback']
},
/**
- * Lookup471: sp_runtime::MultiSignature
+ * Lookup494: sp_runtime::MultiSignature
**/
SpRuntimeMultiSignature: {
_enum: {
@@ -3409,51 +3574,51 @@
}
},
/**
- * Lookup472: sp_core::ed25519::Signature
+ * Lookup495: sp_core::ed25519::Signature
**/
SpCoreEd25519Signature: '[u8;64]',
/**
- * Lookup474: sp_core::sr25519::Signature
+ * Lookup497: sp_core::sr25519::Signature
**/
SpCoreSr25519Signature: '[u8;64]',
/**
- * Lookup475: sp_core::ecdsa::Signature
+ * Lookup498: sp_core::ecdsa::Signature
**/
SpCoreEcdsaSignature: '[u8;65]',
/**
- * Lookup478: frame_system::extensions::check_spec_version::CheckSpecVersion<T>
+ * Lookup501: frame_system::extensions::check_spec_version::CheckSpecVersion<T>
**/
FrameSystemExtensionsCheckSpecVersion: 'Null',
/**
- * Lookup479: frame_system::extensions::check_tx_version::CheckTxVersion<T>
+ * Lookup502: frame_system::extensions::check_tx_version::CheckTxVersion<T>
**/
FrameSystemExtensionsCheckTxVersion: 'Null',
/**
- * Lookup480: frame_system::extensions::check_genesis::CheckGenesis<T>
+ * Lookup503: frame_system::extensions::check_genesis::CheckGenesis<T>
**/
FrameSystemExtensionsCheckGenesis: 'Null',
/**
- * Lookup483: frame_system::extensions::check_nonce::CheckNonce<T>
+ * Lookup506: frame_system::extensions::check_nonce::CheckNonce<T>
**/
FrameSystemExtensionsCheckNonce: 'Compact<u32>',
/**
- * Lookup484: frame_system::extensions::check_weight::CheckWeight<T>
+ * Lookup507: frame_system::extensions::check_weight::CheckWeight<T>
**/
FrameSystemExtensionsCheckWeight: 'Null',
/**
- * Lookup485: opal_runtime::runtime_common::maintenance::CheckMaintenance
+ * Lookup508: opal_runtime::runtime_common::maintenance::CheckMaintenance
**/
OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance: 'Null',
/**
- * Lookup486: pallet_template_transaction_payment::ChargeTransactionPayment<opal_runtime::Runtime>
+ * Lookup509: pallet_template_transaction_payment::ChargeTransactionPayment<opal_runtime::Runtime>
**/
PalletTemplateTransactionPaymentChargeTransactionPayment: 'Compact<u128>',
/**
- * Lookup487: opal_runtime::Runtime
+ * Lookup510: opal_runtime::Runtime
**/
OpalRuntimeRuntime: 'Null',
/**
- * Lookup488: pallet_ethereum::FakeTransactionFinalizer<opal_runtime::Runtime>
+ * Lookup511: pallet_ethereum::FakeTransactionFinalizer<opal_runtime::Runtime>
**/
PalletEthereumFakeTransactionFinalizer: 'Null'
};
tests/src/interfaces/registry.tsdiffbeforeafterboth--- a/tests/src/interfaces/registry.ts
+++ b/tests/src/interfaces/registry.ts
@@ -5,7 +5,7 @@
// this is required to allow for ambient/previous definitions
import '@polkadot/types/types/registry';
-import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportPalletId, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletXcmCall, PalletXcmError, PalletXcmEvent, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
+import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportPalletId, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeRuntime, OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance, OpalRuntimeRuntimeCommonSessionKeys, OrmlTokensAccountData, OrmlTokensBalanceLock, OrmlTokensModuleCall, OrmlTokensModuleError, OrmlTokensModuleEvent, OrmlTokensReserveData, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, OrmlXtokensModuleCall, OrmlXtokensModuleError, OrmlXtokensModuleEvent, PalletAppPromotionCall, PalletAppPromotionError, PalletAppPromotionEvent, PalletAuthorshipCall, PalletAuthorshipError, PalletAuthorshipUncleEntryItem, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCollatorSelectionCall, PalletCollatorSelectionError, PalletCollatorSelectionEvent, PalletCommonError, PalletCommonEvent, PalletConfigurationAppPromotionConfiguration, PalletConfigurationCall, PalletConfigurationError, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersEvent, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletEvmMigrationEvent, PalletForeignAssetsAssetIds, PalletForeignAssetsModuleAssetMetadata, PalletForeignAssetsModuleCall, PalletForeignAssetsModuleError, PalletForeignAssetsModuleEvent, PalletForeignAssetsNativeCurrency, PalletFungibleError, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTestUtilsCall, PalletTestUtilsError, PalletTestUtilsEvent, PalletTimestampCall, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletXcmCall, PalletXcmError, PalletXcmEvent, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpRuntimeArithmeticError, SpRuntimeBlakeTwo256, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeHeader, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExMultipleOwners, UpDataStructsCreateRefungibleExSingleOwner, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsRpcCollectionFlags, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipStateAccountId32, UpDataStructsSponsorshipStateBasicCrossAccountIdRepr, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAsset, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
declare module '@polkadot/types/types/registry' {
interface InterfaceTypes {
@@ -75,6 +75,7 @@
FrameSystemPhase: FrameSystemPhase;
OpalRuntimeRuntime: OpalRuntimeRuntime;
OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance: OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance;
+ OpalRuntimeRuntimeCommonSessionKeys: OpalRuntimeRuntimeCommonSessionKeys;
OrmlTokensAccountData: OrmlTokensAccountData;
OrmlTokensBalanceLock: OrmlTokensBalanceLock;
OrmlTokensModuleCall: OrmlTokensModuleCall;
@@ -91,6 +92,9 @@
PalletAppPromotionCall: PalletAppPromotionCall;
PalletAppPromotionError: PalletAppPromotionError;
PalletAppPromotionEvent: PalletAppPromotionEvent;
+ PalletAuthorshipCall: PalletAuthorshipCall;
+ PalletAuthorshipError: PalletAuthorshipError;
+ PalletAuthorshipUncleEntryItem: PalletAuthorshipUncleEntryItem;
PalletBalancesAccountData: PalletBalancesAccountData;
PalletBalancesBalanceLock: PalletBalancesBalanceLock;
PalletBalancesCall: PalletBalancesCall;
@@ -99,6 +103,9 @@
PalletBalancesReasons: PalletBalancesReasons;
PalletBalancesReleases: PalletBalancesReleases;
PalletBalancesReserveData: PalletBalancesReserveData;
+ PalletCollatorSelectionCall: PalletCollatorSelectionCall;
+ PalletCollatorSelectionError: PalletCollatorSelectionError;
+ PalletCollatorSelectionEvent: PalletCollatorSelectionEvent;
PalletCommonError: PalletCommonError;
PalletCommonEvent: PalletCommonEvent;
PalletConfigurationAppPromotionConfiguration: PalletConfigurationAppPromotionConfiguration;
@@ -140,6 +147,9 @@
PalletRmrkEquipCall: PalletRmrkEquipCall;
PalletRmrkEquipError: PalletRmrkEquipError;
PalletRmrkEquipEvent: PalletRmrkEquipEvent;
+ PalletSessionCall: PalletSessionCall;
+ PalletSessionError: PalletSessionError;
+ PalletSessionEvent: PalletSessionEvent;
PalletStructureCall: PalletStructureCall;
PalletStructureError: PalletStructureError;
PalletStructureEvent: PalletStructureEvent;
@@ -190,13 +200,18 @@
RmrkTraitsResourceSlotResource: RmrkTraitsResourceSlotResource;
RmrkTraitsTheme: RmrkTraitsTheme;
RmrkTraitsThemeThemeProperty: RmrkTraitsThemeThemeProperty;
+ SpConsensusAuraSr25519AppSr25519Public: SpConsensusAuraSr25519AppSr25519Public;
+ SpCoreCryptoKeyTypeId: SpCoreCryptoKeyTypeId;
SpCoreEcdsaSignature: SpCoreEcdsaSignature;
SpCoreEd25519Signature: SpCoreEd25519Signature;
+ SpCoreSr25519Public: SpCoreSr25519Public;
SpCoreSr25519Signature: SpCoreSr25519Signature;
SpRuntimeArithmeticError: SpRuntimeArithmeticError;
+ SpRuntimeBlakeTwo256: SpRuntimeBlakeTwo256;
SpRuntimeDigest: SpRuntimeDigest;
SpRuntimeDigestDigestItem: SpRuntimeDigestDigestItem;
SpRuntimeDispatchError: SpRuntimeDispatchError;
+ SpRuntimeHeader: SpRuntimeHeader;
SpRuntimeModuleError: SpRuntimeModuleError;
SpRuntimeMultiSignature: SpRuntimeMultiSignature;
SpRuntimeTokenError: SpRuntimeTokenError;
tests/src/interfaces/types-lookup.tsdiffbeforeafterboth--- a/tests/src/interfaces/types-lookup.ts
+++ b/tests/src/interfaces/types-lookup.ts
@@ -196,7 +196,59 @@
readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed';
}
- /** @name PalletBalancesEvent (30) */
+ /** @name PalletCollatorSelectionEvent (30) */
+ interface PalletCollatorSelectionEvent extends Enum {
+ readonly isNewDesiredCollators: boolean;
+ readonly asNewDesiredCollators: {
+ readonly desiredCollators: u32;
+ } & Struct;
+ readonly isNewLicenseBond: boolean;
+ readonly asNewLicenseBond: {
+ readonly bondAmount: u128;
+ } & Struct;
+ readonly isNewKickThreshold: boolean;
+ readonly asNewKickThreshold: {
+ readonly lengthInBlocks: u32;
+ } & Struct;
+ readonly isInvulnerableAdded: boolean;
+ readonly asInvulnerableAdded: {
+ readonly invulnerable: AccountId32;
+ } & Struct;
+ readonly isInvulnerableRemoved: boolean;
+ readonly asInvulnerableRemoved: {
+ readonly invulnerable: AccountId32;
+ } & Struct;
+ readonly isLicenseObtained: boolean;
+ readonly asLicenseObtained: {
+ readonly accountId: AccountId32;
+ readonly deposit: u128;
+ } & Struct;
+ readonly isLicenseForfeited: boolean;
+ readonly asLicenseForfeited: {
+ readonly accountId: AccountId32;
+ readonly depositReturned: u128;
+ } & Struct;
+ readonly isCandidateAdded: boolean;
+ readonly asCandidateAdded: {
+ readonly accountId: AccountId32;
+ } & Struct;
+ readonly isCandidateRemoved: boolean;
+ readonly asCandidateRemoved: {
+ readonly accountId: AccountId32;
+ } & Struct;
+ readonly type: 'NewDesiredCollators' | 'NewLicenseBond' | 'NewKickThreshold' | 'InvulnerableAdded' | 'InvulnerableRemoved' | 'LicenseObtained' | 'LicenseForfeited' | 'CandidateAdded' | 'CandidateRemoved';
+ }
+
+ /** @name PalletSessionEvent (31) */
+ interface PalletSessionEvent extends Enum {
+ readonly isNewSession: boolean;
+ readonly asNewSession: {
+ readonly sessionIndex: u32;
+ } & Struct;
+ readonly type: 'NewSession';
+ }
+
+ /** @name PalletBalancesEvent (32) */
interface PalletBalancesEvent extends Enum {
readonly isEndowed: boolean;
readonly asEndowed: {
@@ -255,14 +307,14 @@
readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed';
}
- /** @name FrameSupportTokensMiscBalanceStatus (31) */
+ /** @name FrameSupportTokensMiscBalanceStatus (33) */
interface FrameSupportTokensMiscBalanceStatus extends Enum {
readonly isFree: boolean;
readonly isReserved: boolean;
readonly type: 'Free' | 'Reserved';
}
- /** @name PalletTransactionPaymentEvent (32) */
+ /** @name PalletTransactionPaymentEvent (34) */
interface PalletTransactionPaymentEvent extends Enum {
readonly isTransactionFeePaid: boolean;
readonly asTransactionFeePaid: {
@@ -273,7 +325,7 @@
readonly type: 'TransactionFeePaid';
}
- /** @name PalletTreasuryEvent (33) */
+ /** @name PalletTreasuryEvent (35) */
interface PalletTreasuryEvent extends Enum {
readonly isProposed: boolean;
readonly asProposed: {
@@ -315,7 +367,7 @@
readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit' | 'SpendApproved';
}
- /** @name PalletSudoEvent (34) */
+ /** @name PalletSudoEvent (36) */
interface PalletSudoEvent extends Enum {
readonly isSudid: boolean;
readonly asSudid: {
@@ -332,7 +384,7 @@
readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone';
}
- /** @name OrmlVestingModuleEvent (38) */
+ /** @name OrmlVestingModuleEvent (40) */
interface OrmlVestingModuleEvent extends Enum {
readonly isVestingScheduleAdded: boolean;
readonly asVestingScheduleAdded: {
@@ -352,7 +404,7 @@
readonly type: 'VestingScheduleAdded' | 'Claimed' | 'VestingSchedulesUpdated';
}
- /** @name OrmlVestingVestingSchedule (39) */
+ /** @name OrmlVestingVestingSchedule (41) */
interface OrmlVestingVestingSchedule extends Struct {
readonly start: u32;
readonly period: u32;
@@ -360,7 +412,7 @@
readonly perPeriod: Compact<u128>;
}
- /** @name OrmlXtokensModuleEvent (41) */
+ /** @name OrmlXtokensModuleEvent (43) */
interface OrmlXtokensModuleEvent extends Enum {
readonly isTransferredMultiAssets: boolean;
readonly asTransferredMultiAssets: {
@@ -372,16 +424,16 @@
readonly type: 'TransferredMultiAssets';
}
- /** @name XcmV1MultiassetMultiAssets (42) */
+ /** @name XcmV1MultiassetMultiAssets (44) */
interface XcmV1MultiassetMultiAssets extends Vec<XcmV1MultiAsset> {}
- /** @name XcmV1MultiAsset (44) */
+ /** @name XcmV1MultiAsset (46) */
interface XcmV1MultiAsset extends Struct {
readonly id: XcmV1MultiassetAssetId;
readonly fun: XcmV1MultiassetFungibility;
}
- /** @name XcmV1MultiassetAssetId (45) */
+ /** @name XcmV1MultiassetAssetId (47) */
interface XcmV1MultiassetAssetId extends Enum {
readonly isConcrete: boolean;
readonly asConcrete: XcmV1MultiLocation;
@@ -390,13 +442,13 @@
readonly type: 'Concrete' | 'Abstract';
}
- /** @name XcmV1MultiLocation (46) */
+ /** @name XcmV1MultiLocation (48) */
interface XcmV1MultiLocation extends Struct {
readonly parents: u8;
readonly interior: XcmV1MultilocationJunctions;
}
- /** @name XcmV1MultilocationJunctions (47) */
+ /** @name XcmV1MultilocationJunctions (49) */
interface XcmV1MultilocationJunctions extends Enum {
readonly isHere: boolean;
readonly isX1: boolean;
@@ -418,7 +470,7 @@
readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';
}
- /** @name XcmV1Junction (48) */
+ /** @name XcmV1Junction (50) */
interface XcmV1Junction extends Enum {
readonly isParachain: boolean;
readonly asParachain: Compact<u32>;
@@ -452,7 +504,7 @@
readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';
}
- /** @name XcmV0JunctionNetworkId (50) */
+ /** @name XcmV0JunctionNetworkId (52) */
interface XcmV0JunctionNetworkId extends Enum {
readonly isAny: boolean;
readonly isNamed: boolean;
@@ -462,7 +514,7 @@
readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama';
}
- /** @name XcmV0JunctionBodyId (53) */
+ /** @name XcmV0JunctionBodyId (55) */
interface XcmV0JunctionBodyId extends Enum {
readonly isUnit: boolean;
readonly isNamed: boolean;
@@ -476,7 +528,7 @@
readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial';
}
- /** @name XcmV0JunctionBodyPart (54) */
+ /** @name XcmV0JunctionBodyPart (56) */
interface XcmV0JunctionBodyPart extends Enum {
readonly isVoice: boolean;
readonly isMembers: boolean;
@@ -501,7 +553,7 @@
readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion';
}
- /** @name XcmV1MultiassetFungibility (55) */
+ /** @name XcmV1MultiassetFungibility (57) */
interface XcmV1MultiassetFungibility extends Enum {
readonly isFungible: boolean;
readonly asFungible: Compact<u128>;
@@ -510,7 +562,7 @@
readonly type: 'Fungible' | 'NonFungible';
}
- /** @name XcmV1MultiassetAssetInstance (56) */
+ /** @name XcmV1MultiassetAssetInstance (58) */
interface XcmV1MultiassetAssetInstance extends Enum {
readonly isUndefined: boolean;
readonly isIndex: boolean;
@@ -528,7 +580,7 @@
readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob';
}
- /** @name OrmlTokensModuleEvent (59) */
+ /** @name OrmlTokensModuleEvent (61) */
interface OrmlTokensModuleEvent extends Enum {
readonly isEndowed: boolean;
readonly asEndowed: {
@@ -616,7 +668,7 @@
readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'BalanceSet' | 'TotalIssuanceSet' | 'Withdrawn' | 'Slashed' | 'Deposited' | 'LockSet' | 'LockRemoved';
}
- /** @name PalletForeignAssetsAssetIds (60) */
+ /** @name PalletForeignAssetsAssetIds (62) */
interface PalletForeignAssetsAssetIds extends Enum {
readonly isForeignAssetId: boolean;
readonly asForeignAssetId: u32;
@@ -625,14 +677,14 @@
readonly type: 'ForeignAssetId' | 'NativeAssetId';
}
- /** @name PalletForeignAssetsNativeCurrency (61) */
+ /** @name PalletForeignAssetsNativeCurrency (63) */
interface PalletForeignAssetsNativeCurrency extends Enum {
readonly isHere: boolean;
readonly isParent: boolean;
readonly type: 'Here' | 'Parent';
}
- /** @name CumulusPalletXcmpQueueEvent (62) */
+ /** @name CumulusPalletXcmpQueueEvent (64) */
interface CumulusPalletXcmpQueueEvent extends Enum {
readonly isSuccess: boolean;
readonly asSuccess: {
@@ -676,7 +728,7 @@
readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced';
}
- /** @name XcmV2TraitsError (64) */
+ /** @name XcmV2TraitsError (66) */
interface XcmV2TraitsError extends Enum {
readonly isOverflow: boolean;
readonly isUnimplemented: boolean;
@@ -709,7 +761,7 @@
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';
}
- /** @name PalletXcmEvent (66) */
+ /** @name PalletXcmEvent (68) */
interface PalletXcmEvent extends Enum {
readonly isAttempted: boolean;
readonly asAttempted: XcmV2TraitsOutcome;
@@ -748,7 +800,7 @@
readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'AssetsClaimed';
}
- /** @name XcmV2TraitsOutcome (67) */
+ /** @name XcmV2TraitsOutcome (69) */
interface XcmV2TraitsOutcome extends Enum {
readonly isComplete: boolean;
readonly asComplete: u64;
@@ -759,10 +811,10 @@
readonly type: 'Complete' | 'Incomplete' | 'Error';
}
- /** @name XcmV2Xcm (68) */
+ /** @name XcmV2Xcm (70) */
interface XcmV2Xcm extends Vec<XcmV2Instruction> {}
- /** @name XcmV2Instruction (70) */
+ /** @name XcmV2Instruction (72) */
interface XcmV2Instruction extends Enum {
readonly isWithdrawAsset: boolean;
readonly asWithdrawAsset: XcmV1MultiassetMultiAssets;
@@ -882,7 +934,7 @@
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';
}
- /** @name XcmV2Response (71) */
+ /** @name XcmV2Response (73) */
interface XcmV2Response extends Enum {
readonly isNull: boolean;
readonly isAssets: boolean;
@@ -894,7 +946,7 @@
readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version';
}
- /** @name XcmV0OriginKind (74) */
+ /** @name XcmV0OriginKind (76) */
interface XcmV0OriginKind extends Enum {
readonly isNative: boolean;
readonly isSovereignAccount: boolean;
@@ -903,12 +955,12 @@
readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm';
}
- /** @name XcmDoubleEncoded (75) */
+ /** @name XcmDoubleEncoded (77) */
interface XcmDoubleEncoded extends Struct {
readonly encoded: Bytes;
}
- /** @name XcmV1MultiassetMultiAssetFilter (76) */
+ /** @name XcmV1MultiassetMultiAssetFilter (78) */
interface XcmV1MultiassetMultiAssetFilter extends Enum {
readonly isDefinite: boolean;
readonly asDefinite: XcmV1MultiassetMultiAssets;
@@ -917,7 +969,7 @@
readonly type: 'Definite' | 'Wild';
}
- /** @name XcmV1MultiassetWildMultiAsset (77) */
+ /** @name XcmV1MultiassetWildMultiAsset (79) */
interface XcmV1MultiassetWildMultiAsset extends Enum {
readonly isAll: boolean;
readonly isAllOf: boolean;
@@ -928,14 +980,14 @@
readonly type: 'All' | 'AllOf';
}
- /** @name XcmV1MultiassetWildFungibility (78) */
+ /** @name XcmV1MultiassetWildFungibility (80) */
interface XcmV1MultiassetWildFungibility extends Enum {
readonly isFungible: boolean;
readonly isNonFungible: boolean;
readonly type: 'Fungible' | 'NonFungible';
}
- /** @name XcmV2WeightLimit (79) */
+ /** @name XcmV2WeightLimit (81) */
interface XcmV2WeightLimit extends Enum {
readonly isUnlimited: boolean;
readonly isLimited: boolean;
@@ -943,7 +995,7 @@
readonly type: 'Unlimited' | 'Limited';
}
- /** @name XcmVersionedMultiAssets (81) */
+ /** @name XcmVersionedMultiAssets (83) */
interface XcmVersionedMultiAssets extends Enum {
readonly isV0: boolean;
readonly asV0: Vec<XcmV0MultiAsset>;
@@ -952,7 +1004,7 @@
readonly type: 'V0' | 'V1';
}
- /** @name XcmV0MultiAsset (83) */
+ /** @name XcmV0MultiAsset (85) */
interface XcmV0MultiAsset extends Enum {
readonly isNone: boolean;
readonly isAll: boolean;
@@ -997,7 +1049,7 @@
readonly type: 'None' | 'All' | 'AllFungible' | 'AllNonFungible' | 'AllAbstractFungible' | 'AllAbstractNonFungible' | 'AllConcreteFungible' | 'AllConcreteNonFungible' | 'AbstractFungible' | 'AbstractNonFungible' | 'ConcreteFungible' | 'ConcreteNonFungible';
}
- /** @name XcmV0MultiLocation (84) */
+ /** @name XcmV0MultiLocation (86) */
interface XcmV0MultiLocation extends Enum {
readonly isNull: boolean;
readonly isX1: boolean;
@@ -1019,7 +1071,7 @@
readonly type: 'Null' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';
}
- /** @name XcmV0Junction (85) */
+ /** @name XcmV0Junction (87) */
interface XcmV0Junction extends Enum {
readonly isParent: boolean;
readonly isParachain: boolean;
@@ -1054,7 +1106,7 @@
readonly type: 'Parent' | 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';
}
- /** @name XcmVersionedMultiLocation (86) */
+ /** @name XcmVersionedMultiLocation (88) */
interface XcmVersionedMultiLocation extends Enum {
readonly isV0: boolean;
readonly asV0: XcmV0MultiLocation;
@@ -1063,7 +1115,7 @@
readonly type: 'V0' | 'V1';
}
- /** @name CumulusPalletXcmEvent (87) */
+ /** @name CumulusPalletXcmEvent (89) */
interface CumulusPalletXcmEvent extends Enum {
readonly isInvalidFormat: boolean;
readonly asInvalidFormat: U8aFixed;
@@ -1074,7 +1126,7 @@
readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward';
}
- /** @name CumulusPalletDmpQueueEvent (88) */
+ /** @name CumulusPalletDmpQueueEvent (90) */
interface CumulusPalletDmpQueueEvent extends Enum {
readonly isInvalidFormat: boolean;
readonly asInvalidFormat: {
@@ -1109,7 +1161,7 @@
readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced';
}
- /** @name PalletCommonEvent (89) */
+ /** @name PalletCommonEvent (91) */
interface PalletCommonEvent extends Enum {
readonly isCollectionCreated: boolean;
readonly asCollectionCreated: ITuple<[u32, u8, AccountId32]>;
@@ -1158,7 +1210,7 @@
readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'ApprovedForAll' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet' | 'AllowListAddressAdded' | 'AllowListAddressRemoved' | 'CollectionAdminAdded' | 'CollectionAdminRemoved' | 'CollectionLimitSet' | 'CollectionOwnerChanged' | 'CollectionPermissionSet' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionSponsorRemoved';
}
- /** @name PalletEvmAccountBasicCrossAccountIdRepr (92) */
+ /** @name PalletEvmAccountBasicCrossAccountIdRepr (94) */
interface PalletEvmAccountBasicCrossAccountIdRepr extends Enum {
readonly isSubstrate: boolean;
readonly asSubstrate: AccountId32;
@@ -1167,14 +1219,14 @@
readonly type: 'Substrate' | 'Ethereum';
}
- /** @name PalletStructureEvent (96) */
+ /** @name PalletStructureEvent (98) */
interface PalletStructureEvent extends Enum {
readonly isExecuted: boolean;
readonly asExecuted: Result<Null, SpRuntimeDispatchError>;
readonly type: 'Executed';
}
- /** @name PalletRmrkCoreEvent (97) */
+ /** @name PalletRmrkCoreEvent (99) */
interface PalletRmrkCoreEvent extends Enum {
readonly isCollectionCreated: boolean;
readonly asCollectionCreated: {
@@ -1264,7 +1316,7 @@
readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'IssuerChanged' | 'CollectionLocked' | 'NftMinted' | 'NftBurned' | 'NftSent' | 'NftAccepted' | 'NftRejected' | 'PropertySet' | 'ResourceAdded' | 'ResourceRemoval' | 'ResourceAccepted' | 'ResourceRemovalAccepted' | 'PrioritySet';
}
- /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (98) */
+ /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (100) */
interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum {
readonly isAccountId: boolean;
readonly asAccountId: AccountId32;
@@ -1273,7 +1325,7 @@
readonly type: 'AccountId' | 'CollectionAndNftTuple';
}
- /** @name PalletRmrkEquipEvent (102) */
+ /** @name PalletRmrkEquipEvent (104) */
interface PalletRmrkEquipEvent extends Enum {
readonly isBaseCreated: boolean;
readonly asBaseCreated: {
@@ -1288,7 +1340,7 @@
readonly type: 'BaseCreated' | 'EquippablesUpdated';
}
- /** @name PalletAppPromotionEvent (103) */
+ /** @name PalletAppPromotionEvent (105) */
interface PalletAppPromotionEvent extends Enum {
readonly isStakingRecalculation: boolean;
readonly asStakingRecalculation: ITuple<[AccountId32, u128, u128]>;
@@ -1301,7 +1353,7 @@
readonly type: 'StakingRecalculation' | 'Stake' | 'Unstake' | 'SetAdmin';
}
- /** @name PalletForeignAssetsModuleEvent (104) */
+ /** @name PalletForeignAssetsModuleEvent (106) */
interface PalletForeignAssetsModuleEvent extends Enum {
readonly isForeignAssetRegistered: boolean;
readonly asForeignAssetRegistered: {
@@ -1328,7 +1380,7 @@
readonly type: 'ForeignAssetRegistered' | 'ForeignAssetUpdated' | 'AssetRegistered' | 'AssetUpdated';
}
- /** @name PalletForeignAssetsModuleAssetMetadata (105) */
+ /** @name PalletForeignAssetsModuleAssetMetadata (107) */
interface PalletForeignAssetsModuleAssetMetadata extends Struct {
readonly name: Bytes;
readonly symbol: Bytes;
@@ -1336,7 +1388,7 @@
readonly minimalBalance: u128;
}
- /** @name PalletEvmEvent (106) */
+ /** @name PalletEvmEvent (108) */
interface PalletEvmEvent extends Enum {
readonly isLog: boolean;
readonly asLog: {
@@ -1361,14 +1413,14 @@
readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed';
}
- /** @name EthereumLog (107) */
+ /** @name EthereumLog (109) */
interface EthereumLog extends Struct {
readonly address: H160;
readonly topics: Vec<H256>;
readonly data: Bytes;
}
- /** @name PalletEthereumEvent (109) */
+ /** @name PalletEthereumEvent (111) */
interface PalletEthereumEvent extends Enum {
readonly isExecuted: boolean;
readonly asExecuted: {
@@ -1380,7 +1432,7 @@
readonly type: 'Executed';
}
- /** @name EvmCoreErrorExitReason (110) */
+ /** @name EvmCoreErrorExitReason (112) */
interface EvmCoreErrorExitReason extends Enum {
readonly isSucceed: boolean;
readonly asSucceed: EvmCoreErrorExitSucceed;
@@ -1393,7 +1445,7 @@
readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal';
}
- /** @name EvmCoreErrorExitSucceed (111) */
+ /** @name EvmCoreErrorExitSucceed (113) */
interface EvmCoreErrorExitSucceed extends Enum {
readonly isStopped: boolean;
readonly isReturned: boolean;
@@ -1401,7 +1453,7 @@
readonly type: 'Stopped' | 'Returned' | 'Suicided';
}
- /** @name EvmCoreErrorExitError (112) */
+ /** @name EvmCoreErrorExitError (114) */
interface EvmCoreErrorExitError extends Enum {
readonly isStackUnderflow: boolean;
readonly isStackOverflow: boolean;
@@ -1422,13 +1474,13 @@
readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'InvalidCode';
}
- /** @name EvmCoreErrorExitRevert (115) */
+ /** @name EvmCoreErrorExitRevert (117) */
interface EvmCoreErrorExitRevert extends Enum {
readonly isReverted: boolean;
readonly type: 'Reverted';
}
- /** @name EvmCoreErrorExitFatal (116) */
+ /** @name EvmCoreErrorExitFatal (118) */
interface EvmCoreErrorExitFatal extends Enum {
readonly isNotSupported: boolean;
readonly isUnhandledInterrupt: boolean;
@@ -1439,7 +1491,7 @@
readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other';
}
- /** @name PalletEvmContractHelpersEvent (117) */
+ /** @name PalletEvmContractHelpersEvent (119) */
interface PalletEvmContractHelpersEvent extends Enum {
readonly isContractSponsorSet: boolean;
readonly asContractSponsorSet: ITuple<[H160, AccountId32]>;
@@ -1450,20 +1502,20 @@
readonly type: 'ContractSponsorSet' | 'ContractSponsorshipConfirmed' | 'ContractSponsorRemoved';
}
- /** @name PalletEvmMigrationEvent (118) */
+ /** @name PalletEvmMigrationEvent (120) */
interface PalletEvmMigrationEvent extends Enum {
readonly isTestEvent: boolean;
readonly type: 'TestEvent';
}
- /** @name PalletMaintenanceEvent (119) */
+ /** @name PalletMaintenanceEvent (121) */
interface PalletMaintenanceEvent extends Enum {
readonly isMaintenanceEnabled: boolean;
readonly isMaintenanceDisabled: boolean;
readonly type: 'MaintenanceEnabled' | 'MaintenanceDisabled';
}
- /** @name PalletTestUtilsEvent (120) */
+ /** @name PalletTestUtilsEvent (122) */
interface PalletTestUtilsEvent extends Enum {
readonly isValueIsSet: boolean;
readonly isShouldRollback: boolean;
@@ -1471,7 +1523,7 @@
readonly type: 'ValueIsSet' | 'ShouldRollback' | 'BatchCompleted';
}
- /** @name FrameSystemPhase (121) */
+ /** @name FrameSystemPhase (123) */
interface FrameSystemPhase extends Enum {
readonly isApplyExtrinsic: boolean;
readonly asApplyExtrinsic: u32;
@@ -1480,13 +1532,13 @@
readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization';
}
- /** @name FrameSystemLastRuntimeUpgradeInfo (124) */
+ /** @name FrameSystemLastRuntimeUpgradeInfo (126) */
interface FrameSystemLastRuntimeUpgradeInfo extends Struct {
readonly specVersion: Compact<u32>;
readonly specName: Text;
}
- /** @name FrameSystemCall (125) */
+ /** @name FrameSystemCall (127) */
interface FrameSystemCall extends Enum {
readonly isFillBlock: boolean;
readonly asFillBlock: {
@@ -1528,21 +1580,21 @@
readonly type: 'FillBlock' | 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent';
}
- /** @name FrameSystemLimitsBlockWeights (130) */
+ /** @name FrameSystemLimitsBlockWeights (132) */
interface FrameSystemLimitsBlockWeights extends Struct {
readonly baseBlock: SpWeightsWeightV2Weight;
readonly maxBlock: SpWeightsWeightV2Weight;
readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass;
}
- /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (131) */
+ /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (133) */
interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct {
readonly normal: FrameSystemLimitsWeightsPerClass;
readonly operational: FrameSystemLimitsWeightsPerClass;
readonly mandatory: FrameSystemLimitsWeightsPerClass;
}
- /** @name FrameSystemLimitsWeightsPerClass (132) */
+ /** @name FrameSystemLimitsWeightsPerClass (134) */
interface FrameSystemLimitsWeightsPerClass extends Struct {
readonly baseExtrinsic: SpWeightsWeightV2Weight;
readonly maxExtrinsic: Option<SpWeightsWeightV2Weight>;
@@ -1550,25 +1602,25 @@
readonly reserved: Option<SpWeightsWeightV2Weight>;
}
- /** @name FrameSystemLimitsBlockLength (134) */
+ /** @name FrameSystemLimitsBlockLength (136) */
interface FrameSystemLimitsBlockLength extends Struct {
readonly max: FrameSupportDispatchPerDispatchClassU32;
}
- /** @name FrameSupportDispatchPerDispatchClassU32 (135) */
+ /** @name FrameSupportDispatchPerDispatchClassU32 (137) */
interface FrameSupportDispatchPerDispatchClassU32 extends Struct {
readonly normal: u32;
readonly operational: u32;
readonly mandatory: u32;
}
- /** @name SpWeightsRuntimeDbWeight (136) */
+ /** @name SpWeightsRuntimeDbWeight (138) */
interface SpWeightsRuntimeDbWeight extends Struct {
readonly read: u64;
readonly write: u64;
}
- /** @name SpVersionRuntimeVersion (137) */
+ /** @name SpVersionRuntimeVersion (139) */
interface SpVersionRuntimeVersion extends Struct {
readonly specName: Text;
readonly implName: Text;
@@ -1580,7 +1632,7 @@
readonly stateVersion: u8;
}
- /** @name FrameSystemError (142) */
+ /** @name FrameSystemError (144) */
interface FrameSystemError extends Enum {
readonly isInvalidSpecName: boolean;
readonly isSpecVersionNeedsToIncrease: boolean;
@@ -1591,7 +1643,7 @@
readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered';
}
- /** @name PolkadotPrimitivesV2PersistedValidationData (143) */
+ /** @name PolkadotPrimitivesV2PersistedValidationData (145) */
interface PolkadotPrimitivesV2PersistedValidationData extends Struct {
readonly parentHead: Bytes;
readonly relayParentNumber: u32;
@@ -1599,18 +1651,18 @@
readonly maxPovSize: u32;
}
- /** @name PolkadotPrimitivesV2UpgradeRestriction (146) */
+ /** @name PolkadotPrimitivesV2UpgradeRestriction (148) */
interface PolkadotPrimitivesV2UpgradeRestriction extends Enum {
readonly isPresent: boolean;
readonly type: 'Present';
}
- /** @name SpTrieStorageProof (147) */
+ /** @name SpTrieStorageProof (149) */
interface SpTrieStorageProof extends Struct {
readonly trieNodes: BTreeSet<Bytes>;
}
- /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (149) */
+ /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (151) */
interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct {
readonly dmqMqcHead: H256;
readonly relayDispatchQueueSize: ITuple<[u32, u32]>;
@@ -1618,7 +1670,7 @@
readonly egressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;
}
- /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (152) */
+ /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (154) */
interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct {
readonly maxCapacity: u32;
readonly maxTotalSize: u32;
@@ -1628,7 +1680,7 @@
readonly mqcHead: Option<H256>;
}
- /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (153) */
+ /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (155) */
interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct {
readonly maxCodeSize: u32;
readonly maxHeadDataSize: u32;
@@ -1641,13 +1693,13 @@
readonly validationUpgradeDelay: u32;
}
- /** @name PolkadotCorePrimitivesOutboundHrmpMessage (159) */
+ /** @name PolkadotCorePrimitivesOutboundHrmpMessage (161) */
interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct {
readonly recipient: u32;
readonly data: Bytes;
}
- /** @name CumulusPalletParachainSystemCall (160) */
+ /** @name CumulusPalletParachainSystemCall (162) */
interface CumulusPalletParachainSystemCall extends Enum {
readonly isSetValidationData: boolean;
readonly asSetValidationData: {
@@ -1668,7 +1720,7 @@
readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade';
}
- /** @name CumulusPrimitivesParachainInherentParachainInherentData (161) */
+ /** @name CumulusPrimitivesParachainInherentParachainInherentData (163) */
interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct {
readonly validationData: PolkadotPrimitivesV2PersistedValidationData;
readonly relayChainState: SpTrieStorageProof;
@@ -1676,19 +1728,19 @@
readonly horizontalMessages: BTreeMap<u32, Vec<PolkadotCorePrimitivesInboundHrmpMessage>>;
}
- /** @name PolkadotCorePrimitivesInboundDownwardMessage (163) */
+ /** @name PolkadotCorePrimitivesInboundDownwardMessage (165) */
interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct {
readonly sentAt: u32;
readonly msg: Bytes;
}
- /** @name PolkadotCorePrimitivesInboundHrmpMessage (166) */
+ /** @name PolkadotCorePrimitivesInboundHrmpMessage (168) */
interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct {
readonly sentAt: u32;
readonly data: Bytes;
}
- /** @name CumulusPalletParachainSystemError (169) */
+ /** @name CumulusPalletParachainSystemError (171) */
interface CumulusPalletParachainSystemError extends Enum {
readonly isOverlappingUpgrades: boolean;
readonly isProhibitedByPolkadot: boolean;
@@ -1701,14 +1753,142 @@
readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized';
}
- /** @name PalletBalancesBalanceLock (171) */
+ /** @name PalletAuthorshipUncleEntryItem (173) */
+ interface PalletAuthorshipUncleEntryItem extends Enum {
+ readonly isInclusionHeight: boolean;
+ readonly asInclusionHeight: u32;
+ readonly isUncle: boolean;
+ readonly asUncle: ITuple<[H256, Option<AccountId32>]>;
+ readonly type: 'InclusionHeight' | 'Uncle';
+ }
+
+ /** @name PalletAuthorshipCall (175) */
+ interface PalletAuthorshipCall extends Enum {
+ readonly isSetUncles: boolean;
+ readonly asSetUncles: {
+ readonly newUncles: Vec<SpRuntimeHeader>;
+ } & Struct;
+ readonly type: 'SetUncles';
+ }
+
+ /** @name SpRuntimeHeader (177) */
+ interface SpRuntimeHeader extends Struct {
+ readonly parentHash: H256;
+ readonly number: Compact<u32>;
+ readonly stateRoot: H256;
+ readonly extrinsicsRoot: H256;
+ readonly digest: SpRuntimeDigest;
+ }
+
+ /** @name SpRuntimeBlakeTwo256 (178) */
+ type SpRuntimeBlakeTwo256 = Null;
+
+ /** @name PalletAuthorshipError (179) */
+ interface PalletAuthorshipError extends Enum {
+ readonly isInvalidUncleParent: boolean;
+ readonly isUnclesAlreadySet: boolean;
+ readonly isTooManyUncles: boolean;
+ readonly isGenesisUncle: boolean;
+ readonly isTooHighUncle: boolean;
+ readonly isUncleAlreadyIncluded: boolean;
+ readonly isOldUncle: boolean;
+ readonly type: 'InvalidUncleParent' | 'UnclesAlreadySet' | 'TooManyUncles' | 'GenesisUncle' | 'TooHighUncle' | 'UncleAlreadyIncluded' | 'OldUncle';
+ }
+
+ /** @name PalletCollatorSelectionCall (182) */
+ interface PalletCollatorSelectionCall extends Enum {
+ readonly isAddInvulnerable: boolean;
+ readonly asAddInvulnerable: {
+ readonly new_: AccountId32;
+ } & Struct;
+ readonly isRemoveInvulnerable: boolean;
+ readonly asRemoveInvulnerable: {
+ readonly who: AccountId32;
+ } & Struct;
+ readonly isSetDesiredCollators: boolean;
+ readonly asSetDesiredCollators: {
+ readonly max: u32;
+ } & Struct;
+ readonly isSetLicenseBond: boolean;
+ readonly asSetLicenseBond: {
+ readonly bond: u128;
+ } & Struct;
+ readonly isSetKickThreshold: boolean;
+ readonly asSetKickThreshold: {
+ readonly kickThreshold: u32;
+ } & Struct;
+ readonly isGetLicense: boolean;
+ readonly isOnboard: boolean;
+ readonly isOffboard: boolean;
+ readonly isReleaseLicense: boolean;
+ readonly isForceRevokeLicense: boolean;
+ readonly asForceRevokeLicense: {
+ readonly who: AccountId32;
+ } & Struct;
+ readonly type: 'AddInvulnerable' | 'RemoveInvulnerable' | 'SetDesiredCollators' | 'SetLicenseBond' | 'SetKickThreshold' | 'GetLicense' | 'Onboard' | 'Offboard' | 'ReleaseLicense' | 'ForceRevokeLicense';
+ }
+
+ /** @name PalletCollatorSelectionError (183) */
+ interface PalletCollatorSelectionError extends Enum {
+ readonly isTooManyCandidates: boolean;
+ readonly isUnknown: boolean;
+ readonly isPermission: boolean;
+ readonly isAlreadyHoldingLicense: boolean;
+ readonly isNoLicense: boolean;
+ readonly isAlreadyCandidate: boolean;
+ readonly isNotCandidate: boolean;
+ readonly isTooManyInvulnerables: boolean;
+ readonly isTooFewInvulnerables: boolean;
+ readonly isAlreadyInvulnerable: boolean;
+ readonly isNotInvulnerable: boolean;
+ readonly isNoAssociatedValidatorId: boolean;
+ readonly isValidatorNotRegistered: boolean;
+ readonly type: 'TooManyCandidates' | 'Unknown' | 'Permission' | 'AlreadyHoldingLicense' | 'NoLicense' | 'AlreadyCandidate' | 'NotCandidate' | 'TooManyInvulnerables' | 'TooFewInvulnerables' | 'AlreadyInvulnerable' | 'NotInvulnerable' | 'NoAssociatedValidatorId' | 'ValidatorNotRegistered';
+ }
+
+ /** @name OpalRuntimeRuntimeCommonSessionKeys (186) */
+ interface OpalRuntimeRuntimeCommonSessionKeys extends Struct {
+ readonly aura: SpConsensusAuraSr25519AppSr25519Public;
+ }
+
+ /** @name SpConsensusAuraSr25519AppSr25519Public (187) */
+ interface SpConsensusAuraSr25519AppSr25519Public extends SpCoreSr25519Public {}
+
+ /** @name SpCoreSr25519Public (188) */
+ interface SpCoreSr25519Public extends U8aFixed {}
+
+ /** @name SpCoreCryptoKeyTypeId (191) */
+ interface SpCoreCryptoKeyTypeId extends U8aFixed {}
+
+ /** @name PalletSessionCall (192) */
+ interface PalletSessionCall extends Enum {
+ readonly isSetKeys: boolean;
+ readonly asSetKeys: {
+ readonly keys_: OpalRuntimeRuntimeCommonSessionKeys;
+ readonly proof: Bytes;
+ } & Struct;
+ readonly isPurgeKeys: boolean;
+ readonly type: 'SetKeys' | 'PurgeKeys';
+ }
+
+ /** @name PalletSessionError (193) */
+ interface PalletSessionError extends Enum {
+ readonly isInvalidProof: boolean;
+ readonly isNoAssociatedValidatorId: boolean;
+ readonly isDuplicatedKey: boolean;
+ readonly isNoKeys: boolean;
+ readonly isNoAccount: boolean;
+ readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount';
+ }
+
+ /** @name PalletBalancesBalanceLock (195) */
interface PalletBalancesBalanceLock extends Struct {
readonly id: U8aFixed;
readonly amount: u128;
readonly reasons: PalletBalancesReasons;
}
- /** @name PalletBalancesReasons (172) */
+ /** @name PalletBalancesReasons (196) */
interface PalletBalancesReasons extends Enum {
readonly isFee: boolean;
readonly isMisc: boolean;
@@ -1716,20 +1896,20 @@
readonly type: 'Fee' | 'Misc' | 'All';
}
- /** @name PalletBalancesReserveData (175) */
+ /** @name PalletBalancesReserveData (199) */
interface PalletBalancesReserveData extends Struct {
readonly id: U8aFixed;
readonly amount: u128;
}
- /** @name PalletBalancesReleases (177) */
+ /** @name PalletBalancesReleases (201) */
interface PalletBalancesReleases extends Enum {
readonly isV100: boolean;
readonly isV200: boolean;
readonly type: 'V100' | 'V200';
}
- /** @name PalletBalancesCall (178) */
+ /** @name PalletBalancesCall (202) */
interface PalletBalancesCall extends Enum {
readonly isTransfer: boolean;
readonly asTransfer: {
@@ -1766,7 +1946,7 @@
readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve';
}
- /** @name PalletBalancesError (181) */
+ /** @name PalletBalancesError (205) */
interface PalletBalancesError extends Enum {
readonly isVestingBalance: boolean;
readonly isLiquidityRestrictions: boolean;
@@ -1779,7 +1959,7 @@
readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves';
}
- /** @name PalletTimestampCall (183) */
+ /** @name PalletTimestampCall (207) */
interface PalletTimestampCall extends Enum {
readonly isSet: boolean;
readonly asSet: {
@@ -1788,14 +1968,14 @@
readonly type: 'Set';
}
- /** @name PalletTransactionPaymentReleases (185) */
+ /** @name PalletTransactionPaymentReleases (209) */
interface PalletTransactionPaymentReleases extends Enum {
readonly isV1Ancient: boolean;
readonly isV2: boolean;
readonly type: 'V1Ancient' | 'V2';
}
- /** @name PalletTreasuryProposal (186) */
+ /** @name PalletTreasuryProposal (210) */
interface PalletTreasuryProposal extends Struct {
readonly proposer: AccountId32;
readonly value: u128;
@@ -1803,7 +1983,7 @@
readonly bond: u128;
}
- /** @name PalletTreasuryCall (189) */
+ /** @name PalletTreasuryCall (212) */
interface PalletTreasuryCall extends Enum {
readonly isProposeSpend: boolean;
readonly asProposeSpend: {
@@ -1830,10 +2010,10 @@
readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'Spend' | 'RemoveApproval';
}
- /** @name FrameSupportPalletId (192) */
+ /** @name FrameSupportPalletId (215) */
interface FrameSupportPalletId extends U8aFixed {}
- /** @name PalletTreasuryError (193) */
+ /** @name PalletTreasuryError (216) */
interface PalletTreasuryError extends Enum {
readonly isInsufficientProposersBalance: boolean;
readonly isInvalidIndex: boolean;
@@ -1843,7 +2023,7 @@
readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'InsufficientPermission' | 'ProposalNotApproved';
}
- /** @name PalletSudoCall (194) */
+ /** @name PalletSudoCall (217) */
interface PalletSudoCall extends Enum {
readonly isSudo: boolean;
readonly asSudo: {
@@ -1866,7 +2046,7 @@
readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs';
}
- /** @name OrmlVestingModuleCall (196) */
+ /** @name OrmlVestingModuleCall (219) */
interface OrmlVestingModuleCall extends Enum {
readonly isClaim: boolean;
readonly isVestedTransfer: boolean;
@@ -1886,7 +2066,7 @@
readonly type: 'Claim' | 'VestedTransfer' | 'UpdateVestingSchedules' | 'ClaimFor';
}
- /** @name OrmlXtokensModuleCall (198) */
+ /** @name OrmlXtokensModuleCall (221) */
interface OrmlXtokensModuleCall extends Enum {
readonly isTransfer: boolean;
readonly asTransfer: {
@@ -1933,7 +2113,7 @@
readonly type: 'Transfer' | 'TransferMultiasset' | 'TransferWithFee' | 'TransferMultiassetWithFee' | 'TransferMulticurrencies' | 'TransferMultiassets';
}
- /** @name XcmVersionedMultiAsset (199) */
+ /** @name XcmVersionedMultiAsset (222) */
interface XcmVersionedMultiAsset extends Enum {
readonly isV0: boolean;
readonly asV0: XcmV0MultiAsset;
@@ -1942,7 +2122,7 @@
readonly type: 'V0' | 'V1';
}
- /** @name OrmlTokensModuleCall (202) */
+ /** @name OrmlTokensModuleCall (225) */
interface OrmlTokensModuleCall extends Enum {
readonly isTransfer: boolean;
readonly asTransfer: {
@@ -1979,7 +2159,7 @@
readonly type: 'Transfer' | 'TransferAll' | 'TransferKeepAlive' | 'ForceTransfer' | 'SetBalance';
}
- /** @name CumulusPalletXcmpQueueCall (203) */
+ /** @name CumulusPalletXcmpQueueCall (226) */
interface CumulusPalletXcmpQueueCall extends Enum {
readonly isServiceOverweight: boolean;
readonly asServiceOverweight: {
@@ -2015,7 +2195,7 @@
readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight';
}
- /** @name PalletXcmCall (204) */
+ /** @name PalletXcmCall (227) */
interface PalletXcmCall extends Enum {
readonly isSend: boolean;
readonly asSend: {
@@ -2077,7 +2257,7 @@
readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets';
}
- /** @name XcmVersionedXcm (205) */
+ /** @name XcmVersionedXcm (228) */
interface XcmVersionedXcm extends Enum {
readonly isV0: boolean;
readonly asV0: XcmV0Xcm;
@@ -2088,7 +2268,7 @@
readonly type: 'V0' | 'V1' | 'V2';
}
- /** @name XcmV0Xcm (206) */
+ /** @name XcmV0Xcm (229) */
interface XcmV0Xcm extends Enum {
readonly isWithdrawAsset: boolean;
readonly asWithdrawAsset: {
@@ -2151,7 +2331,7 @@
readonly type: 'WithdrawAsset' | 'ReserveAssetDeposit' | 'TeleportAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom';
}
- /** @name XcmV0Order (208) */
+ /** @name XcmV0Order (231) */
interface XcmV0Order extends Enum {
readonly isNull: boolean;
readonly isDepositAsset: boolean;
@@ -2199,14 +2379,14 @@
readonly type: 'Null' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';
}
- /** @name XcmV0Response (210) */
+ /** @name XcmV0Response (233) */
interface XcmV0Response extends Enum {
readonly isAssets: boolean;
readonly asAssets: Vec<XcmV0MultiAsset>;
readonly type: 'Assets';
}
- /** @name XcmV1Xcm (211) */
+ /** @name XcmV1Xcm (234) */
interface XcmV1Xcm extends Enum {
readonly isWithdrawAsset: boolean;
readonly asWithdrawAsset: {
@@ -2275,7 +2455,7 @@
readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom' | 'SubscribeVersion' | 'UnsubscribeVersion';
}
- /** @name XcmV1Order (213) */
+ /** @name XcmV1Order (236) */
interface XcmV1Order extends Enum {
readonly isNoop: boolean;
readonly isDepositAsset: boolean;
@@ -2325,7 +2505,7 @@
readonly type: 'Noop' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';
}
- /** @name XcmV1Response (215) */
+ /** @name XcmV1Response (238) */
interface XcmV1Response extends Enum {
readonly isAssets: boolean;
readonly asAssets: XcmV1MultiassetMultiAssets;
@@ -2334,10 +2514,10 @@
readonly type: 'Assets' | 'Version';
}
- /** @name CumulusPalletXcmCall (229) */
+ /** @name CumulusPalletXcmCall (252) */
type CumulusPalletXcmCall = Null;
- /** @name CumulusPalletDmpQueueCall (230) */
+ /** @name CumulusPalletDmpQueueCall (253) */
interface CumulusPalletDmpQueueCall extends Enum {
readonly isServiceOverweight: boolean;
readonly asServiceOverweight: {
@@ -2347,7 +2527,7 @@
readonly type: 'ServiceOverweight';
}
- /** @name PalletInflationCall (231) */
+ /** @name PalletInflationCall (254) */
interface PalletInflationCall extends Enum {
readonly isStartInflation: boolean;
readonly asStartInflation: {
@@ -2356,7 +2536,7 @@
readonly type: 'StartInflation';
}
- /** @name PalletUniqueCall (232) */
+ /** @name PalletUniqueCall (255) */
interface PalletUniqueCall extends Enum {
readonly isCreateCollection: boolean;
readonly asCreateCollection: {
@@ -2517,15 +2697,19 @@
readonly operator: PalletEvmAccountBasicCrossAccountIdRepr;
readonly approve: bool;
} & Struct;
- readonly isRepairItem: boolean;
- readonly asRepairItem: {
+ readonly isForceRepairCollection: boolean;
+ readonly asForceRepairCollection: {
+ readonly collectionId: u32;
+ } & Struct;
+ readonly isForceRepairItem: boolean;
+ readonly asForceRepairItem: {
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' | 'RepairItem';
+ 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';
}
- /** @name UpDataStructsCollectionMode (237) */
+ /** @name UpDataStructsCollectionMode (260) */
interface UpDataStructsCollectionMode extends Enum {
readonly isNft: boolean;
readonly isFungible: boolean;
@@ -2534,7 +2718,7 @@
readonly type: 'Nft' | 'Fungible' | 'ReFungible';
}
- /** @name UpDataStructsCreateCollectionData (238) */
+ /** @name UpDataStructsCreateCollectionData (261) */
interface UpDataStructsCreateCollectionData extends Struct {
readonly mode: UpDataStructsCollectionMode;
readonly access: Option<UpDataStructsAccessMode>;
@@ -2548,14 +2732,14 @@
readonly properties: Vec<UpDataStructsProperty>;
}
- /** @name UpDataStructsAccessMode (240) */
+ /** @name UpDataStructsAccessMode (263) */
interface UpDataStructsAccessMode extends Enum {
readonly isNormal: boolean;
readonly isAllowList: boolean;
readonly type: 'Normal' | 'AllowList';
}
- /** @name UpDataStructsCollectionLimits (242) */
+ /** @name UpDataStructsCollectionLimits (265) */
interface UpDataStructsCollectionLimits extends Struct {
readonly accountTokenOwnershipLimit: Option<u32>;
readonly sponsoredDataSize: Option<u32>;
@@ -2568,7 +2752,7 @@
readonly transfersEnabled: Option<bool>;
}
- /** @name UpDataStructsSponsoringRateLimit (244) */
+ /** @name UpDataStructsSponsoringRateLimit (267) */
interface UpDataStructsSponsoringRateLimit extends Enum {
readonly isSponsoringDisabled: boolean;
readonly isBlocks: boolean;
@@ -2576,43 +2760,43 @@
readonly type: 'SponsoringDisabled' | 'Blocks';
}
- /** @name UpDataStructsCollectionPermissions (247) */
+ /** @name UpDataStructsCollectionPermissions (270) */
interface UpDataStructsCollectionPermissions extends Struct {
readonly access: Option<UpDataStructsAccessMode>;
readonly mintMode: Option<bool>;
readonly nesting: Option<UpDataStructsNestingPermissions>;
}
- /** @name UpDataStructsNestingPermissions (249) */
+ /** @name UpDataStructsNestingPermissions (272) */
interface UpDataStructsNestingPermissions extends Struct {
readonly tokenOwner: bool;
readonly collectionAdmin: bool;
readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;
}
- /** @name UpDataStructsOwnerRestrictedSet (251) */
+ /** @name UpDataStructsOwnerRestrictedSet (274) */
interface UpDataStructsOwnerRestrictedSet extends BTreeSet<u32> {}
- /** @name UpDataStructsPropertyKeyPermission (256) */
+ /** @name UpDataStructsPropertyKeyPermission (279) */
interface UpDataStructsPropertyKeyPermission extends Struct {
readonly key: Bytes;
readonly permission: UpDataStructsPropertyPermission;
}
- /** @name UpDataStructsPropertyPermission (257) */
+ /** @name UpDataStructsPropertyPermission (280) */
interface UpDataStructsPropertyPermission extends Struct {
readonly mutable: bool;
readonly collectionAdmin: bool;
readonly tokenOwner: bool;
}
- /** @name UpDataStructsProperty (260) */
+ /** @name UpDataStructsProperty (283) */
interface UpDataStructsProperty extends Struct {
readonly key: Bytes;
readonly value: Bytes;
}
- /** @name UpDataStructsCreateItemData (263) */
+ /** @name UpDataStructsCreateItemData (286) */
interface UpDataStructsCreateItemData extends Enum {
readonly isNft: boolean;
readonly asNft: UpDataStructsCreateNftData;
@@ -2623,23 +2807,23 @@
readonly type: 'Nft' | 'Fungible' | 'ReFungible';
}
- /** @name UpDataStructsCreateNftData (264) */
+ /** @name UpDataStructsCreateNftData (287) */
interface UpDataStructsCreateNftData extends Struct {
readonly properties: Vec<UpDataStructsProperty>;
}
- /** @name UpDataStructsCreateFungibleData (265) */
+ /** @name UpDataStructsCreateFungibleData (288) */
interface UpDataStructsCreateFungibleData extends Struct {
readonly value: u128;
}
- /** @name UpDataStructsCreateReFungibleData (266) */
+ /** @name UpDataStructsCreateReFungibleData (289) */
interface UpDataStructsCreateReFungibleData extends Struct {
readonly pieces: u128;
readonly properties: Vec<UpDataStructsProperty>;
}
- /** @name UpDataStructsCreateItemExData (269) */
+ /** @name UpDataStructsCreateItemExData (292) */
interface UpDataStructsCreateItemExData extends Enum {
readonly isNft: boolean;
readonly asNft: Vec<UpDataStructsCreateNftExData>;
@@ -2652,26 +2836,26 @@
readonly type: 'Nft' | 'Fungible' | 'RefungibleMultipleItems' | 'RefungibleMultipleOwners';
}
- /** @name UpDataStructsCreateNftExData (271) */
+ /** @name UpDataStructsCreateNftExData (294) */
interface UpDataStructsCreateNftExData extends Struct {
readonly properties: Vec<UpDataStructsProperty>;
readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;
}
- /** @name UpDataStructsCreateRefungibleExSingleOwner (278) */
+ /** @name UpDataStructsCreateRefungibleExSingleOwner (301) */
interface UpDataStructsCreateRefungibleExSingleOwner extends Struct {
readonly user: PalletEvmAccountBasicCrossAccountIdRepr;
readonly pieces: u128;
readonly properties: Vec<UpDataStructsProperty>;
}
- /** @name UpDataStructsCreateRefungibleExMultipleOwners (280) */
+ /** @name UpDataStructsCreateRefungibleExMultipleOwners (303) */
interface UpDataStructsCreateRefungibleExMultipleOwners extends Struct {
readonly users: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;
readonly properties: Vec<UpDataStructsProperty>;
}
- /** @name PalletConfigurationCall (281) */
+ /** @name PalletConfigurationCall (304) */
interface PalletConfigurationCall extends Enum {
readonly isSetWeightToFeeCoefficientOverride: boolean;
readonly asSetWeightToFeeCoefficientOverride: {
@@ -2692,7 +2876,7 @@
readonly type: 'SetWeightToFeeCoefficientOverride' | 'SetMinGasPriceOverride' | 'SetXcmAllowedLocations' | 'SetAppPromotionConfigurationOverride';
}
- /** @name PalletConfigurationAppPromotionConfiguration (286) */
+ /** @name PalletConfigurationAppPromotionConfiguration (309) */
interface PalletConfigurationAppPromotionConfiguration extends Struct {
readonly recalculationInterval: Option<u32>;
readonly pendingInterval: Option<u32>;
@@ -2700,13 +2884,13 @@
readonly maxStakersPerCalculation: Option<u8>;
}
- /** @name PalletTemplateTransactionPaymentCall (289) */
+ /** @name PalletTemplateTransactionPaymentCall (312) */
type PalletTemplateTransactionPaymentCall = Null;
- /** @name PalletStructureCall (290) */
+ /** @name PalletStructureCall (313) */
type PalletStructureCall = Null;
- /** @name PalletRmrkCoreCall (291) */
+ /** @name PalletRmrkCoreCall (314) */
interface PalletRmrkCoreCall extends Enum {
readonly isCreateCollection: boolean;
readonly asCreateCollection: {
@@ -2812,7 +2996,7 @@
readonly type: 'CreateCollection' | 'DestroyCollection' | 'ChangeCollectionIssuer' | 'LockCollection' | 'MintNft' | 'BurnNft' | 'Send' | 'AcceptNft' | 'RejectNft' | 'AcceptResource' | 'AcceptResourceRemoval' | 'SetProperty' | 'SetPriority' | 'AddBasicResource' | 'AddComposableResource' | 'AddSlotResource' | 'RemoveResource';
}
- /** @name RmrkTraitsResourceResourceTypes (297) */
+ /** @name RmrkTraitsResourceResourceTypes (320) */
interface RmrkTraitsResourceResourceTypes extends Enum {
readonly isBasic: boolean;
readonly asBasic: RmrkTraitsResourceBasicResource;
@@ -2823,7 +3007,7 @@
readonly type: 'Basic' | 'Composable' | 'Slot';
}
- /** @name RmrkTraitsResourceBasicResource (299) */
+ /** @name RmrkTraitsResourceBasicResource (322) */
interface RmrkTraitsResourceBasicResource extends Struct {
readonly src: Option<Bytes>;
readonly metadata: Option<Bytes>;
@@ -2831,7 +3015,7 @@
readonly thumb: Option<Bytes>;
}
- /** @name RmrkTraitsResourceComposableResource (301) */
+ /** @name RmrkTraitsResourceComposableResource (324) */
interface RmrkTraitsResourceComposableResource extends Struct {
readonly parts: Vec<u32>;
readonly base: u32;
@@ -2841,7 +3025,7 @@
readonly thumb: Option<Bytes>;
}
- /** @name RmrkTraitsResourceSlotResource (302) */
+ /** @name RmrkTraitsResourceSlotResource (325) */
interface RmrkTraitsResourceSlotResource extends Struct {
readonly base: u32;
readonly src: Option<Bytes>;
@@ -2851,7 +3035,7 @@
readonly thumb: Option<Bytes>;
}
- /** @name PalletRmrkEquipCall (305) */
+ /** @name PalletRmrkEquipCall (328) */
interface PalletRmrkEquipCall extends Enum {
readonly isCreateBase: boolean;
readonly asCreateBase: {
@@ -2873,7 +3057,7 @@
readonly type: 'CreateBase' | 'ThemeAdd' | 'Equippable';
}
- /** @name RmrkTraitsPartPartType (308) */
+ /** @name RmrkTraitsPartPartType (331) */
interface RmrkTraitsPartPartType extends Enum {
readonly isFixedPart: boolean;
readonly asFixedPart: RmrkTraitsPartFixedPart;
@@ -2882,14 +3066,14 @@
readonly type: 'FixedPart' | 'SlotPart';
}
- /** @name RmrkTraitsPartFixedPart (310) */
+ /** @name RmrkTraitsPartFixedPart (333) */
interface RmrkTraitsPartFixedPart extends Struct {
readonly id: u32;
readonly z: u32;
readonly src: Bytes;
}
- /** @name RmrkTraitsPartSlotPart (311) */
+ /** @name RmrkTraitsPartSlotPart (334) */
interface RmrkTraitsPartSlotPart extends Struct {
readonly id: u32;
readonly equippable: RmrkTraitsPartEquippableList;
@@ -2897,7 +3081,7 @@
readonly z: u32;
}
- /** @name RmrkTraitsPartEquippableList (312) */
+ /** @name RmrkTraitsPartEquippableList (335) */
interface RmrkTraitsPartEquippableList extends Enum {
readonly isAll: boolean;
readonly isEmpty: boolean;
@@ -2906,20 +3090,20 @@
readonly type: 'All' | 'Empty' | 'Custom';
}
- /** @name RmrkTraitsTheme (314) */
+ /** @name RmrkTraitsTheme (337) */
interface RmrkTraitsTheme extends Struct {
readonly name: Bytes;
readonly properties: Vec<RmrkTraitsThemeThemeProperty>;
readonly inherit: bool;
}
- /** @name RmrkTraitsThemeThemeProperty (316) */
+ /** @name RmrkTraitsThemeThemeProperty (339) */
interface RmrkTraitsThemeThemeProperty extends Struct {
readonly key: Bytes;
readonly value: Bytes;
}
- /** @name PalletAppPromotionCall (318) */
+ /** @name PalletAppPromotionCall (341) */
interface PalletAppPromotionCall extends Enum {
readonly isSetAdminAddress: boolean;
readonly asSetAdminAddress: {
@@ -2953,7 +3137,7 @@
readonly type: 'SetAdminAddress' | 'Stake' | 'Unstake' | 'SponsorCollection' | 'StopSponsoringCollection' | 'SponsorContract' | 'StopSponsoringContract' | 'PayoutStakers';
}
- /** @name PalletForeignAssetsModuleCall (319) */
+ /** @name PalletForeignAssetsModuleCall (342) */
interface PalletForeignAssetsModuleCall extends Enum {
readonly isRegisterForeignAsset: boolean;
readonly asRegisterForeignAsset: {
@@ -2970,7 +3154,7 @@
readonly type: 'RegisterForeignAsset' | 'UpdateForeignAsset';
}
- /** @name PalletEvmCall (320) */
+ /** @name PalletEvmCall (343) */
interface PalletEvmCall extends Enum {
readonly isWithdraw: boolean;
readonly asWithdraw: {
@@ -3015,7 +3199,7 @@
readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2';
}
- /** @name PalletEthereumCall (326) */
+ /** @name PalletEthereumCall (349) */
interface PalletEthereumCall extends Enum {
readonly isTransact: boolean;
readonly asTransact: {
@@ -3024,7 +3208,7 @@
readonly type: 'Transact';
}
- /** @name EthereumTransactionTransactionV2 (327) */
+ /** @name EthereumTransactionTransactionV2 (350) */
interface EthereumTransactionTransactionV2 extends Enum {
readonly isLegacy: boolean;
readonly asLegacy: EthereumTransactionLegacyTransaction;
@@ -3035,7 +3219,7 @@
readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';
}
- /** @name EthereumTransactionLegacyTransaction (328) */
+ /** @name EthereumTransactionLegacyTransaction (351) */
interface EthereumTransactionLegacyTransaction extends Struct {
readonly nonce: U256;
readonly gasPrice: U256;
@@ -3046,7 +3230,7 @@
readonly signature: EthereumTransactionTransactionSignature;
}
- /** @name EthereumTransactionTransactionAction (329) */
+ /** @name EthereumTransactionTransactionAction (352) */
interface EthereumTransactionTransactionAction extends Enum {
readonly isCall: boolean;
readonly asCall: H160;
@@ -3054,14 +3238,14 @@
readonly type: 'Call' | 'Create';
}
- /** @name EthereumTransactionTransactionSignature (330) */
+ /** @name EthereumTransactionTransactionSignature (353) */
interface EthereumTransactionTransactionSignature extends Struct {
readonly v: u64;
readonly r: H256;
readonly s: H256;
}
- /** @name EthereumTransactionEip2930Transaction (332) */
+ /** @name EthereumTransactionEip2930Transaction (355) */
interface EthereumTransactionEip2930Transaction extends Struct {
readonly chainId: u64;
readonly nonce: U256;
@@ -3076,13 +3260,13 @@
readonly s: H256;
}
- /** @name EthereumTransactionAccessListItem (334) */
+ /** @name EthereumTransactionAccessListItem (357) */
interface EthereumTransactionAccessListItem extends Struct {
readonly address: H160;
readonly storageKeys: Vec<H256>;
}
- /** @name EthereumTransactionEip1559Transaction (335) */
+ /** @name EthereumTransactionEip1559Transaction (358) */
interface EthereumTransactionEip1559Transaction extends Struct {
readonly chainId: u64;
readonly nonce: U256;
@@ -3098,7 +3282,7 @@
readonly s: H256;
}
- /** @name PalletEvmMigrationCall (336) */
+ /** @name PalletEvmMigrationCall (359) */
interface PalletEvmMigrationCall extends Enum {
readonly isBegin: boolean;
readonly asBegin: {
@@ -3125,14 +3309,14 @@
readonly type: 'Begin' | 'SetData' | 'Finish' | 'InsertEthLogs' | 'InsertEvents';
}
- /** @name PalletMaintenanceCall (340) */
+ /** @name PalletMaintenanceCall (363) */
interface PalletMaintenanceCall extends Enum {
readonly isEnable: boolean;
readonly isDisable: boolean;
readonly type: 'Enable' | 'Disable';
}
- /** @name PalletTestUtilsCall (341) */
+ /** @name PalletTestUtilsCall (364) */
interface PalletTestUtilsCall extends Enum {
readonly isEnable: boolean;
readonly isSetTestValue: boolean;
@@ -3152,13 +3336,13 @@
readonly type: 'Enable' | 'SetTestValue' | 'SetTestValueAndRollback' | 'IncTestValue' | 'JustTakeFee' | 'BatchAll';
}
- /** @name PalletSudoError (343) */
+ /** @name PalletSudoError (366) */
interface PalletSudoError extends Enum {
readonly isRequireSudo: boolean;
readonly type: 'RequireSudo';
}
- /** @name OrmlVestingModuleError (345) */
+ /** @name OrmlVestingModuleError (368) */
interface OrmlVestingModuleError extends Enum {
readonly isZeroVestingPeriod: boolean;
readonly isZeroVestingPeriodCount: boolean;
@@ -3169,7 +3353,7 @@
readonly type: 'ZeroVestingPeriod' | 'ZeroVestingPeriodCount' | 'InsufficientBalanceToLock' | 'TooManyVestingSchedules' | 'AmountLow' | 'MaxVestingSchedulesExceeded';
}
- /** @name OrmlXtokensModuleError (346) */
+ /** @name OrmlXtokensModuleError (369) */
interface OrmlXtokensModuleError extends Enum {
readonly isAssetHasNoReserve: boolean;
readonly isNotCrossChainTransfer: boolean;
@@ -3193,26 +3377,26 @@
readonly type: 'AssetHasNoReserve' | 'NotCrossChainTransfer' | 'InvalidDest' | 'NotCrossChainTransferableCurrency' | 'UnweighableMessage' | 'XcmExecutionFailed' | 'CannotReanchor' | 'InvalidAncestry' | 'InvalidAsset' | 'DestinationNotInvertible' | 'BadVersion' | 'DistinctReserveForAssetAndFee' | 'ZeroFee' | 'ZeroAmount' | 'TooManyAssetsBeingSent' | 'AssetIndexNonExistent' | 'FeeNotEnough' | 'NotSupportedMultiLocation' | 'MinXcmFeeNotDefined';
}
- /** @name OrmlTokensBalanceLock (349) */
+ /** @name OrmlTokensBalanceLock (372) */
interface OrmlTokensBalanceLock extends Struct {
readonly id: U8aFixed;
readonly amount: u128;
}
- /** @name OrmlTokensAccountData (351) */
+ /** @name OrmlTokensAccountData (374) */
interface OrmlTokensAccountData extends Struct {
readonly free: u128;
readonly reserved: u128;
readonly frozen: u128;
}
- /** @name OrmlTokensReserveData (353) */
+ /** @name OrmlTokensReserveData (376) */
interface OrmlTokensReserveData extends Struct {
readonly id: Null;
readonly amount: u128;
}
- /** @name OrmlTokensModuleError (355) */
+ /** @name OrmlTokensModuleError (378) */
interface OrmlTokensModuleError extends Enum {
readonly isBalanceTooLow: boolean;
readonly isAmountIntoBalanceFailed: boolean;
@@ -3225,21 +3409,21 @@
readonly type: 'BalanceTooLow' | 'AmountIntoBalanceFailed' | 'LiquidityRestrictions' | 'MaxLocksExceeded' | 'KeepAlive' | 'ExistentialDeposit' | 'DeadAccount' | 'TooManyReserves';
}
- /** @name CumulusPalletXcmpQueueInboundChannelDetails (357) */
+ /** @name CumulusPalletXcmpQueueInboundChannelDetails (380) */
interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct {
readonly sender: u32;
readonly state: CumulusPalletXcmpQueueInboundState;
readonly messageMetadata: Vec<ITuple<[u32, PolkadotParachainPrimitivesXcmpMessageFormat]>>;
}
- /** @name CumulusPalletXcmpQueueInboundState (358) */
+ /** @name CumulusPalletXcmpQueueInboundState (381) */
interface CumulusPalletXcmpQueueInboundState extends Enum {
readonly isOk: boolean;
readonly isSuspended: boolean;
readonly type: 'Ok' | 'Suspended';
}
- /** @name PolkadotParachainPrimitivesXcmpMessageFormat (361) */
+ /** @name PolkadotParachainPrimitivesXcmpMessageFormat (384) */
interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum {
readonly isConcatenatedVersionedXcm: boolean;
readonly isConcatenatedEncodedBlob: boolean;
@@ -3247,7 +3431,7 @@
readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals';
}
- /** @name CumulusPalletXcmpQueueOutboundChannelDetails (364) */
+ /** @name CumulusPalletXcmpQueueOutboundChannelDetails (387) */
interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct {
readonly recipient: u32;
readonly state: CumulusPalletXcmpQueueOutboundState;
@@ -3256,14 +3440,14 @@
readonly lastIndex: u16;
}
- /** @name CumulusPalletXcmpQueueOutboundState (365) */
+ /** @name CumulusPalletXcmpQueueOutboundState (388) */
interface CumulusPalletXcmpQueueOutboundState extends Enum {
readonly isOk: boolean;
readonly isSuspended: boolean;
readonly type: 'Ok' | 'Suspended';
}
- /** @name CumulusPalletXcmpQueueQueueConfigData (367) */
+ /** @name CumulusPalletXcmpQueueQueueConfigData (390) */
interface CumulusPalletXcmpQueueQueueConfigData extends Struct {
readonly suspendThreshold: u32;
readonly dropThreshold: u32;
@@ -3273,7 +3457,7 @@
readonly xcmpMaxIndividualWeight: SpWeightsWeightV2Weight;
}
- /** @name CumulusPalletXcmpQueueError (369) */
+ /** @name CumulusPalletXcmpQueueError (392) */
interface CumulusPalletXcmpQueueError extends Enum {
readonly isFailedToSend: boolean;
readonly isBadXcmOrigin: boolean;
@@ -3283,7 +3467,7 @@
readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit';
}
- /** @name PalletXcmError (370) */
+ /** @name PalletXcmError (393) */
interface PalletXcmError extends Enum {
readonly isUnreachable: boolean;
readonly isSendFailure: boolean;
@@ -3301,29 +3485,29 @@
readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed';
}
- /** @name CumulusPalletXcmError (371) */
+ /** @name CumulusPalletXcmError (394) */
type CumulusPalletXcmError = Null;
- /** @name CumulusPalletDmpQueueConfigData (372) */
+ /** @name CumulusPalletDmpQueueConfigData (395) */
interface CumulusPalletDmpQueueConfigData extends Struct {
readonly maxIndividual: SpWeightsWeightV2Weight;
}
- /** @name CumulusPalletDmpQueuePageIndexData (373) */
+ /** @name CumulusPalletDmpQueuePageIndexData (396) */
interface CumulusPalletDmpQueuePageIndexData extends Struct {
readonly beginUsed: u32;
readonly endUsed: u32;
readonly overweightCount: u64;
}
- /** @name CumulusPalletDmpQueueError (376) */
+ /** @name CumulusPalletDmpQueueError (399) */
interface CumulusPalletDmpQueueError extends Enum {
readonly isUnknown: boolean;
readonly isOverLimit: boolean;
readonly type: 'Unknown' | 'OverLimit';
}
- /** @name PalletUniqueError (380) */
+ /** @name PalletUniqueError (403) */
interface PalletUniqueError extends Enum {
readonly isCollectionDecimalPointLimitExceeded: boolean;
readonly isEmptyArgument: boolean;
@@ -3331,13 +3515,13 @@
readonly type: 'CollectionDecimalPointLimitExceeded' | 'EmptyArgument' | 'RepartitionCalledOnNonRefungibleCollection';
}
- /** @name PalletConfigurationError (381) */
+ /** @name PalletConfigurationError (404) */
interface PalletConfigurationError extends Enum {
readonly isInconsistentConfiguration: boolean;
readonly type: 'InconsistentConfiguration';
}
- /** @name UpDataStructsCollection (382) */
+ /** @name UpDataStructsCollection (405) */
interface UpDataStructsCollection extends Struct {
readonly owner: AccountId32;
readonly mode: UpDataStructsCollectionMode;
@@ -3350,7 +3534,7 @@
readonly flags: U8aFixed;
}
- /** @name UpDataStructsSponsorshipStateAccountId32 (383) */
+ /** @name UpDataStructsSponsorshipStateAccountId32 (406) */
interface UpDataStructsSponsorshipStateAccountId32 extends Enum {
readonly isDisabled: boolean;
readonly isUnconfirmed: boolean;
@@ -3360,43 +3544,43 @@
readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed';
}
- /** @name UpDataStructsProperties (385) */
+ /** @name UpDataStructsProperties (408) */
interface UpDataStructsProperties extends Struct {
readonly map: UpDataStructsPropertiesMapBoundedVec;
readonly consumedSpace: u32;
readonly spaceLimit: u32;
}
- /** @name UpDataStructsPropertiesMapBoundedVec (386) */
+ /** @name UpDataStructsPropertiesMapBoundedVec (409) */
interface UpDataStructsPropertiesMapBoundedVec extends BTreeMap<Bytes, Bytes> {}
- /** @name UpDataStructsPropertiesMapPropertyPermission (391) */
+ /** @name UpDataStructsPropertiesMapPropertyPermission (414) */
interface UpDataStructsPropertiesMapPropertyPermission extends BTreeMap<Bytes, UpDataStructsPropertyPermission> {}
- /** @name UpDataStructsCollectionStats (398) */
+ /** @name UpDataStructsCollectionStats (421) */
interface UpDataStructsCollectionStats extends Struct {
readonly created: u32;
readonly destroyed: u32;
readonly alive: u32;
}
- /** @name UpDataStructsTokenChild (399) */
+ /** @name UpDataStructsTokenChild (422) */
interface UpDataStructsTokenChild extends Struct {
readonly token: u32;
readonly collection: u32;
}
- /** @name PhantomTypeUpDataStructs (400) */
+ /** @name PhantomTypeUpDataStructs (423) */
interface PhantomTypeUpDataStructs extends Vec<ITuple<[UpDataStructsTokenData, UpDataStructsRpcCollection, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftNftInfo, RmrkTraitsResourceResourceInfo, RmrkTraitsPropertyPropertyInfo, RmrkTraitsBaseBaseInfo, RmrkTraitsPartPartType, RmrkTraitsTheme, RmrkTraitsNftNftChild]>> {}
- /** @name UpDataStructsTokenData (402) */
+ /** @name UpDataStructsTokenData (425) */
interface UpDataStructsTokenData extends Struct {
readonly properties: Vec<UpDataStructsProperty>;
readonly owner: Option<PalletEvmAccountBasicCrossAccountIdRepr>;
readonly pieces: u128;
}
- /** @name UpDataStructsRpcCollection (404) */
+ /** @name UpDataStructsRpcCollection (427) */
interface UpDataStructsRpcCollection extends Struct {
readonly owner: AccountId32;
readonly mode: UpDataStructsCollectionMode;
@@ -3412,13 +3596,13 @@
readonly flags: UpDataStructsRpcCollectionFlags;
}
- /** @name UpDataStructsRpcCollectionFlags (405) */
+ /** @name UpDataStructsRpcCollectionFlags (428) */
interface UpDataStructsRpcCollectionFlags extends Struct {
readonly foreign: bool;
readonly erc721metadata: bool;
}
- /** @name RmrkTraitsCollectionCollectionInfo (406) */
+ /** @name RmrkTraitsCollectionCollectionInfo (429) */
interface RmrkTraitsCollectionCollectionInfo extends Struct {
readonly issuer: AccountId32;
readonly metadata: Bytes;
@@ -3427,7 +3611,7 @@
readonly nftsCount: u32;
}
- /** @name RmrkTraitsNftNftInfo (407) */
+ /** @name RmrkTraitsNftNftInfo (430) */
interface RmrkTraitsNftNftInfo extends Struct {
readonly owner: RmrkTraitsNftAccountIdOrCollectionNftTuple;
readonly royalty: Option<RmrkTraitsNftRoyaltyInfo>;
@@ -3436,13 +3620,13 @@
readonly pending: bool;
}
- /** @name RmrkTraitsNftRoyaltyInfo (409) */
+ /** @name RmrkTraitsNftRoyaltyInfo (432) */
interface RmrkTraitsNftRoyaltyInfo extends Struct {
readonly recipient: AccountId32;
readonly amount: Permill;
}
- /** @name RmrkTraitsResourceResourceInfo (410) */
+ /** @name RmrkTraitsResourceResourceInfo (433) */
interface RmrkTraitsResourceResourceInfo extends Struct {
readonly id: u32;
readonly resource: RmrkTraitsResourceResourceTypes;
@@ -3450,26 +3634,26 @@
readonly pendingRemoval: bool;
}
- /** @name RmrkTraitsPropertyPropertyInfo (411) */
+ /** @name RmrkTraitsPropertyPropertyInfo (434) */
interface RmrkTraitsPropertyPropertyInfo extends Struct {
readonly key: Bytes;
readonly value: Bytes;
}
- /** @name RmrkTraitsBaseBaseInfo (412) */
+ /** @name RmrkTraitsBaseBaseInfo (435) */
interface RmrkTraitsBaseBaseInfo extends Struct {
readonly issuer: AccountId32;
readonly baseType: Bytes;
readonly symbol: Bytes;
}
- /** @name RmrkTraitsNftNftChild (413) */
+ /** @name RmrkTraitsNftNftChild (436) */
interface RmrkTraitsNftNftChild extends Struct {
readonly collectionId: u32;
readonly nftId: u32;
}
- /** @name PalletCommonError (415) */
+ /** @name PalletCommonError (438) */
interface PalletCommonError extends Enum {
readonly isCollectionNotFound: boolean;
readonly isMustBeTokenOwner: boolean;
@@ -3510,7 +3694,7 @@
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';
}
- /** @name PalletFungibleError (417) */
+ /** @name PalletFungibleError (440) */
interface PalletFungibleError extends Enum {
readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean;
readonly isFungibleItemsHaveNoId: boolean;
@@ -3522,12 +3706,12 @@
readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed' | 'SettingAllowanceForAllNotAllowed' | 'FungibleTokensAreAlwaysValid';
}
- /** @name PalletRefungibleItemData (418) */
+ /** @name PalletRefungibleItemData (441) */
interface PalletRefungibleItemData extends Struct {
readonly constData: Bytes;
}
- /** @name PalletRefungibleError (423) */
+ /** @name PalletRefungibleError (446) */
interface PalletRefungibleError extends Enum {
readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;
readonly isWrongRefungiblePieces: boolean;
@@ -3537,19 +3721,19 @@
readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RepartitionWhileNotOwningAllPieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
}
- /** @name PalletNonfungibleItemData (424) */
+ /** @name PalletNonfungibleItemData (447) */
interface PalletNonfungibleItemData extends Struct {
readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;
}
- /** @name UpDataStructsPropertyScope (426) */
+ /** @name UpDataStructsPropertyScope (449) */
interface UpDataStructsPropertyScope extends Enum {
readonly isNone: boolean;
readonly isRmrk: boolean;
readonly type: 'None' | 'Rmrk';
}
- /** @name PalletNonfungibleError (428) */
+ /** @name PalletNonfungibleError (451) */
interface PalletNonfungibleError extends Enum {
readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean;
readonly isNonfungibleItemsHaveNoAmount: boolean;
@@ -3557,7 +3741,7 @@
readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount' | 'CantBurnNftWithChildren';
}
- /** @name PalletStructureError (429) */
+ /** @name PalletStructureError (452) */
interface PalletStructureError extends Enum {
readonly isOuroborosDetected: boolean;
readonly isDepthLimit: boolean;
@@ -3566,7 +3750,7 @@
readonly type: 'OuroborosDetected' | 'DepthLimit' | 'BreadthLimit' | 'TokenNotFound';
}
- /** @name PalletRmrkCoreError (430) */
+ /** @name PalletRmrkCoreError (453) */
interface PalletRmrkCoreError extends Enum {
readonly isCorruptedCollectionType: boolean;
readonly isRmrkPropertyKeyIsTooLong: boolean;
@@ -3590,7 +3774,7 @@
readonly type: 'CorruptedCollectionType' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'RmrkPropertyIsNotFound' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'CannotRejectNonPendingNft' | 'ResourceNotPending' | 'NoAvailableResourceId';
}
- /** @name PalletRmrkEquipError (432) */
+ /** @name PalletRmrkEquipError (455) */
interface PalletRmrkEquipError extends Enum {
readonly isPermissionError: boolean;
readonly isNoAvailableBaseId: boolean;
@@ -3602,7 +3786,7 @@
readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst' | 'PartDoesntExist' | 'NoEquippableOnFixedPart';
}
- /** @name PalletAppPromotionError (438) */
+ /** @name PalletAppPromotionError (461) */
interface PalletAppPromotionError extends Enum {
readonly isAdminNotSet: boolean;
readonly isNoPermission: boolean;
@@ -3613,7 +3797,7 @@
readonly type: 'AdminNotSet' | 'NoPermission' | 'NotSufficientFunds' | 'PendingForBlockOverflow' | 'SponsorNotSet' | 'IncorrectLockedBalanceOperation';
}
- /** @name PalletForeignAssetsModuleError (439) */
+ /** @name PalletForeignAssetsModuleError (462) */
interface PalletForeignAssetsModuleError extends Enum {
readonly isBadLocation: boolean;
readonly isMultiLocationExisted: boolean;
@@ -3622,7 +3806,7 @@
readonly type: 'BadLocation' | 'MultiLocationExisted' | 'AssetIdNotExists' | 'AssetIdExisted';
}
- /** @name PalletEvmError (441) */
+ /** @name PalletEvmError (464) */
interface PalletEvmError extends Enum {
readonly isBalanceLow: boolean;
readonly isFeeOverflow: boolean;
@@ -3637,7 +3821,7 @@
readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce' | 'GasLimitTooLow' | 'GasLimitTooHigh' | 'Undefined' | 'Reentrancy';
}
- /** @name FpRpcTransactionStatus (444) */
+ /** @name FpRpcTransactionStatus (467) */
interface FpRpcTransactionStatus extends Struct {
readonly transactionHash: H256;
readonly transactionIndex: u32;
@@ -3648,10 +3832,10 @@
readonly logsBloom: EthbloomBloom;
}
- /** @name EthbloomBloom (446) */
+ /** @name EthbloomBloom (469) */
interface EthbloomBloom extends U8aFixed {}
- /** @name EthereumReceiptReceiptV3 (448) */
+ /** @name EthereumReceiptReceiptV3 (471) */
interface EthereumReceiptReceiptV3 extends Enum {
readonly isLegacy: boolean;
readonly asLegacy: EthereumReceiptEip658ReceiptData;
@@ -3662,7 +3846,7 @@
readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';
}
- /** @name EthereumReceiptEip658ReceiptData (449) */
+ /** @name EthereumReceiptEip658ReceiptData (472) */
interface EthereumReceiptEip658ReceiptData extends Struct {
readonly statusCode: u8;
readonly usedGas: U256;
@@ -3670,14 +3854,14 @@
readonly logs: Vec<EthereumLog>;
}
- /** @name EthereumBlock (450) */
+ /** @name EthereumBlock (473) */
interface EthereumBlock extends Struct {
readonly header: EthereumHeader;
readonly transactions: Vec<EthereumTransactionTransactionV2>;
readonly ommers: Vec<EthereumHeader>;
}
- /** @name EthereumHeader (451) */
+ /** @name EthereumHeader (474) */
interface EthereumHeader extends Struct {
readonly parentHash: H256;
readonly ommersHash: H256;
@@ -3696,24 +3880,24 @@
readonly nonce: EthereumTypesHashH64;
}
- /** @name EthereumTypesHashH64 (452) */
+ /** @name EthereumTypesHashH64 (475) */
interface EthereumTypesHashH64 extends U8aFixed {}
- /** @name PalletEthereumError (457) */
+ /** @name PalletEthereumError (480) */
interface PalletEthereumError extends Enum {
readonly isInvalidSignature: boolean;
readonly isPreLogExists: boolean;
readonly type: 'InvalidSignature' | 'PreLogExists';
}
- /** @name PalletEvmCoderSubstrateError (458) */
+ /** @name PalletEvmCoderSubstrateError (481) */
interface PalletEvmCoderSubstrateError extends Enum {
readonly isOutOfGas: boolean;
readonly isOutOfFund: boolean;
readonly type: 'OutOfGas' | 'OutOfFund';
}
- /** @name UpDataStructsSponsorshipStateBasicCrossAccountIdRepr (459) */
+ /** @name UpDataStructsSponsorshipStateBasicCrossAccountIdRepr (482) */
interface UpDataStructsSponsorshipStateBasicCrossAccountIdRepr extends Enum {
readonly isDisabled: boolean;
readonly isUnconfirmed: boolean;
@@ -3723,7 +3907,7 @@
readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed';
}
- /** @name PalletEvmContractHelpersSponsoringModeT (460) */
+ /** @name PalletEvmContractHelpersSponsoringModeT (483) */
interface PalletEvmContractHelpersSponsoringModeT extends Enum {
readonly isDisabled: boolean;
readonly isAllowlisted: boolean;
@@ -3731,7 +3915,7 @@
readonly type: 'Disabled' | 'Allowlisted' | 'Generous';
}
- /** @name PalletEvmContractHelpersError (466) */
+ /** @name PalletEvmContractHelpersError (489) */
interface PalletEvmContractHelpersError extends Enum {
readonly isNoPermission: boolean;
readonly isNoPendingSponsor: boolean;
@@ -3739,7 +3923,7 @@
readonly type: 'NoPermission' | 'NoPendingSponsor' | 'TooManyMethodsHaveSponsoredLimit';
}
- /** @name PalletEvmMigrationError (467) */
+ /** @name PalletEvmMigrationError (490) */
interface PalletEvmMigrationError extends Enum {
readonly isAccountNotEmpty: boolean;
readonly isAccountIsNotMigrating: boolean;
@@ -3747,17 +3931,17 @@
readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating' | 'BadEvent';
}
- /** @name PalletMaintenanceError (468) */
+ /** @name PalletMaintenanceError (491) */
type PalletMaintenanceError = Null;
- /** @name PalletTestUtilsError (469) */
+ /** @name PalletTestUtilsError (492) */
interface PalletTestUtilsError extends Enum {
readonly isTestPalletDisabled: boolean;
readonly isTriggerRollback: boolean;
readonly type: 'TestPalletDisabled' | 'TriggerRollback';
}
- /** @name SpRuntimeMultiSignature (471) */
+ /** @name SpRuntimeMultiSignature (494) */
interface SpRuntimeMultiSignature extends Enum {
readonly isEd25519: boolean;
readonly asEd25519: SpCoreEd25519Signature;
@@ -3768,40 +3952,40 @@
readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa';
}
- /** @name SpCoreEd25519Signature (472) */
+ /** @name SpCoreEd25519Signature (495) */
interface SpCoreEd25519Signature extends U8aFixed {}
- /** @name SpCoreSr25519Signature (474) */
+ /** @name SpCoreSr25519Signature (497) */
interface SpCoreSr25519Signature extends U8aFixed {}
- /** @name SpCoreEcdsaSignature (475) */
+ /** @name SpCoreEcdsaSignature (498) */
interface SpCoreEcdsaSignature extends U8aFixed {}
- /** @name FrameSystemExtensionsCheckSpecVersion (478) */
+ /** @name FrameSystemExtensionsCheckSpecVersion (501) */
type FrameSystemExtensionsCheckSpecVersion = Null;
- /** @name FrameSystemExtensionsCheckTxVersion (479) */
+ /** @name FrameSystemExtensionsCheckTxVersion (502) */
type FrameSystemExtensionsCheckTxVersion = Null;
- /** @name FrameSystemExtensionsCheckGenesis (480) */
+ /** @name FrameSystemExtensionsCheckGenesis (503) */
type FrameSystemExtensionsCheckGenesis = Null;
- /** @name FrameSystemExtensionsCheckNonce (483) */
+ /** @name FrameSystemExtensionsCheckNonce (506) */
interface FrameSystemExtensionsCheckNonce extends Compact<u32> {}
- /** @name FrameSystemExtensionsCheckWeight (484) */
+ /** @name FrameSystemExtensionsCheckWeight (507) */
type FrameSystemExtensionsCheckWeight = Null;
- /** @name OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance (485) */
+ /** @name OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance (508) */
type OpalRuntimeRuntimeCommonMaintenanceCheckMaintenance = Null;
- /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (486) */
+ /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (509) */
interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact<u128> {}
- /** @name OpalRuntimeRuntime (487) */
+ /** @name OpalRuntimeRuntime (510) */
type OpalRuntimeRuntime = Null;
- /** @name PalletEthereumFakeTransactionFinalizer (488) */
+ /** @name PalletEthereumFakeTransactionFinalizer (511) */
type PalletEthereumFakeTransactionFinalizer = Null;
} // declare module
tests/src/util/playgrounds/unique.dev.tsdiffbeforeafterboth--- a/tests/src/util/playgrounds/unique.dev.ts
+++ b/tests/src/util/playgrounds/unique.dev.ts
@@ -445,6 +445,30 @@
return promise;
}
+ /**
+ * Wait for the specified number of sessions to pass.
+ * Only applicable if the Session pallet is turned on.
+ * @param sessionCount number of sessions to wait
+ * @param blockTimeout time in ms until panicking that the chain has stopped producing blocks
+ * @returns
+ */
+ async newSessions(sessionCount = 1, blockTimeout = 60000): Promise<void> {
+ console.log(`Waiting for ${sessionCount} new session${sessionCount > 1 ? 's' : ''}.`
+ + ' This might take a while -- check SessionPeriod in pallet_session::Config for session time.');
+
+ const expectedSessionIndex = await this.helper.session.getIndex() + sessionCount;
+ let currentSessionIndex = -1;
+
+ while (currentSessionIndex < expectedSessionIndex) {
+ // eslint-disable-next-line no-async-promise-executor
+ currentSessionIndex = await this.withTimeout(new Promise(async (resolve) => {
+ await this.newBlocks(1);
+ const res = this.helper.session.getIndex();
+ resolve(res);
+ }), blockTimeout, 'The chain has stopped producing blocks!');
+ }
+ }
+
async forParachainBlockNumber(blockNumber: bigint | number, timeout?: number) {
timeout = timeout ?? 30 * 60 * 1000;
// eslint-disable-next-line no-async-promise-executor
tests/src/util/playgrounds/unique.tsdiffbeforeafterboth1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// SPDX-License-Identifier: Apache-2.034/* eslint-disable @typescript-eslint/no-var-requires */5/* eslint-disable function-call-argument-newline */6/* eslint-disable no-prototype-builtins */78import {ApiPromise, WsProvider, Keyring} from '@polkadot/api';9import {ApiInterfaceEvents, SignerOptions} from '@polkadot/api/types';10import {encodeAddress, decodeAddress, keccakAsHex, evmToAddress, addressToEvm, base58Encode, blake2AsU8a} from '@polkadot/util-crypto';11import {IKeyringPair} from '@polkadot/types/types';12import {hexToU8a} from '@polkadot/util/hex';13import {u8aConcat} from '@polkadot/util/u8a';14import {15 IApiListeners,16 IBlock,17 IEvent,18 IChainProperties,19 ICollectionCreationOptions,20 ICollectionLimits,21 ICollectionPermissions,22 ICrossAccountId,23 ICrossAccountIdLower,24 ILogger,25 INestingPermissions,26 IProperty,27 IStakingInfo,28 ISchedulerOptions,29 ISubstrateBalance,30 IToken,31 ITokenPropertyPermission,32 ITransactionResult,33 IUniqueHelperLog,34 TApiAllowedListeners,35 TEthereumAccount,36 TSigner,37 TSubstrateAccount,38 TNetworks,39 IForeignAssetMetadata,40 AcalaAssetMetadata,41 MoonbeamAssetInfo,42 DemocracyStandardAccountVote,43 IEthCrossAccountId,44} from './types';45import {RuntimeDispatchInfo} from '@polkadot/types/interfaces';46import type {Vec} from '@polkadot/types-codec';47import {FrameSystemEventRecord} from '@polkadot/types/lookup';48import {DevUniqueHelper} from './unique.dev';4950export class CrossAccountId implements ICrossAccountId {51 Substrate?: TSubstrateAccount;52 Ethereum?: TEthereumAccount;5354 constructor(account: ICrossAccountId) {55 if (account.Substrate) this.Substrate = account.Substrate;56 if (account.Ethereum) this.Ethereum = account.Ethereum;57 }5859 static fromKeyring(account: IKeyringPair, domain: 'Substrate' | 'Ethereum' = 'Substrate') {60 switch (domain) {61 case 'Substrate': return new CrossAccountId({Substrate: account.address});62 case 'Ethereum': return new CrossAccountId({Substrate: account.address}).toEthereum();63 }64 }6566 static fromLowerCaseKeys(address: ICrossAccountIdLower): CrossAccountId {67 return new CrossAccountId({Substrate: address.substrate, Ethereum: address.ethereum});68 }6970 static normalizeSubstrateAddress(address: TSubstrateAccount, ss58Format = 42): TSubstrateAccount {71 return encodeAddress(decodeAddress(address), ss58Format);72 }7374 static withNormalizedSubstrate(address: TSubstrateAccount, ss58Format = 42): CrossAccountId {75 return new CrossAccountId({Substrate: CrossAccountId.normalizeSubstrateAddress(address, ss58Format)});76 }7778 withNormalizedSubstrate(ss58Format = 42): CrossAccountId {79 if (this.Substrate) return CrossAccountId.withNormalizedSubstrate(this.Substrate, ss58Format);80 return this;81 }8283 static translateSubToEth(address: TSubstrateAccount): TEthereumAccount {84 return nesting.toChecksumAddress('0x' + Array.from(addressToEvm(address), i => i.toString(16).padStart(2, '0')).join(''));85 }8687 toEthereum(): CrossAccountId {88 if (this.Substrate) return new CrossAccountId({Ethereum: CrossAccountId.translateSubToEth(this.Substrate)});89 return this;90 }9192 static translateEthToSub(address: TEthereumAccount, ss58Format?: number): TSubstrateAccount {93 return evmToAddress(address, ss58Format);94 }9596 toSubstrate(ss58Format?: number): CrossAccountId {97 if (this.Ethereum) return new CrossAccountId({Substrate: CrossAccountId.translateEthToSub(this.Ethereum, ss58Format)});98 return this;99 }100101 toLowerCase(): CrossAccountId {102 if (this.Substrate) this.Substrate = this.Substrate.toLowerCase();103 if (this.Ethereum) this.Ethereum = this.Ethereum.toLowerCase();104 return this;105 }106}107108const nesting = {109 toChecksumAddress(address: string): string {110 if (typeof address === 'undefined') return '';111112 if(!/^(0x)?[0-9a-f]{40}$/i.test(address)) throw new Error(`Given address "${address}" is not a valid Ethereum address.`);113114 address = address.toLowerCase().replace(/^0x/i,'');115 const addressHash = keccakAsHex(address).replace(/^0x/i,'');116 const checksumAddress = ['0x'];117118 for (let i = 0; i < address.length; i++) {119 // If ith character is 8 to f then make it uppercase120 if (parseInt(addressHash[i], 16) > 7) {121 checksumAddress.push(address[i].toUpperCase());122 } else {123 checksumAddress.push(address[i]);124 }125 }126 return checksumAddress.join('');127 },128 tokenIdToAddress(collectionId: number, tokenId: number) {129 return this.toChecksumAddress(`0xf8238ccfff8ed887463fd5e0${collectionId.toString(16).padStart(8,'0')}${tokenId.toString(16).padStart(8,'0')}`);130 },131};132133class UniqueUtil {134 static transactionStatus = {135 NOT_READY: 'NotReady',136 FAIL: 'Fail',137 SUCCESS: 'Success',138 };139140 static chainLogType = {141 EXTRINSIC: 'extrinsic',142 RPC: 'rpc',143 };144145 static getTokenAccount(token: IToken): CrossAccountId {146 return new CrossAccountId({Ethereum: this.getTokenAddress(token)});147 }148149 static getTokenAddress(token: IToken): string {150 return nesting.tokenIdToAddress(token.collectionId, token.tokenId);151 }152153 static getDefaultLogger(): ILogger {154 return {155 log(msg: any, level = 'INFO') {156 console[level.toLocaleLowerCase() === 'error' ? 'error' : 'log'](...(Array.isArray(msg) ? msg : [msg]));157 },158 level: {159 ERROR: 'ERROR',160 WARNING: 'WARNING',161 INFO: 'INFO',162 },163 };164 }165166 static vec2str(arr: string[] | number[]) {167 return arr.map(x => String.fromCharCode(parseInt(x.toString()))).join('');168 }169170 static str2vec(string: string) {171 if (typeof string !== 'string') return string;172 return Array.from(string).map(x => x.charCodeAt(0));173 }174175 static fromSeed(seed: string, ss58Format = 42) {176 const keyring = new Keyring({type: 'sr25519', ss58Format});177 return keyring.addFromUri(seed);178 }179180 static extractCollectionIdFromCreationResult(creationResult: ITransactionResult): number {181 if (creationResult.status !== this.transactionStatus.SUCCESS) {182 throw Error('Unable to create collection!');183 }184185 let collectionId = null;186 creationResult.result.events.forEach(({event: {data, method, section}}) => {187 if ((section === 'common') && (method === 'CollectionCreated')) {188 collectionId = parseInt(data[0].toString(), 10);189 }190 });191192 if (collectionId === null) {193 throw Error('No CollectionCreated event was found!');194 }195196 return collectionId;197 }198199 static extractTokensFromCreationResult(creationResult: ITransactionResult): {200 success: boolean,201 tokens: {collectionId: number, tokenId: number, owner: CrossAccountId, amount: bigint}[],202 } {203 if (creationResult.status !== this.transactionStatus.SUCCESS) {204 throw Error('Unable to create tokens!');205 }206 let success = false;207 const tokens = [] as {collectionId: number, tokenId: number, owner: CrossAccountId, amount: bigint}[];208 creationResult.result.events.forEach(({event: {data, method, section}}) => {209 if (method === 'ExtrinsicSuccess') {210 success = true;211 } else if ((section === 'common') && (method === 'ItemCreated')) {212 tokens.push({213 collectionId: parseInt(data[0].toString(), 10),214 tokenId: parseInt(data[1].toString(), 10),215 owner: data[2].toHuman(),216 amount: data[3].toBigInt(),217 });218 }219 });220 return {success, tokens};221 }222223 static extractTokensFromBurnResult(burnResult: ITransactionResult): {224 success: boolean,225 tokens: {collectionId: number, tokenId: number, owner: CrossAccountId, amount: bigint}[],226 } {227 if (burnResult.status !== this.transactionStatus.SUCCESS) {228 throw Error('Unable to burn tokens!');229 }230 let success = false;231 const tokens = [] as {collectionId: number, tokenId: number, owner: CrossAccountId, amount: bigint}[];232 burnResult.result.events.forEach(({event: {data, method, section}}) => {233 if (method === 'ExtrinsicSuccess') {234 success = true;235 } else if ((section === 'common') && (method === 'ItemDestroyed')) {236 tokens.push({237 collectionId: parseInt(data[0].toString(), 10),238 tokenId: parseInt(data[1].toString(), 10),239 owner: data[2].toHuman(),240 amount: data[3].toBigInt(),241 });242 }243 });244 return {success, tokens};245 }246247 static findCollectionInEvents(events: {event: IEvent}[], collectionId: number, expectedSection: string, expectedMethod: string): boolean {248 let eventId = null;249 events.forEach(({event: {data, method, section}}) => {250 if ((section === expectedSection) && (method === expectedMethod)) {251 eventId = parseInt(data[0].toString(), 10);252 }253 });254255 if (eventId === null) {256 throw Error(`No ${expectedMethod} event was found!`);257 }258 return eventId === collectionId;259 }260261 static isTokenTransferSuccess(events: {event: IEvent}[], collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId, amount=1n) {262 const normalizeAddress = (address: string | ICrossAccountId) => {263 if(typeof address === 'string') return address;264 const obj = {} as any;265 Object.keys(address).forEach(k => {266 obj[k.toLocaleLowerCase()] = address[k as 'Substrate' | 'Ethereum'];267 });268 if(obj.substrate) return CrossAccountId.withNormalizedSubstrate(obj.substrate);269 if(obj.ethereum) return CrossAccountId.fromLowerCaseKeys(obj).toLowerCase();270 return address;271 };272 let transfer = {collectionId: null, tokenId: null, from: null, to: null, amount: 1} as any;273 events.forEach(({event: {data, method, section}}) => {274 if ((section === 'common') && (method === 'Transfer')) {275 const hData = (data as any).toJSON();276 transfer = {277 collectionId: hData[0],278 tokenId: hData[1],279 from: normalizeAddress(hData[2]),280 to: normalizeAddress(hData[3]),281 amount: BigInt(hData[4]),282 };283 }284 });285 let isSuccess = parseInt(collectionId.toString()) === transfer.collectionId && parseInt(tokenId.toString()) === transfer.tokenId;286 isSuccess = isSuccess && JSON.stringify(normalizeAddress(fromAddressObj)) === JSON.stringify(transfer.from);287 isSuccess = isSuccess && JSON.stringify(normalizeAddress(toAddressObj)) === JSON.stringify(transfer.to);288 isSuccess = isSuccess && amount === transfer.amount;289 return isSuccess;290 }291292 static bigIntToDecimals(number: bigint, decimals = 18) {293 const numberStr = number.toString();294 const dotPos = numberStr.length - decimals;295296 if (dotPos <= 0) {297 return '0.' + '0'.repeat(Math.abs(dotPos)) + numberStr;298 } else {299 const intPart = numberStr.substring(0, dotPos);300 const fractPart = numberStr.substring(dotPos);301 return intPart + '.' + fractPart;302 }303 }304}305306class UniqueEventHelper {307 private static extractIndex(index: any): [number, number] | string {308 if(index.toRawType() === '[u8;2]') return [index[0], index[1]];309 return index.toJSON();310 }311312 private static extractSub(data: any, subTypes: any): {[key: string]: any} {313 let obj: any = {};314 let index = 0;315316 if (data.entries) {317 for(const [key, value] of data.entries()) {318 obj[key] = this.extractData(value, subTypes[index]);319 index++;320 }321 } else obj = data.toJSON();322323 return obj;324 }325326 private static toHuman(data: any) {327 return data && data.toHuman ? data.toHuman() : `${data}`;328 }329330 private static extractData(data: any, type: any): any {331 if(!type) return this.toHuman(data);332 if (['u16', 'u32'].indexOf(type.type) > -1) return data.toNumber();333 if (['u64', 'u128', 'u256'].indexOf(type.type) > -1) return data.toBigInt();334 if(type.hasOwnProperty('sub')) return this.extractSub(data, type.sub);335 return this.toHuman(data);336 }337338 public static extractEvents(events: {event: any, phase: any}[]): IEvent[] {339 const parsedEvents: IEvent[] = [];340341 events.forEach((record) => {342 const {event, phase} = record;343 const types = event.typeDef;344345 const eventData: IEvent = {346 section: event.section.toString(),347 method: event.method.toString(),348 index: this.extractIndex(event.index),349 data: [],350 phase: phase.toJSON(),351 };352353 event.data.forEach((val: any, index: number) => {354 eventData.data.push(this.extractData(val, types[index]));355 });356357 parsedEvents.push(eventData);358 });359360 return parsedEvents;361 }362}363364export class ChainHelperBase {365 helperBase: any;366367 transactionStatus = UniqueUtil.transactionStatus;368 chainLogType = UniqueUtil.chainLogType;369 util: typeof UniqueUtil;370 eventHelper: typeof UniqueEventHelper;371 logger: ILogger;372 api: ApiPromise | null;373 forcedNetwork: TNetworks | null;374 network: TNetworks | null;375 chainLog: IUniqueHelperLog[];376 children: ChainHelperBase[];377 address: AddressGroup;378 chain: ChainGroup;379 session: SessionGroup;380381 constructor(logger?: ILogger, helperBase?: any) {382 this.helperBase = helperBase;383384 this.util = UniqueUtil;385 this.eventHelper = UniqueEventHelper;386 if (typeof logger == 'undefined') logger = this.util.getDefaultLogger();387 this.logger = logger;388 this.api = null;389 this.forcedNetwork = null;390 this.network = null;391 this.chainLog = [];392 this.children = [];393 this.address = new AddressGroup(this);394 this.chain = new ChainGroup(this);395 this.session = new SessionGroup(this);396 }397398 clone(helperCls: ChainHelperBaseConstructor, options: {[key: string]: any} = {}) {399 Object.setPrototypeOf(helperCls.prototype, this);400 const newHelper = new helperCls(this.logger, options);401402 newHelper.api = this.api;403 newHelper.network = this.network;404 newHelper.forceNetwork = this.forceNetwork;405406 this.children.push(newHelper);407408 return newHelper;409 }410411 getApi(): ApiPromise {412 if(this.api === null) throw Error('API not initialized');413 return this.api;414 }415416 async subscribeEvents(expectedEvents: {section: string, names: string[]}[]) {417 const collectedEvents: IEvent[] = [];418 const unsubscribe = await this.getApi().query.system.events((events: Vec<FrameSystemEventRecord>) => {419 const ievents = this.eventHelper.extractEvents(events);420 ievents.forEach((event) => {421 expectedEvents.forEach((e => {422 if (event.section === e.section && e.names.includes(event.method)) {423 collectedEvents.push(event);424 }425 }));426 });427 });428 return {unsubscribe: unsubscribe as any, collectedEvents};429 }430431 clearChainLog(): void {432 this.chainLog = [];433 }434435 forceNetwork(value: TNetworks): void {436 this.forcedNetwork = value;437 }438439 async connect(wsEndpoint: string, listeners?: IApiListeners) {440 if (this.api !== null) throw Error('Already connected');441 const {api, network} = await ChainHelperBase.createConnection(wsEndpoint, listeners, this.forcedNetwork);442 this.api = api;443 this.network = network;444 }445446 async disconnect() {447 for (const child of this.children) {448 child.clearApi();449 }450451 if (this.api === null) return;452 await this.api.disconnect();453 this.clearApi();454 }455456 clearApi() {457 this.api = null;458 this.network = null;459 }460461 static async detectNetwork(api: ApiPromise): Promise<TNetworks> {462 const spec = (await api.query.system.lastRuntimeUpgrade()).toJSON() as any;463 const xcmChains = ['rococo', 'westend', 'westmint', 'acala', 'karura', 'moonbeam', 'moonriver'];464465 if(xcmChains.indexOf(spec.specName) > -1) return spec.specName;466467 if(['quartz', 'unique'].indexOf(spec.specName) > -1) return spec.specName;468 return 'opal';469 }470471 static async detectNetworkByWsEndpoint(wsEndpoint: string): Promise<TNetworks> {472 const api = new ApiPromise({provider: new WsProvider(wsEndpoint)});473 await api.isReady;474475 const network = await this.detectNetwork(api);476477 await api.disconnect();478479 return network;480 }481482 static async createConnection(wsEndpoint: string, listeners?: IApiListeners, network?: TNetworks | null): Promise<{483 api: ApiPromise;484 network: TNetworks;485 }> {486 if(typeof network === 'undefined' || network === null) network = 'opal';487 const supportedRPC = {488 opal: {489 unique: require('@unique-nft/opal-testnet-types/definitions').unique.rpc,490 },491 quartz: {492 unique: require('@unique-nft/quartz-mainnet-types/definitions').unique.rpc,493 },494 unique: {495 unique: require('@unique-nft/unique-mainnet-types/definitions').unique.rpc,496 },497 rococo: {},498 westend: {},499 moonbeam: {},500 moonriver: {},501 acala: {},502 karura: {},503 westmint: {},504 };505 if(!supportedRPC.hasOwnProperty(network)) network = await this.detectNetworkByWsEndpoint(wsEndpoint);506 const rpc = supportedRPC[network];507508 // TODO: investigate how to replace rpc in runtime509 // api._rpcCore.addUserInterfaces(rpc);510511 const api = new ApiPromise({provider: new WsProvider(wsEndpoint), rpc});512513 await api.isReadyOrError;514515 if (typeof listeners === 'undefined') listeners = {};516 for (const event of ['connected', 'disconnected', 'error', 'ready', 'decorated']) {517 if (!listeners.hasOwnProperty(event) || typeof listeners[event as TApiAllowedListeners] === 'undefined') continue;518 api.on(event as ApiInterfaceEvents, listeners[event as TApiAllowedListeners] as (...args: any[]) => any);519 }520521 return {api, network};522 }523524 getTransactionStatus(data: {events: {event: IEvent}[], status: any}) {525 const {events, status} = data;526 if (status.isReady) {527 return this.transactionStatus.NOT_READY;528 }529 if (status.isBroadcast) {530 return this.transactionStatus.NOT_READY;531 }532 if (status.isInBlock || status.isFinalized) {533 const errors = events.filter(e => e.event.method === 'ExtrinsicFailed');534 if (errors.length > 0) {535 return this.transactionStatus.FAIL;536 }537 if (events.filter(e => e.event.method === 'ExtrinsicSuccess').length > 0) {538 return this.transactionStatus.SUCCESS;539 }540 }541542 return this.transactionStatus.FAIL;543 }544545 signTransaction(sender: TSigner, transaction: any, options: Partial<SignerOptions> | null = null, label = 'transaction') {546 const sign = (callback: any) => {547 if(options !== null) return transaction.signAndSend(sender, options, callback);548 return transaction.signAndSend(sender, callback);549 };550 // eslint-disable-next-line no-async-promise-executor551 return new Promise(async (resolve, reject) => {552 try {553 const unsub = await sign((result: any) => {554 const status = this.getTransactionStatus(result);555556 if (status === this.transactionStatus.SUCCESS) {557 this.logger.log(`${label} successful`);558 unsub();559 resolve({result, status});560 } else if (status === this.transactionStatus.FAIL) {561 let moduleError = null;562563 if (result.hasOwnProperty('dispatchError')) {564 const dispatchError = result['dispatchError'];565566 if (dispatchError) {567 if (dispatchError.isModule) {568 const modErr = dispatchError.asModule;569 const errorMeta = dispatchError.registry.findMetaError(modErr);570571 moduleError = `${errorMeta.section}.${errorMeta.name}`;572 } else {573 moduleError = dispatchError.toHuman();574 }575 } else {576 this.logger.log(result, this.logger.level.ERROR);577 }578 }579580 this.logger.log(`Something went wrong with ${label}. Status: ${status}`, this.logger.level.ERROR);581 unsub();582 reject({status, moduleError, result});583 }584 });585 } catch (e) {586 this.logger.log(e, this.logger.level.ERROR);587 reject(e);588 }589 });590 }591592 async getPaymentInfo(signer: TSigner, tx: any, len: number | null) {593 const api = this.getApi();594 const signingInfo = await api.derive.tx.signingInfo(signer.address);595596 // We need to sign the tx because597 // unsigned transactions does not have an inclusion fee598 tx.sign(signer, {599 blockHash: api.genesisHash,600 genesisHash: api.genesisHash,601 runtimeVersion: api.runtimeVersion,602 nonce: signingInfo.nonce,603 });604605 if (len === null) {606 return (await this.callRpc('api.rpc.payment.queryInfo', [tx.toHex()])) as RuntimeDispatchInfo;607 } else {608 return (await api.call.transactionPaymentApi.queryInfo(tx, len)) as RuntimeDispatchInfo;609 }610 }611612 constructApiCall(apiCall: string, params: any[]) {613 if(!apiCall.startsWith('api.')) throw Error(`Invalid api call: ${apiCall}`);614 let call = this.getApi() as any;615 for(const part of apiCall.slice(4).split('.')) {616 call = call[part];617 }618 return call(...params);619 }620621 async executeExtrinsic(sender: TSigner, extrinsic: string, params: any[], expectSuccess=true, options: Partial<SignerOptions>|null = null/*, failureMessage='expected success'*/) {622 if(this.api === null) throw Error('API not initialized');623 if(!extrinsic.startsWith('api.tx.')) throw Error(`${extrinsic} is not transaction`);624625 const startTime = (new Date()).getTime();626 let result: ITransactionResult;627 let events: IEvent[] = [];628 try {629 result = await this.signTransaction(sender, this.constructApiCall(extrinsic, params), options, extrinsic) as ITransactionResult;630 events = this.eventHelper.extractEvents(result.result.events);631 }632 catch(e) {633 if(!(e as object).hasOwnProperty('status')) throw e;634 result = e as ITransactionResult;635 }636637 const endTime = (new Date()).getTime();638639 const log = {640 executedAt: endTime,641 executionTime: endTime - startTime,642 type: this.chainLogType.EXTRINSIC,643 status: result.status,644 call: extrinsic,645 signer: this.getSignerAddress(sender),646 params,647 } as IUniqueHelperLog;648649 if(result.status !== this.transactionStatus.SUCCESS) {650 if (result.moduleError) log.moduleError = result.moduleError;651 else if (result.result.dispatchError) log.dispatchError = result.result.dispatchError;652 }653 if(events.length > 0) log.events = events;654655 this.chainLog.push(log);656657 if(expectSuccess && result.status !== this.transactionStatus.SUCCESS) {658 if (result.moduleError) throw Error(`${result.moduleError}`);659 else if (result.result.dispatchError) throw Error(JSON.stringify(result.result.dispatchError));660 }661 return result;662 }663664 async callRpc(rpc: string, params?: any[]) {665 if(typeof params === 'undefined') params = [];666 if(this.api === null) throw Error('API not initialized');667 if(!rpc.startsWith('api.rpc.') && !rpc.startsWith('api.query.')) throw Error(`${rpc} is not RPC call`);668669 const startTime = (new Date()).getTime();670 let result;671 let error = null;672 const log = {673 type: this.chainLogType.RPC,674 call: rpc,675 params,676 } as IUniqueHelperLog;677678 try {679 result = await this.constructApiCall(rpc, params);680 }681 catch(e) {682 error = e;683 }684685 const endTime = (new Date()).getTime();686687 log.executedAt = endTime;688 log.status = (error === null ? this.transactionStatus.SUCCESS : this.transactionStatus.FAIL) as 'Fail' | 'Success';689 log.executionTime = endTime - startTime;690691 this.chainLog.push(log);692693 if(error !== null) throw error;694695 return result;696 }697698 getSignerAddress(signer: IKeyringPair | string): string {699 if(typeof signer === 'string') return signer;700 return signer.address;701 }702703 fetchAllPalletNames(): string[] {704 if(this.api === null) throw Error('API not initialized');705 return this.api.runtimeMetadata.asLatest.pallets.map(m => m.name.toString().toLowerCase());706 }707708 fetchMissingPalletNames(requiredPallets: string[]): string[] {709 const palletNames = this.fetchAllPalletNames();710 return requiredPallets.filter(p => !palletNames.includes(p));711 }712}713714715class HelperGroup<T extends ChainHelperBase> {716 helper: T;717718 constructor(uniqueHelper: T) {719 this.helper = uniqueHelper;720 }721}722723724class CollectionGroup extends HelperGroup<UniqueHelper> {725 /**726 * Get number of blocks when sponsored transaction is available.727 *728 * @param collectionId ID of collection729 * @param tokenId ID of token730 * @param addressObj address for which the sponsorship is checked731 * @example await getTokenNextSponsored(1, 2, {Substrate: '5DfhbVfww7ThF8q6f3...'});732 * @returns number of blocks or null if sponsorship hasn't been set733 */734 async getTokenNextSponsored(collectionId: number, tokenId: number, addressObj: ICrossAccountId): Promise<number | null> {735 return (await this.helper.callRpc('api.rpc.unique.nextSponsored', [collectionId, addressObj, tokenId])).toJSON();736 }737738 /**739 * Get the number of created collections.740 *741 * @returns number of created collections742 */743 async getTotalCount(): Promise<number> {744 return (await this.helper.callRpc('api.rpc.unique.collectionStats')).created.toNumber();745 }746747 /**748 * Get information about the collection with additional data,749 * including the number of tokens it contains, its administrators,750 * the normalized address of the collection's owner, and decoded name and description.751 *752 * @param collectionId ID of collection753 * @example await getData(2)754 * @returns collection information object755 */756 async getData(collectionId: number): Promise<{757 id: number;758 name: string;759 description: string;760 tokensCount: number;761 admins: CrossAccountId[];762 normalizedOwner: TSubstrateAccount;763 raw: any764 } | null> {765 const collection = await this.helper.callRpc('api.rpc.unique.collectionById', [collectionId]);766 const humanCollection = collection.toHuman(), collectionData = {767 id: collectionId, name: null, description: null, tokensCount: 0, admins: [],768 raw: humanCollection,769 } as any, jsonCollection = collection.toJSON();770 if (humanCollection === null) return null;771 collectionData.raw.limits = jsonCollection.limits;772 collectionData.raw.permissions = jsonCollection.permissions;773 collectionData.normalizedOwner = this.helper.address.normalizeSubstrate(collectionData.raw.owner);774 for (const key of ['name', 'description']) {775 collectionData[key] = this.helper.util.vec2str(humanCollection[key]);776 }777778 collectionData.tokensCount = (['RFT', 'NFT'].includes(humanCollection.mode))779 ? await this.helper[humanCollection.mode.toLocaleLowerCase() as 'nft' | 'rft'].getLastTokenId(collectionId)780 : 0;781 collectionData.admins = await this.getAdmins(collectionId);782783 return collectionData;784 }785786 /**787 * Get the addresses of the collection's administrators, optionally normalized.788 *789 * @param collectionId ID of collection790 * @param normalize whether to normalize the addresses to the default ss58 format791 * @example await getAdmins(1)792 * @returns array of administrators793 */794 async getAdmins(collectionId: number, normalize = false): Promise<CrossAccountId[]> {795 const admins = (await this.helper.callRpc('api.rpc.unique.adminlist', [collectionId])).toHuman();796797 return normalize798 ? admins.map((address: CrossAccountId) => address.withNormalizedSubstrate())799 : admins;800 }801802 /**803 * Get the addresses added to the collection allow-list, optionally normalized.804 * @param collectionId ID of collection805 * @param normalize whether to normalize the addresses to the default ss58 format806 * @example await getAllowList(1)807 * @returns array of allow-listed addresses808 */809 async getAllowList(collectionId: number, normalize = false): Promise<CrossAccountId[]> {810 const allowListed = (await this.helper.callRpc('api.rpc.unique.allowlist', [collectionId])).toHuman();811 return normalize812 ? allowListed.map((address: CrossAccountId) => address.withNormalizedSubstrate())813 : allowListed;814 }815816 /**817 * Get the effective limits of the collection instead of null for default values818 *819 * @param collectionId ID of collection820 * @example await getEffectiveLimits(2)821 * @returns object of collection limits822 */823 async getEffectiveLimits(collectionId: number): Promise<ICollectionLimits> {824 return (await this.helper.callRpc('api.rpc.unique.effectiveCollectionLimits', [collectionId])).toJSON();825 }826827 /**828 * Burns the collection if the signer has sufficient permissions and collection is empty.829 *830 * @param signer keyring of signer831 * @param collectionId ID of collection832 * @example await helper.collection.burn(aliceKeyring, 3);833 * @returns ```true``` if extrinsic success, otherwise ```false```834 */835 async burn(signer: TSigner, collectionId: number): Promise<boolean> {836 const result = await this.helper.executeExtrinsic(837 signer,838 'api.tx.unique.destroyCollection', [collectionId],839 true,840 );841842 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'CollectionDestroyed');843 }844845 /**846 * Sets the sponsor for the collection (Requires the Substrate address). Needs confirmation by the sponsor.847 *848 * @param signer keyring of signer849 * @param collectionId ID of collection850 * @param sponsorAddress Sponsor substrate address851 * @example setSponsor(aliceKeyring, 10, "5DyN4Y92vZCjv38fg...")852 * @returns ```true``` if extrinsic success, otherwise ```false```853 */854 async setSponsor(signer: TSigner, collectionId: number, sponsorAddress: TSubstrateAccount): Promise<boolean> {855 const result = await this.helper.executeExtrinsic(856 signer,857 'api.tx.unique.setCollectionSponsor', [collectionId, sponsorAddress],858 true,859 );860861 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'CollectionSponsorSet');862 }863864 /**865 * Confirms consent to sponsor the collection on behalf of the signer.866 *867 * @param signer keyring of signer868 * @param collectionId ID of collection869 * @example confirmSponsorship(aliceKeyring, 10)870 * @returns ```true``` if extrinsic success, otherwise ```false```871 */872 async confirmSponsorship(signer: TSigner, collectionId: number): Promise<boolean> {873 const result = await this.helper.executeExtrinsic(874 signer,875 'api.tx.unique.confirmSponsorship', [collectionId],876 true,877 );878879 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'SponsorshipConfirmed');880 }881882 /**883 * Removes the sponsor of a collection, regardless if it consented or not.884 *885 * @param signer keyring of signer886 * @param collectionId ID of collection887 * @example removeSponsor(aliceKeyring, 10)888 * @returns ```true``` if extrinsic success, otherwise ```false```889 */890 async removeSponsor(signer: TSigner, collectionId: number): Promise<boolean> {891 const result = await this.helper.executeExtrinsic(892 signer,893 'api.tx.unique.removeCollectionSponsor', [collectionId],894 true,895 );896897 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'CollectionSponsorRemoved');898 }899900 /**901 * Sets the limits of the collection. At least one limit must be specified for a correct call.902 *903 * @param signer keyring of signer904 * @param collectionId ID of collection905 * @param limits collection limits object906 * @example907 * await setLimits(908 * aliceKeyring,909 * 10,910 * {911 * sponsorTransferTimeout: 0,912 * ownerCanDestroy: false913 * }914 * )915 * @returns ```true``` if extrinsic success, otherwise ```false```916 */917 async setLimits(signer: TSigner, collectionId: number, limits: ICollectionLimits): Promise<boolean> {918 const result = await this.helper.executeExtrinsic(919 signer,920 'api.tx.unique.setCollectionLimits', [collectionId, limits],921 true,922 );923924 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'CollectionLimitSet');925 }926927 /**928 * Changes the owner of the collection to the new Substrate address.929 *930 * @param signer keyring of signer931 * @param collectionId ID of collection932 * @param ownerAddress substrate address of new owner933 * @example changeOwner(aliceKeyring, 10, "5DyN4Y92vZCjv38fg...")934 * @returns ```true``` if extrinsic success, otherwise ```false```935 */936 async changeOwner(signer: TSigner, collectionId: number, ownerAddress: TSubstrateAccount): Promise<boolean> {937 const result = await this.helper.executeExtrinsic(938 signer,939 'api.tx.unique.changeCollectionOwner', [collectionId, ownerAddress],940 true,941 );942943 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'CollectionOwnerChanged');944 }945946 /**947 * Adds a collection administrator.948 *949 * @param signer keyring of signer950 * @param collectionId ID of collection951 * @param adminAddressObj Administrator address (substrate or ethereum)952 * @example addAdmin(aliceKeyring, 10, {Substrate: "5DyN4Y92vZCjv38fg..."})953 * @returns ```true``` if extrinsic success, otherwise ```false```954 */955 async addAdmin(signer: TSigner, collectionId: number, adminAddressObj: ICrossAccountId): Promise<boolean> {956 const result = await this.helper.executeExtrinsic(957 signer,958 'api.tx.unique.addCollectionAdmin', [collectionId, adminAddressObj],959 true,960 );961962 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'CollectionAdminAdded');963 }964965 /**966 * Removes a collection administrator.967 *968 * @param signer keyring of signer969 * @param collectionId ID of collection970 * @param adminAddressObj Administrator address (substrate or ethereum)971 * @example removeAdmin(aliceKeyring, 10, {Substrate: "5DyN4Y92vZCjv38fg..."})972 * @returns ```true``` if extrinsic success, otherwise ```false```973 */974 async removeAdmin(signer: TSigner, collectionId: number, adminAddressObj: ICrossAccountId): Promise<boolean> {975 const result = await this.helper.executeExtrinsic(976 signer,977 'api.tx.unique.removeCollectionAdmin', [collectionId, adminAddressObj],978 true,979 );980981 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'CollectionAdminRemoved');982 }983984 /**985 * Check if user is in allow list.986 *987 * @param collectionId ID of collection988 * @param user Account to check989 * @example await getAdmins(1)990 * @returns is user in allow list991 */992 async allowed(collectionId: number, user: ICrossAccountId): Promise<boolean> {993 return (await this.helper.callRpc('api.rpc.unique.allowed', [collectionId, user])).toJSON();994 }995996 /**997 * Adds an address to allow list998 * @param signer keyring of signer999 * @param collectionId ID of collection1000 * @param addressObj address to add to the allow list1001 * @returns ```true``` if extrinsic success, otherwise ```false```1002 */1003 async addToAllowList(signer: TSigner, collectionId: number, addressObj: ICrossAccountId): Promise<boolean> {1004 const result = await this.helper.executeExtrinsic(1005 signer,1006 'api.tx.unique.addToAllowList', [collectionId, addressObj],1007 true,1008 );10091010 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'AllowListAddressAdded');1011 }10121013 /**1014 * Removes an address from allow list1015 *1016 * @param signer keyring of signer1017 * @param collectionId ID of collection1018 * @param addressObj address to remove from the allow list1019 * @returns ```true``` if extrinsic success, otherwise ```false```1020 */1021 async removeFromAllowList(signer: TSigner, collectionId: number, addressObj: ICrossAccountId): Promise<boolean> {1022 const result = await this.helper.executeExtrinsic(1023 signer,1024 'api.tx.unique.removeFromAllowList', [collectionId, addressObj],1025 true,1026 );10271028 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'AllowListAddressRemoved');1029 }10301031 /**1032 * Sets onchain permissions for selected collection.1033 *1034 * @param signer keyring of signer1035 * @param collectionId ID of collection1036 * @param permissions collection permissions object1037 * @example setPermissions(aliceKeyring, 10, {access:'AllowList', mintMode: true, nesting: {collectionAdmin: true, tokenOwner: true}});1038 * @returns ```true``` if extrinsic success, otherwise ```false```1039 */1040 async setPermissions(signer: TSigner, collectionId: number, permissions: ICollectionPermissions): Promise<boolean> {1041 const result = await this.helper.executeExtrinsic(1042 signer,1043 'api.tx.unique.setCollectionPermissions', [collectionId, permissions],1044 true,1045 );10461047 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'CollectionPermissionSet');1048 }10491050 /**1051 * Enables nesting for selected collection. If `restricted` set, you can nest only tokens from specified collections.1052 *1053 * @param signer keyring of signer1054 * @param collectionId ID of collection1055 * @param permissions nesting permissions object1056 * @example enableNesting(aliceKeyring, 10, {collectionAdmin: true, tokenOwner: true});1057 * @returns ```true``` if extrinsic success, otherwise ```false```1058 */1059 async enableNesting(signer: TSigner, collectionId: number, permissions: INestingPermissions): Promise<boolean> {1060 return await this.setPermissions(signer, collectionId, {nesting: permissions});1061 }10621063 /**1064 * Disables nesting for selected collection.1065 *1066 * @param signer keyring of signer1067 * @param collectionId ID of collection1068 * @example disableNesting(aliceKeyring, 10);1069 * @returns ```true``` if extrinsic success, otherwise ```false```1070 */1071 async disableNesting(signer: TSigner, collectionId: number): Promise<boolean> {1072 return await this.setPermissions(signer, collectionId, {nesting: {tokenOwner: false, collectionAdmin: false}});1073 }10741075 /**1076 * Sets onchain properties to the collection.1077 *1078 * @param signer keyring of signer1079 * @param collectionId ID of collection1080 * @param properties array of property objects1081 * @example setProperties(aliceKeyring, 10, [{key: "gender", value: "male"}]);1082 * @returns ```true``` if extrinsic success, otherwise ```false```1083 */1084 async setProperties(signer: TSigner, collectionId: number, properties: IProperty[]): Promise<boolean> {1085 const result = await this.helper.executeExtrinsic(1086 signer,1087 'api.tx.unique.setCollectionProperties', [collectionId, properties],1088 true,1089 );10901091 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'CollectionPropertySet');1092 }10931094 /**1095 * Get collection properties.1096 *1097 * @param collectionId ID of collection1098 * @param propertyKeys optionally filter the returned properties to only these keys1099 * @example getProperties(1219, ['location', 'date', 'time', 'isParadise']);1100 * @returns array of key-value pairs1101 */1102 async getProperties(collectionId: number, propertyKeys?: string[] | null): Promise<IProperty[]> {1103 return (await this.helper.callRpc('api.rpc.unique.collectionProperties', [collectionId, propertyKeys])).toHuman();1104 }11051106 async getPropertiesConsumedSpace(collectionId: number): Promise<number> {1107 const api = this.helper.getApi();1108 const props = (await api.query.common.collectionProperties(collectionId)).toJSON();1109 1110 return (props! as any).consumedSpace;1111 }11121113 async getCollectionOptions(collectionId: number) {1114 return (await this.helper.callRpc('api.rpc.unique.collectionById', [collectionId])).toHuman();1115 }11161117 /**1118 * Deletes onchain properties from the collection.1119 *1120 * @param signer keyring of signer1121 * @param collectionId ID of collection1122 * @param propertyKeys array of property keys to delete1123 * @example deleteProperties(aliceKeyring, 10, ["gender", "age"]);1124 * @returns ```true``` if extrinsic success, otherwise ```false```1125 */1126 async deleteProperties(signer: TSigner, collectionId: number, propertyKeys: string[]): Promise<boolean> {1127 const result = await this.helper.executeExtrinsic(1128 signer,1129 'api.tx.unique.deleteCollectionProperties', [collectionId, propertyKeys],1130 true,1131 );11321133 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'CollectionPropertyDeleted');1134 }11351136 /**1137 * Changes the owner of the token.1138 *1139 * @param signer keyring of signer1140 * @param collectionId ID of collection1141 * @param tokenId ID of token1142 * @param addressObj address of a new owner1143 * @param amount amount of tokens to be transfered. For NFT must be set to 1n1144 * @example transferToken(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."})1145 * @returns true if the token success, otherwise false1146 */1147 async transferToken(signer: TSigner, collectionId: number, tokenId: number, addressObj: ICrossAccountId, amount=1n): Promise<boolean> {1148 const result = await this.helper.executeExtrinsic(1149 signer,1150 'api.tx.unique.transfer', [addressObj, collectionId, tokenId, amount],1151 true, // `Unable to transfer token #${tokenId} from collection #${collectionId}`,1152 );11531154 return this.helper.util.isTokenTransferSuccess(result.result.events, collectionId, tokenId, {Substrate: typeof signer === 'string' ? signer : signer.address}, addressObj, amount);1155 }11561157 /**1158 *1159 * Change ownership of a token(s) on behalf of the owner.1160 *1161 * @param signer keyring of signer1162 * @param collectionId ID of collection1163 * @param tokenId ID of token1164 * @param fromAddressObj address on behalf of which the token will be sent1165 * @param toAddressObj new token owner1166 * @param amount amount of tokens to be transfered. For NFT must be set to 1n1167 * @example transferTokenFrom(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg"}, {Ethereum: "0x9F0583DbB85..."})1168 * @returns true if the token success, otherwise false1169 */1170 async transferTokenFrom(signer: TSigner, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId, amount=1n): Promise<boolean> {1171 const result = await this.helper.executeExtrinsic(1172 signer,1173 'api.tx.unique.transferFrom', [fromAddressObj, toAddressObj, collectionId, tokenId, amount],1174 true, // `Unable to transfer token #${tokenId} from collection #${collectionId}`,1175 );1176 return this.helper.util.isTokenTransferSuccess(result.result.events, collectionId, tokenId, fromAddressObj, toAddressObj, amount);1177 }11781179 /**1180 *1181 * Destroys a concrete instance of NFT/RFT or burns a specified amount of fungible tokens.1182 *1183 * @param signer keyring of signer1184 * @param collectionId ID of collection1185 * @param tokenId ID of token1186 * @param amount amount of tokens to be burned. For NFT must be set to 1n1187 * @example burnToken(aliceKeyring, 10, 5);1188 * @returns ```true``` if the extrinsic is successful, otherwise ```false```1189 */1190 async burnToken(signer: TSigner, collectionId: number, tokenId: number, amount=1n): Promise<boolean> {1191 const burnResult = await this.helper.executeExtrinsic(1192 signer,1193 'api.tx.unique.burnItem', [collectionId, tokenId, amount],1194 true, // `Unable to burn token for ${label}`,1195 );1196 const burnedTokens = this.helper.util.extractTokensFromBurnResult(burnResult);1197 if (burnedTokens.tokens.length > 1) throw Error('Burned multiple tokens');1198 return burnedTokens.success;1199 }12001201 /**1202 * Destroys a concrete instance of NFT on behalf of the owner1203 *1204 * @param signer keyring of signer1205 * @param collectionId ID of collection1206 * @param tokenId ID of token1207 * @param fromAddressObj address on behalf of which the token will be burnt1208 * @param amount amount of tokens to be burned. For NFT must be set to 1n1209 * @example burnTokenFrom(aliceKeyring, 10, {Substrate: "5DyN4Y92vZCjv38fg..."}, 5, {Ethereum: "0x9F0583DbB85..."})1210 * @returns ```true``` if extrinsic success, otherwise ```false```1211 */1212 async burnTokenFrom(signer: TSigner, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, amount=1n): Promise<boolean> {1213 const burnResult = await this.helper.executeExtrinsic(1214 signer,1215 'api.tx.unique.burnFrom', [collectionId, fromAddressObj, tokenId, amount],1216 true, // `Unable to burn token from for ${label}`,1217 );1218 const burnedTokens = this.helper.util.extractTokensFromBurnResult(burnResult);1219 return burnedTokens.success && burnedTokens.tokens.length > 0;1220 }12211222 /**1223 * Set, change, or remove approved address to transfer the ownership of the NFT.1224 *1225 * @param signer keyring of signer1226 * @param collectionId ID of collection1227 * @param tokenId ID of token1228 * @param toAddressObj Substrate or Ethereum address which gets approved use of the signer's tokens1229 * @param amount amount of token to be approved. For NFT must be set to 1n1230 * @returns ```true``` if extrinsic success, otherwise ```false```1231 */1232 async approveToken(signer: IKeyringPair, collectionId: number, tokenId: number, toAddressObj: ICrossAccountId, amount=1n) {1233 const approveResult = await this.helper.executeExtrinsic(1234 signer,1235 'api.tx.unique.approve', [toAddressObj, collectionId, tokenId, amount],1236 true, // `Unable to approve token for ${label}`,1237 );12381239 return this.helper.util.findCollectionInEvents(approveResult.result.events, collectionId, 'common', 'Approved');1240 }12411242 /**1243 * Get the amount of token pieces approved to transfer or burn. Normally 0.1244 *1245 * @param collectionId ID of collection1246 * @param tokenId ID of token1247 * @param toAccountObj address which is approved to use token pieces1248 * @param fromAccountObj address which may have allowed the use of its owned tokens1249 * @example getTokenApprovedPieces(10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."}, {Substrate: "5ERZNF88Mm7UGfPP3mdG..."})1250 * @returns number of approved to transfer pieces1251 */1252 async getTokenApprovedPieces(collectionId: number, tokenId: number, toAccountObj: ICrossAccountId, fromAccountObj: ICrossAccountId): Promise<bigint> {1253 return (await this.helper.callRpc('api.rpc.unique.allowance', [collectionId, fromAccountObj, toAccountObj, tokenId])).toBigInt();1254 }12551256 /**1257 * Get the last created token ID in a collection1258 *1259 * @param collectionId ID of collection1260 * @example getLastTokenId(10);1261 * @returns id of the last created token1262 */1263 async getLastTokenId(collectionId: number): Promise<number> {1264 return (await this.helper.callRpc('api.rpc.unique.lastTokenId', [collectionId])).toNumber();1265 }12661267 /**1268 * Check if token exists1269 *1270 * @param collectionId ID of collection1271 * @param tokenId ID of token1272 * @example doesTokenExist(10, 20);1273 * @returns true if the token exists, otherwise false1274 */1275 async doesTokenExist(collectionId: number, tokenId: number): Promise<boolean> {1276 return (await this.helper.callRpc('api.rpc.unique.tokenExists', [collectionId, tokenId])).toJSON();1277 }1278}12791280class NFTnRFT extends CollectionGroup {1281 /**1282 * Get tokens owned by account1283 *1284 * @param collectionId ID of collection1285 * @param addressObj tokens owner1286 * @example getTokensByAddress(10, {Substrate: "5DyN4Y92vZCjv38fg..."})1287 * @returns array of token ids owned by account1288 */1289 async getTokensByAddress(collectionId: number, addressObj: ICrossAccountId): Promise<number[]> {1290 return (await this.helper.callRpc('api.rpc.unique.accountTokens', [collectionId, addressObj])).toJSON();1291 }12921293 /**1294 * Get token data1295 *1296 * @param collectionId ID of collection1297 * @param tokenId ID of token1298 * @param propertyKeys optionally filter the token properties to only these keys1299 * @param blockHashAt optionally query the data at some block with this hash1300 * @example getToken(10, 5);1301 * @returns human readable token data1302 */1303 async getToken(collectionId: number, tokenId: number, propertyKeys: string[] = [], blockHashAt?: string): Promise<{1304 properties: IProperty[];1305 owner: CrossAccountId;1306 normalizedOwner: CrossAccountId;1307 }| null> {1308 let tokenData;1309 if(typeof blockHashAt === 'undefined') {1310 tokenData = await this.helper.callRpc('api.rpc.unique.tokenData', [collectionId, tokenId]);1311 }1312 else {1313 if(propertyKeys.length == 0) {1314 const collection = (await this.helper.callRpc('api.rpc.unique.collectionById', [collectionId])).toHuman();1315 if(!collection) return null;1316 propertyKeys = collection.tokenPropertyPermissions.map((x: ITokenPropertyPermission) => x.key);1317 }1318 tokenData = await this.helper.callRpc('api.rpc.unique.tokenData', [collectionId, tokenId, propertyKeys, blockHashAt]);1319 }1320 tokenData = tokenData.toHuman();1321 if (tokenData === null || tokenData.owner === null) return null;1322 const owner = {} as any;1323 for (const key of Object.keys(tokenData.owner)) {1324 owner[key.toLocaleLowerCase()] = key.toLocaleLowerCase() == 'substrate'1325 ? CrossAccountId.normalizeSubstrateAddress(tokenData.owner[key])1326 : tokenData.owner[key];1327 }1328 tokenData.normalizedOwner = CrossAccountId.fromLowerCaseKeys(owner);1329 return tokenData;1330 }13311332 /**1333 * Set permissions to change token properties1334 *1335 * @param signer keyring of signer1336 * @param collectionId ID of collection1337 * @param permissions permissions to change a property by the collection admin or token owner1338 * @example setTokenPropertyPermissions(1339 * aliceKeyring, 10, [{key: "gender", permission: {tokenOwner: true, mutable: true, collectionAdmin: true}}]1340 * )1341 * @returns true if extrinsic success otherwise false1342 */1343 async setTokenPropertyPermissions(signer: TSigner, collectionId: number, permissions: ITokenPropertyPermission[]): Promise<boolean> {1344 const result = await this.helper.executeExtrinsic(1345 signer,1346 'api.tx.unique.setTokenPropertyPermissions', [collectionId, permissions],1347 true,1348 );13491350 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'PropertyPermissionSet');1351 }13521353 /**1354 * Get token property permissions.1355 *1356 * @param collectionId ID of collection1357 * @param propertyKeys optionally filter the returned property permissions to only these keys1358 * @example getPropertyPermissions(1219, ['location', 'date', 'time', 'isParadise']);1359 * @returns array of key-permission pairs1360 */1361 async getPropertyPermissions(collectionId: number, propertyKeys: string[] | null = null): Promise<ITokenPropertyPermission[]> {1362 return (await this.helper.callRpc('api.rpc.unique.propertyPermissions', [collectionId, ...(propertyKeys === null ? [] : [propertyKeys])])).toHuman();1363 }13641365 /**1366 * Set token properties1367 *1368 * @param signer keyring of signer1369 * @param collectionId ID of collection1370 * @param tokenId ID of token1371 * @param properties key-value pairs of metadata which to add to a token. Keys must be permitted in the collection1372 * @example setTokenProperties(aliceKeyring, 10, 5, [{key: "gender", value: "female"}, {key: "age", value: "23"}])1373 * @returns ```true``` if extrinsic success, otherwise ```false```1374 */1375 async setTokenProperties(signer: TSigner, collectionId: number, tokenId: number, properties: IProperty[]): Promise<boolean> {1376 const result = await this.helper.executeExtrinsic(1377 signer,1378 'api.tx.unique.setTokenProperties', [collectionId, tokenId, properties],1379 true,1380 );13811382 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'TokenPropertySet');1383 }13841385 /**1386 * Get properties, metadata assigned to a token.1387 *1388 * @param collectionId ID of collection1389 * @param tokenId ID of token1390 * @param propertyKeys optionally filter the returned properties to only these keys1391 * @example getTokenProperties(1219, ['location', 'date', 'time', 'isParadise']);1392 * @returns array of key-value pairs1393 */1394 async getTokenProperties(collectionId: number, tokenId: number, propertyKeys?: string[] | null): Promise<IProperty[]> {1395 return (await this.helper.callRpc('api.rpc.unique.tokenProperties', [collectionId, tokenId, propertyKeys])).toHuman();1396 }13971398 /**1399 * Delete the provided properties of a token1400 * @param signer keyring of signer1401 * @param collectionId ID of collection1402 * @param tokenId ID of token1403 * @param propertyKeys property keys to be deleted1404 * @example deleteTokenProperties(aliceKeyring, 10, 5, ["gender", "age"])1405 * @returns ```true``` if extrinsic success, otherwise ```false```1406 */1407 async deleteTokenProperties(signer: TSigner, collectionId: number, tokenId: number, propertyKeys: string[]): Promise<boolean> {1408 const result = await this.helper.executeExtrinsic(1409 signer,1410 'api.tx.unique.deleteTokenProperties', [collectionId, tokenId, propertyKeys],1411 true,1412 );14131414 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'TokenPropertyDeleted');1415 }14161417 /**1418 * Mint new collection1419 *1420 * @param signer keyring of signer1421 * @param collectionOptions basic collection options and properties1422 * @param mode NFT or RFT type of a collection1423 * @example mintCollection(aliceKeyring, {name: 'New', description: "New collection", tokenPrefix: "NEW"}, "NFT")1424 * @returns object of the created collection1425 */1426 async mintCollection(signer: TSigner, collectionOptions: ICollectionCreationOptions, mode: 'NFT' | 'RFT'): Promise<UniqueBaseCollection> {1427 collectionOptions = JSON.parse(JSON.stringify(collectionOptions)) as ICollectionCreationOptions; // Clone object1428 collectionOptions.mode = (mode === 'NFT') ? {nft: null} : {refungible: null};1429 for (const key of ['name', 'description', 'tokenPrefix']) {1430 if (typeof collectionOptions[key as 'name' | 'description' | 'tokenPrefix'] === 'string') collectionOptions[key as 'name' | 'description' | 'tokenPrefix'] = this.helper.util.str2vec(collectionOptions[key as 'name' | 'description' | 'tokenPrefix'] as string);1431 }1432 const creationResult = await this.helper.executeExtrinsic(1433 signer,1434 'api.tx.unique.createCollectionEx', [collectionOptions],1435 true, // errorLabel,1436 );1437 return this.getCollectionObject(this.helper.util.extractCollectionIdFromCreationResult(creationResult));1438 }14391440 getCollectionObject(_collectionId: number): any {1441 return null;1442 }14431444 getTokenObject(_collectionId: number, _tokenId: number): any {1445 return null;1446 }14471448 /**1449 * Tells whether the given `owner` approves the `operator`.1450 * @param collectionId ID of collection1451 * @param owner owner address1452 * @param operator operator addrees1453 * @returns true if operator is enabled1454 */1455 async allowanceForAll(collectionId: number, owner: ICrossAccountId, operator: ICrossAccountId): Promise<boolean> {1456 return (await this.helper.callRpc('api.rpc.unique.allowanceForAll', [collectionId, owner, operator])).toJSON();1457 }14581459 /** Sets or unsets the approval of a given operator.1460 * The `operator` is allowed to transfer all tokens of the `caller` on their behalf.1461 * @param operator Operator1462 * @param approved Should operator status be granted or revoked?1463 * @returns ```true``` if extrinsic success, otherwise ```false```1464 */1465 async setAllowanceForAll(signer: TSigner, collectionId: number, operator: ICrossAccountId, approved: boolean): Promise<boolean> {1466 const result = await this.helper.executeExtrinsic(1467 signer,1468 'api.tx.unique.setAllowanceForAll', [collectionId, operator, approved],1469 true,1470 );1471 return this.helper.util.findCollectionInEvents(result.result.events, collectionId, 'common', 'ApprovedForAll');1472 }1473}147414751476class NFTGroup extends NFTnRFT {1477 /**1478 * Get collection object1479 * @param collectionId ID of collection1480 * @example getCollectionObject(2);1481 * @returns instance of UniqueNFTCollection1482 */1483 getCollectionObject(collectionId: number): UniqueNFTCollection {1484 return new UniqueNFTCollection(collectionId, this.helper);1485 }14861487 /**1488 * Get token object1489 * @param collectionId ID of collection1490 * @param tokenId ID of token1491 * @example getTokenObject(10, 5);1492 * @returns instance of UniqueNFTToken1493 */1494 getTokenObject(collectionId: number, tokenId: number): UniqueNFToken {1495 return new UniqueNFToken(tokenId, this.getCollectionObject(collectionId));1496 }14971498 /**1499 * Get token's owner1500 * @param collectionId ID of collection1501 * @param tokenId ID of token1502 * @param blockHashAt optionally query the data at the block with this hash1503 * @example getTokenOwner(10, 5);1504 * @returns Address in CrossAccountId format, e.g. {Substrate: "5DnSF6RRjwteE3BrCj..."}1505 */1506 async getTokenOwner(collectionId: number, tokenId: number, blockHashAt?: string): Promise<CrossAccountId> {1507 let owner;1508 if (typeof blockHashAt === 'undefined') {1509 owner = await this.helper.callRpc('api.rpc.unique.tokenOwner', [collectionId, tokenId]);1510 } else {1511 owner = await this.helper.callRpc('api.rpc.unique.tokenOwner', [collectionId, tokenId, blockHashAt]);1512 }1513 return CrossAccountId.fromLowerCaseKeys(owner.toJSON());1514 }15151516 /**1517 * Is token approved to transfer1518 * @param collectionId ID of collection1519 * @param tokenId ID of token1520 * @param toAccountObj address to be approved1521 * @returns ```true``` if extrinsic success, otherwise ```false```1522 */1523 async isTokenApproved(collectionId: number, tokenId: number, toAccountObj: ICrossAccountId): Promise<boolean> {1524 return (await this.getTokenApprovedPieces(collectionId, tokenId, toAccountObj, await this.getTokenOwner(collectionId, tokenId))) === 1n;1525 }15261527 /**1528 * Changes the owner of the token.1529 *1530 * @param signer keyring of signer1531 * @param collectionId ID of collection1532 * @param tokenId ID of token1533 * @param addressObj address of a new owner1534 * @example transferToken(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."})1535 * @returns ```true``` if extrinsic success, otherwise ```false```1536 */1537 async transferToken(signer: TSigner, collectionId: number, tokenId: number, addressObj: ICrossAccountId): Promise<boolean> {1538 return await super.transferToken(signer, collectionId, tokenId, addressObj, 1n);1539 }15401541 /**1542 *1543 * Change ownership of a NFT on behalf of the owner.1544 *1545 * @param signer keyring of signer1546 * @param collectionId ID of collection1547 * @param tokenId ID of token1548 * @param fromAddressObj address on behalf of which the token will be sent1549 * @param toAddressObj new token owner1550 * @example transferTokenFrom(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."}, {Ethereum: "0x9F0583DbB85..."})1551 * @returns ```true``` if extrinsic success, otherwise ```false```1552 */1553 async transferTokenFrom(signer: TSigner, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId): Promise<boolean> {1554 return await super.transferTokenFrom(signer, collectionId, tokenId, fromAddressObj, toAddressObj, 1n);1555 }15561557 /**1558 * Recursively find the address that owns the token1559 * @param collectionId ID of collection1560 * @param tokenId ID of token1561 * @param blockHashAt1562 * @example getTokenTopmostOwner(10, 5);1563 * @returns address in CrossAccountId format, e.g. {Substrate: "5DyN4Y92vZCjv38fg..."}1564 */1565 async getTokenTopmostOwner(collectionId: number, tokenId: number, blockHashAt?: string): Promise<CrossAccountId | null> {1566 let owner;1567 if (typeof blockHashAt === 'undefined') {1568 owner = await this.helper.callRpc('api.rpc.unique.topmostTokenOwner', [collectionId, tokenId]);1569 } else {1570 owner = await this.helper.callRpc('api.rpc.unique.topmostTokenOwner', [collectionId, tokenId, blockHashAt]);1571 }15721573 if (owner === null) return null;15741575 return owner.toHuman();1576 }15771578 /**1579 * Get tokens nested in the provided token1580 * @param collectionId ID of collection1581 * @param tokenId ID of token1582 * @param blockHashAt optionally query the data at the block with this hash1583 * @example getTokenChildren(10, 5);1584 * @returns tokens whose depth of nesting is <= 51585 */1586 async getTokenChildren(collectionId: number, tokenId: number, blockHashAt?: string): Promise<IToken[]> {1587 let children;1588 if(typeof blockHashAt === 'undefined') {1589 children = await this.helper.callRpc('api.rpc.unique.tokenChildren', [collectionId, tokenId]);1590 } else {1591 children = await this.helper.callRpc('api.rpc.unique.tokenChildren', [collectionId, tokenId, blockHashAt]);1592 }15931594 return children.toJSON().map((x: any) => {1595 return {collectionId: x.collection, tokenId: x.token};1596 });1597 }15981599 /**1600 * Nest one token into another1601 * @param signer keyring of signer1602 * @param tokenObj token to be nested1603 * @param rootTokenObj token to be parent1604 * @example nestToken(aliceKeyring, {collectionId: 10, tokenId: 5}, {collectionId: 10, tokenId: 4});1605 * @returns ```true``` if extrinsic success, otherwise ```false```1606 */1607 async nestToken(signer: TSigner, tokenObj: IToken, rootTokenObj: IToken): Promise<boolean> {1608 const rootTokenAddress = this.helper.util.getTokenAccount(rootTokenObj);1609 const result = await this.transferToken(signer, tokenObj.collectionId, tokenObj.tokenId, rootTokenAddress);1610 if(!result) {1611 throw Error('Unable to nest token!');1612 }1613 return result;1614 }16151616 /**1617 * Remove token from nested state1618 * @param signer keyring of signer1619 * @param tokenObj token to unnest1620 * @param rootTokenObj parent of a token1621 * @param toAddressObj address of a new token owner1622 * @example unnestToken(aliceKeyring, {collectionId: 10, tokenId: 5}, {collectionId: 10, tokenId: 4}, {Substrate: "5DyN4Y92vZCjv38fg..."});1623 * @returns ```true``` if extrinsic success, otherwise ```false```1624 */1625 async unnestToken(signer: TSigner, tokenObj: IToken, rootTokenObj: IToken, toAddressObj: ICrossAccountId): Promise<boolean> {1626 const rootTokenAddress = this.helper.util.getTokenAccount(rootTokenObj);1627 const result = await this.transferTokenFrom(signer, tokenObj.collectionId, tokenObj.tokenId, rootTokenAddress, toAddressObj);1628 if(!result) {1629 throw Error('Unable to unnest token!');1630 }1631 return result;1632 }16331634 /**1635 * Mint new collection1636 * @param signer keyring of signer1637 * @param collectionOptions Collection options1638 * @example1639 * mintCollection(aliceKeyring, {1640 * name: 'New',1641 * description: 'New collection',1642 * tokenPrefix: 'NEW',1643 * })1644 * @returns object of the created collection1645 */1646 async mintCollection(signer: TSigner, collectionOptions: ICollectionCreationOptions = {}): Promise<UniqueNFTCollection> {1647 return await super.mintCollection(signer, collectionOptions, 'NFT') as UniqueNFTCollection;1648 }16491650 /**1651 * Mint new token1652 * @param signer keyring of signer1653 * @param data token data1654 * @returns created token object1655 */1656 async mintToken(signer: TSigner, data: { collectionId: number; owner: ICrossAccountId | string; properties?: IProperty[]; }): Promise<UniqueNFToken> {1657 const creationResult = await this.helper.executeExtrinsic(1658 signer,1659 'api.tx.unique.createItem', [data.collectionId, (typeof data.owner === 'string') ? {Substrate: data.owner} : data.owner, {1660 nft: {1661 properties: data.properties,1662 },1663 }],1664 true,1665 );1666 const createdTokens = this.helper.util.extractTokensFromCreationResult(creationResult);1667 if (createdTokens.tokens.length > 1) throw Error('Minted multiple tokens');1668 if (createdTokens.tokens.length < 1) throw Error('No tokens minted');1669 return this.getTokenObject(data.collectionId, createdTokens.tokens[0].tokenId);1670 }16711672 /**1673 * Mint multiple NFT tokens1674 * @param signer keyring of signer1675 * @param collectionId ID of collection1676 * @param tokens array of tokens with owner and properties1677 * @example1678 * mintMultipleTokens(aliceKeyring, 10, [{1679 * owner: {Substrate: "5DyN4Y92vZCjv38fg..."},1680 * properties: [{key: "gender", value: "male"},{key: "age", value: "45"}],1681 * },{1682 * owner: {Ethereum: "0x9F0583DbB855d..."},1683 * properties: [{key: "gender", value: "female"},{key: "age", value: "22"}],1684 * }]);1685 * @returns ```true``` if extrinsic success, otherwise ```false```1686 */1687 async mintMultipleTokens(signer: TSigner, collectionId: number, tokens: {owner: ICrossAccountId, properties?: IProperty[]}[]): Promise<UniqueNFToken[]> {1688 const creationResult = await this.helper.executeExtrinsic(1689 signer,1690 'api.tx.unique.createMultipleItemsEx', [collectionId, {NFT: tokens}],1691 true,1692 );1693 const collection = this.getCollectionObject(collectionId);1694 return this.helper.util.extractTokensFromCreationResult(creationResult).tokens.map((x: IToken) => collection.getTokenObject(x.tokenId));1695 }16961697 /**1698 * Mint multiple NFT tokens with one owner1699 * @param signer keyring of signer1700 * @param collectionId ID of collection1701 * @param owner tokens owner1702 * @param tokens array of tokens with owner and properties1703 * @example1704 * mintMultipleTokensWithOneOwner(aliceKeyring, 10, "5DyN4Y92vZCjv38fg...", [{1705 * properties: [{1706 * key: "gender",1707 * value: "female",1708 * },{1709 * key: "age",1710 * value: "33",1711 * }],1712 * }]);1713 * @returns array of newly created tokens1714 */1715 async mintMultipleTokensWithOneOwner(signer: TSigner, collectionId: number, owner: ICrossAccountId, tokens: {properties?: IProperty[]}[]): Promise<UniqueNFToken[]> {1716 const rawTokens = [];1717 for (const token of tokens) {1718 const raw = {NFT: {properties: token.properties}};1719 rawTokens.push(raw);1720 }1721 const creationResult = await this.helper.executeExtrinsic(1722 signer,1723 'api.tx.unique.createMultipleItems', [collectionId, owner, rawTokens],1724 true,1725 );1726 const collection = this.getCollectionObject(collectionId);1727 return this.helper.util.extractTokensFromCreationResult(creationResult).tokens.map((x: IToken) => collection.getTokenObject(x.tokenId));1728 }17291730 /**1731 * Set, change, or remove approved address to transfer the ownership of the NFT.1732 *1733 * @param signer keyring of signer1734 * @param collectionId ID of collection1735 * @param tokenId ID of token1736 * @param toAddressObj address to approve1737 * @example approveToken(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."})1738 * @returns ```true``` if extrinsic success, otherwise ```false```1739 */1740 approveToken(signer: IKeyringPair, collectionId: number, tokenId: number, toAddressObj: ICrossAccountId) {1741 return super.approveToken(signer, collectionId, tokenId, toAddressObj, 1n);1742 }1743}174417451746class RFTGroup extends NFTnRFT {1747 /**1748 * Get collection object1749 * @param collectionId ID of collection1750 * @example getCollectionObject(2);1751 * @returns instance of UniqueRFTCollection1752 */1753 getCollectionObject(collectionId: number): UniqueRFTCollection {1754 return new UniqueRFTCollection(collectionId, this.helper);1755 }17561757 /**1758 * Get token object1759 * @param collectionId ID of collection1760 * @param tokenId ID of token1761 * @example getTokenObject(10, 5);1762 * @returns instance of UniqueNFTToken1763 */1764 getTokenObject(collectionId: number, tokenId: number): UniqueRFToken {1765 return new UniqueRFToken(tokenId, this.getCollectionObject(collectionId));1766 }17671768 /**1769 * Get top 10 token owners with the largest number of pieces1770 * @param collectionId ID of collection1771 * @param tokenId ID of token1772 * @example getTokenTop10Owners(10, 5);1773 * @returns array of top 10 owners1774 */1775 async getTokenTop10Owners(collectionId: number, tokenId: number): Promise<CrossAccountId[]> {1776 return (await this.helper.callRpc('api.rpc.unique.tokenOwners', [collectionId, tokenId])).toJSON().map(CrossAccountId.fromLowerCaseKeys);1777 }17781779 /**1780 * Get number of pieces owned by address1781 * @param collectionId ID of collection1782 * @param tokenId ID of token1783 * @param addressObj address token owner1784 * @example getTokenBalance(10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."});1785 * @returns number of pieces ownerd by address1786 */1787 async getTokenBalance(collectionId: number, tokenId: number, addressObj: ICrossAccountId): Promise<bigint> {1788 return (await this.helper.callRpc('api.rpc.unique.balance', [collectionId, addressObj, tokenId])).toBigInt();1789 }17901791 /**1792 * Transfer pieces of token to another address1793 * @param signer keyring of signer1794 * @param collectionId ID of collection1795 * @param tokenId ID of token1796 * @param addressObj address of a new owner1797 * @param amount number of pieces to be transfered1798 * @example transferTokenFrom(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."}, 2000n)1799 * @returns ```true``` if extrinsic success, otherwise ```false```1800 */1801 async transferToken(signer: TSigner, collectionId: number, tokenId: number, addressObj: ICrossAccountId, amount=1n): Promise<boolean> {1802 return await super.transferToken(signer, collectionId, tokenId, addressObj, amount);1803 }18041805 /**1806 * Change ownership of some pieces of RFT on behalf of the owner.1807 * @param signer keyring of signer1808 * @param collectionId ID of collection1809 * @param tokenId ID of token1810 * @param fromAddressObj address on behalf of which the token will be sent1811 * @param toAddressObj new token owner1812 * @param amount number of pieces to be transfered1813 * @example transferTokenFrom(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."}, {Substrate: "5DfhbVfww7ThF8q6f3i..."}, 2000n)1814 * @returns ```true``` if extrinsic success, otherwise ```false```1815 */1816 async transferTokenFrom(signer: TSigner, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId, amount=1n): Promise<boolean> {1817 return await super.transferTokenFrom(signer, collectionId, tokenId, fromAddressObj, toAddressObj, amount);1818 }18191820 /**1821 * Mint new collection1822 * @param signer keyring of signer1823 * @param collectionOptions Collection options1824 * @example1825 * mintCollection(aliceKeyring, {1826 * name: 'New',1827 * description: 'New collection',1828 * tokenPrefix: 'NEW',1829 * })1830 * @returns object of the created collection1831 */1832 async mintCollection(signer: TSigner, collectionOptions: ICollectionCreationOptions = {}): Promise<UniqueRFTCollection> {1833 return await super.mintCollection(signer, collectionOptions, 'RFT') as UniqueRFTCollection;1834 }18351836 /**1837 * Mint new token1838 * @param signer keyring of signer1839 * @param data token data1840 * @example mintToken(aliceKeyring, {collectionId: 10, owner: {Substrate: '5GHoZe9c73RYbVzq...'}, pieces: 10000n});1841 * @returns created token object1842 */1843 async mintToken(signer: TSigner, data: { collectionId: number; owner: ICrossAccountId | string; pieces: bigint; properties?: IProperty[]; }): Promise<UniqueRFToken> {1844 const creationResult = await this.helper.executeExtrinsic(1845 signer,1846 'api.tx.unique.createItem', [data.collectionId, (typeof data.owner === 'string') ? {Substrate: data.owner} : data.owner, {1847 refungible: {1848 pieces: data.pieces,1849 properties: data.properties,1850 },1851 }],1852 true,1853 );1854 const createdTokens = this.helper.util.extractTokensFromCreationResult(creationResult);1855 if (createdTokens.tokens.length > 1) throw Error('Minted multiple tokens');1856 if (createdTokens.tokens.length < 1) throw Error('No tokens minted');1857 return this.getTokenObject(data.collectionId, createdTokens.tokens[0].tokenId);1858 }18591860 async mintMultipleTokens(signer: TSigner, collectionId: number, tokens: {owner: ICrossAccountId, pieces: bigint, properties?: IProperty[]}[]): Promise<UniqueRFToken[]> {1861 throw Error('Not implemented');1862 const creationResult = await this.helper.executeExtrinsic(1863 signer,1864 'api.tx.unique.createMultipleItemsEx', [collectionId, {RefungibleMultipleOwners: tokens}],1865 true, // `Unable to mint RFT tokens for ${label}`,1866 );1867 const collection = this.getCollectionObject(collectionId);1868 return this.helper.util.extractTokensFromCreationResult(creationResult).tokens.map((x: IToken) => collection.getTokenObject(x.tokenId));1869 }18701871 /**1872 * Mint multiple RFT tokens with one owner1873 * @param signer keyring of signer1874 * @param collectionId ID of collection1875 * @param owner tokens owner1876 * @param tokens array of tokens with properties and pieces1877 * @example mintMultipleTokensWithOneOwner(aliceKeyring, 10, {Substrate: "5GHoZe9c73RYbVzq..."}, [{pieces: 100000n, properties: [{key: "gender", value: "male"}]}]);1878 * @returns array of newly created RFT tokens1879 */1880 async mintMultipleTokensWithOneOwner(signer: TSigner, collectionId: number, owner: ICrossAccountId, tokens: {pieces: bigint, properties?: IProperty[]}[]): Promise<UniqueRFToken[]> {1881 const rawTokens = [];1882 for (const token of tokens) {1883 const raw = {ReFungible: {pieces: token.pieces, properties: token.properties}};1884 rawTokens.push(raw);1885 }1886 const creationResult = await this.helper.executeExtrinsic(1887 signer,1888 'api.tx.unique.createMultipleItems', [collectionId, owner, rawTokens],1889 true,1890 );1891 const collection = this.getCollectionObject(collectionId);1892 return this.helper.util.extractTokensFromCreationResult(creationResult).tokens.map((x: IToken) => collection.getTokenObject(x.tokenId));1893 }18941895 /**1896 * Destroys a concrete instance of RFT.1897 * @param signer keyring of signer1898 * @param collectionId ID of collection1899 * @param tokenId ID of token1900 * @param amount number of pieces to be burnt1901 * @example burnToken(aliceKeyring, 10, 5);1902 * @returns ```true``` if the extrinsic is successful, otherwise ```false```1903 */1904 async burnToken(signer: IKeyringPair, collectionId: number, tokenId: number, amount=1n): Promise<boolean> {1905 return await super.burnToken(signer, collectionId, tokenId, amount);1906 }19071908 /**1909 * Destroys a concrete instance of RFT on behalf of the owner.1910 * @param signer keyring of signer1911 * @param collectionId ID of collection1912 * @param tokenId ID of token1913 * @param fromAddressObj address on behalf of which the token will be burnt1914 * @param amount number of pieces to be burnt1915 * @example burnTokenFrom(aliceKeyring, 10, 5, {Substrate: "5DyN4Y92vZCjv38fg..."}, 2n)1916 * @returns ```true``` if extrinsic success, otherwise ```false```1917 */1918 async burnTokenFrom(signer: IKeyringPair, collectionId: number, tokenId: number, fromAddressObj: ICrossAccountId, amount=1n): Promise<boolean> {1919 return await super.burnTokenFrom(signer, collectionId, tokenId, fromAddressObj, amount);1920 }19211922 /**1923 * Set, change, or remove approved address to transfer the ownership of the RFT.1924 *1925 * @param signer keyring of signer1926 * @param collectionId ID of collection1927 * @param tokenId ID of token1928 * @param toAddressObj address to approve1929 * @param amount number of pieces to be approved1930 * @example approveToken(aliceKeyring, 10, 5, {Substrate: "5GHoZe9c73RYbVzq..."}, "", 10000n);1931 * @returns true if the token success, otherwise false1932 */1933 approveToken(signer: IKeyringPair, collectionId: number, tokenId: number, toAddressObj: ICrossAccountId, amount=1n) {1934 return super.approveToken(signer, collectionId, tokenId, toAddressObj, amount);1935 }19361937 /**1938 * Get total number of pieces1939 * @param collectionId ID of collection1940 * @param tokenId ID of token1941 * @example getTokenTotalPieces(10, 5);1942 * @returns number of pieces1943 */1944 async getTokenTotalPieces(collectionId: number, tokenId: number): Promise<bigint> {1945 return (await this.helper.callRpc('api.rpc.unique.totalPieces', [collectionId, tokenId])).unwrap().toBigInt();1946 }19471948 /**1949 * Change number of token pieces. Signer must be the owner of all token pieces.1950 * @param signer keyring of signer1951 * @param collectionId ID of collection1952 * @param tokenId ID of token1953 * @param amount new number of pieces1954 * @example repartitionToken(aliceKeyring, 10, 5, 12345n);1955 * @returns true if the repartion was success, otherwise false1956 */1957 async repartitionToken(signer: TSigner, collectionId: number, tokenId: number, amount: bigint): Promise<boolean> {1958 const currentAmount = await this.getTokenTotalPieces(collectionId, tokenId);1959 const repartitionResult = await this.helper.executeExtrinsic(1960 signer,1961 'api.tx.unique.repartition', [collectionId, tokenId, amount],1962 true,1963 );1964 if(currentAmount < amount) return this.helper.util.findCollectionInEvents(repartitionResult.result.events, collectionId, 'common', 'ItemCreated');1965 return this.helper.util.findCollectionInEvents(repartitionResult.result.events, collectionId, 'common', 'ItemDestroyed');1966 }1967}196819691970class FTGroup extends CollectionGroup {1971 /**1972 * Get collection object1973 * @param collectionId ID of collection1974 * @example getCollectionObject(2);1975 * @returns instance of UniqueFTCollection1976 */1977 getCollectionObject(collectionId: number): UniqueFTCollection {1978 return new UniqueFTCollection(collectionId, this.helper);1979 }19801981 /**1982 * Mint new fungible collection1983 * @param signer keyring of signer1984 * @param collectionOptions Collection options1985 * @param decimalPoints number of token decimals1986 * @example1987 * mintCollection(aliceKeyring, {1988 * name: 'New',1989 * description: 'New collection',1990 * tokenPrefix: 'NEW',1991 * }, 18)1992 * @returns newly created fungible collection1993 */1994 async mintCollection(signer: TSigner, collectionOptions: ICollectionCreationOptions = {}, decimalPoints = 0): Promise<UniqueFTCollection> {1995 collectionOptions = JSON.parse(JSON.stringify(collectionOptions)) as ICollectionCreationOptions; // Clone object1996 if(collectionOptions.tokenPropertyPermissions) throw Error('Fungible collections has no tokenPropertyPermissions');1997 collectionOptions.mode = {fungible: decimalPoints};1998 for (const key of ['name', 'description', 'tokenPrefix']) {1999 if (typeof collectionOptions[key as 'name' | 'description' | 'tokenPrefix'] === 'string') collectionOptions[key as 'name' | 'description' | 'tokenPrefix'] = this.helper.util.str2vec(collectionOptions[key as 'name' | 'description' | 'tokenPrefix'] as string);2000 }2001 const creationResult = await this.helper.executeExtrinsic(2002 signer,2003 'api.tx.unique.createCollectionEx', [collectionOptions],2004 true,2005 );2006 return this.getCollectionObject(this.helper.util.extractCollectionIdFromCreationResult(creationResult));2007 }20082009 /**2010 * Mint tokens2011 * @param signer keyring of signer2012 * @param collectionId ID of collection2013 * @param owner address owner of new tokens2014 * @param amount amount of tokens to be meanted2015 * @example mintTokens(aliceKeyring, 10, {Substrate: "5GHoZe9c73RYbVzq"}, 1000n);2016 * @returns ```true``` if extrinsic success, otherwise ```false```2017 */2018 async mintTokens(signer: TSigner, collectionId: number, amount: bigint, owner: ICrossAccountId | string): Promise<boolean> {2019 const creationResult = await this.helper.executeExtrinsic(2020 signer,2021 'api.tx.unique.createItem', [collectionId, (typeof owner === 'string') ? {Substrate: owner} : owner, {2022 fungible: {2023 value: amount,2024 },2025 }],2026 true, // `Unable to mint fungible tokens for ${label}`,2027 );2028 return this.helper.util.findCollectionInEvents(creationResult.result.events, collectionId, 'common', 'ItemCreated');2029 }20302031 /**2032 * Mint multiple Fungible tokens with one owner2033 * @param signer keyring of signer2034 * @param collectionId ID of collection2035 * @param owner tokens owner2036 * @param tokens array of tokens with properties and pieces2037 * @returns ```true``` if extrinsic success, otherwise ```false```2038 */2039 async mintMultipleTokensWithOneOwner(signer: TSigner, collectionId: number, tokens: {value: bigint}[], owner: ICrossAccountId): Promise<boolean> {2040 const rawTokens = [];2041 for (const token of tokens) {2042 const raw = {Fungible: {Value: token.value}};2043 rawTokens.push(raw);2044 }2045 const creationResult = await this.helper.executeExtrinsic(2046 signer,2047 'api.tx.unique.createMultipleItems', [collectionId, owner, rawTokens],2048 true,2049 );2050 return this.helper.util.findCollectionInEvents(creationResult.result.events, collectionId, 'common', 'ItemCreated');2051 }20522053 /**2054 * Get the top 10 owners with the largest balance for the Fungible collection2055 * @param collectionId ID of collection2056 * @example getTop10Owners(10);2057 * @returns array of ```ICrossAccountId```2058 */2059 async getTop10Owners(collectionId: number): Promise<CrossAccountId[]> {2060 return (await this.helper.callRpc('api.rpc.unique.tokenOwners', [collectionId, 0])).toJSON().map(CrossAccountId.fromLowerCaseKeys);2061 }20622063 /**2064 * Get account balance2065 * @param collectionId ID of collection2066 * @param addressObj address of owner2067 * @example getBalance(10, {Substrate: "5GHoZe9c73RYbVzq..."})2068 * @returns amount of fungible tokens owned by address2069 */2070 async getBalance(collectionId: number, addressObj: ICrossAccountId): Promise<bigint> {2071 return (await this.helper.callRpc('api.rpc.unique.balance', [collectionId, addressObj, 0])).toBigInt();2072 }20732074 /**2075 * Transfer tokens to address2076 * @param signer keyring of signer2077 * @param collectionId ID of collection2078 * @param toAddressObj address recipient2079 * @param amount amount of tokens to be sent2080 * @example transfer(aliceKeyring, 10, {Substrate: "5GHoZe9c73RYbVzq..."}, 1000n);2081 * @returns ```true``` if extrinsic success, otherwise ```false```2082 */2083 async transfer(signer: TSigner, collectionId: number, toAddressObj: ICrossAccountId, amount=1n) {2084 return await super.transferToken(signer, collectionId, 0, toAddressObj, amount);2085 }20862087 /**2088 * Transfer some tokens on behalf of the owner.2089 * @param signer keyring of signer2090 * @param collectionId ID of collection2091 * @param fromAddressObj address on behalf of which tokens will be sent2092 * @param toAddressObj address where token to be sent2093 * @param amount number of tokens to be sent2094 * @example transferFrom(aliceKeyring, 10, {Substrate: "5GHoZe9c73RYbVzq..."}, {Substrate: "5DfhbVfww7ThF8q6f3ij..."}, 10000n);2095 * @returns ```true``` if extrinsic success, otherwise ```false```2096 */2097 async transferFrom(signer: TSigner, collectionId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId, amount=1n) {2098 return await super.transferTokenFrom(signer, collectionId, 0, fromAddressObj, toAddressObj, amount);2099 }21002101 /**2102 * Destroy some amount of tokens2103 * @param signer keyring of signer2104 * @param collectionId ID of collection2105 * @param amount amount of tokens to be destroyed2106 * @example burnTokens(aliceKeyring, 10, 1000n);2107 * @returns ```true``` if extrinsic success, otherwise ```false```2108 */2109 async burnTokens(signer: IKeyringPair, collectionId: number, amount=1n): Promise<boolean> {2110 return await super.burnToken(signer, collectionId, 0, amount);2111 }21122113 /**2114 * Burn some tokens on behalf of the owner.2115 * @param signer keyring of signer2116 * @param collectionId ID of collection2117 * @param fromAddressObj address on behalf of which tokens will be burnt2118 * @param amount amount of tokens to be burnt2119 * @example burnTokensFrom(aliceKeyring, 10, {Substrate: "5GHoZe9c73RYbVzq..."}, 1000n);2120 * @returns ```true``` if extrinsic success, otherwise ```false```2121 */2122 async burnTokensFrom(signer: IKeyringPair, collectionId: number, fromAddressObj: ICrossAccountId, amount=1n): Promise<boolean> {2123 return await super.burnTokenFrom(signer, collectionId, 0, fromAddressObj, amount);2124 }21252126 /**2127 * Get total collection supply2128 * @param collectionId2129 * @returns2130 */2131 async getTotalPieces(collectionId: number): Promise<bigint> {2132 return (await this.helper.callRpc('api.rpc.unique.totalPieces', [collectionId, 0])).unwrap().toBigInt();2133 }21342135 /**2136 * Set, change, or remove approved address to transfer tokens.2137 *2138 * @param signer keyring of signer2139 * @param collectionId ID of collection2140 * @param toAddressObj address to be approved2141 * @param amount amount of tokens to be approved2142 * @example approveTokens(aliceKeyring, 10, {Substrate: "5GHoZe9c73RYbVzq..."}, 1000n)2143 * @returns ```true``` if extrinsic success, otherwise ```false```2144 */2145 approveTokens(signer: IKeyringPair, collectionId: number, toAddressObj: ICrossAccountId, amount=1n) {2146 return super.approveToken(signer, collectionId, 0, toAddressObj, amount);2147 }21482149 /**2150 * Get amount of fungible tokens approved to transfer2151 * @param collectionId ID of collection2152 * @param fromAddressObj owner of tokens2153 * @param toAddressObj the address approved for the transfer of tokens on behalf of the owner2154 * @returns number of tokens approved for the transfer2155 */2156 getApprovedTokens(collectionId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId) {2157 return super.getTokenApprovedPieces(collectionId, 0, toAddressObj, fromAddressObj);2158 }2159}216021612162class ChainGroup extends HelperGroup<ChainHelperBase> {2163 /**2164 * Get system properties of a chain2165 * @example getChainProperties();2166 * @returns ss58Format, token decimals, and token symbol2167 */2168 getChainProperties(): IChainProperties {2169 const properties = (this.helper.getApi() as any).registry.getChainProperties().toJSON();2170 return {2171 ss58Format: properties.ss58Format.toJSON(),2172 tokenDecimals: properties.tokenDecimals.toJSON(),2173 tokenSymbol: properties.tokenSymbol.toJSON(),2174 };2175 }21762177 /**2178 * Get chain header2179 * @example getLatestBlockNumber();2180 * @returns the number of the last block2181 */2182 async getLatestBlockNumber(): Promise<number> {2183 return (await this.helper.callRpc('api.rpc.chain.getHeader')).number.toNumber();2184 }21852186 /**2187 * Get block hash by block number2188 * @param blockNumber number of block2189 * @example getBlockHashByNumber(12345);2190 * @returns hash of a block2191 */2192 async getBlockHashByNumber(blockNumber: number): Promise<string | null> {2193 const blockHash = (await this.helper.callRpc('api.rpc.chain.getBlockHash', [blockNumber])).toJSON();2194 if(blockHash === '0x0000000000000000000000000000000000000000000000000000000000000000') return null;2195 return blockHash;2196 }21972198 // TODO add docs2199 async getBlock(blockHashOrNumber: string | number): Promise<IBlock | null> {2200 const blockHash = typeof blockHashOrNumber === 'string' ? blockHashOrNumber : await this.getBlockHashByNumber(blockHashOrNumber);2201 if (!blockHash) return null;2202 return (await this.helper.callRpc('api.rpc.chain.getBlock', [blockHash])).toHuman().block;2203 }22042205 /**2206 * Get account nonce2207 * @param address substrate address2208 * @example getNonce("5GrwvaEF5zXb26Fz...");2209 * @returns number, account's nonce2210 */2211 async getNonce(address: TSubstrateAccount): Promise<number> {2212 return (await this.helper.callRpc('api.query.system.account', [address])).nonce.toNumber();2213 }2214}22152216class SubstrateBalanceGroup<T extends ChainHelperBase> extends HelperGroup<T> {2217 /**2218 * Get substrate address balance2219 * @param address substrate address2220 * @example getSubstrate("5GrwvaEF5zXb26Fz...")2221 * @returns amount of tokens on address2222 */2223 async getSubstrate(address: TSubstrateAccount): Promise<bigint> {2224 return (await this.helper.callRpc('api.query.system.account', [address])).data.free.toBigInt();2225 }22262227 /**2228 * Transfer tokens to substrate address2229 * @param signer keyring of signer2230 * @param address substrate address of a recipient2231 * @param amount amount of tokens to be transfered2232 * @example transferToSubstrate(aliceKeyring, "5GrwvaEF5zXb26Fz...", 100_000_000_000n);2233 * @returns ```true``` if extrinsic success, otherwise ```false```2234 */2235 async transferToSubstrate(signer: TSigner, address: TSubstrateAccount, amount: bigint | string): Promise<boolean> {2236 const result = await this.helper.executeExtrinsic(signer, 'api.tx.balances.transfer', [address, amount], true/*, `Unable to transfer balance from ${this.helper.getSignerAddress(signer)} to ${address}`*/);22372238 let transfer = {from: null, to: null, amount: 0n} as any;2239 result.result.events.forEach(({event: {data, method, section}}) => {2240 if ((section === 'balances') && (method === 'Transfer')) {2241 transfer = {2242 from: this.helper.address.normalizeSubstrate(data[0]),2243 to: this.helper.address.normalizeSubstrate(data[1]),2244 amount: BigInt(data[2]),2245 };2246 }2247 });2248 const isSuccess = this.helper.address.normalizeSubstrate(typeof signer === 'string' ? signer : signer.address) === transfer.from2249 && this.helper.address.normalizeSubstrate(address) === transfer.to2250 && BigInt(amount) === transfer.amount;2251 return isSuccess;2252 }22532254 /**2255 * Get full substrate balance including free, miscFrozen, feeFrozen, and reserved2256 * @param address substrate address2257 * @returns2258 */2259 async getSubstrateFull(address: TSubstrateAccount): Promise<ISubstrateBalance> {2260 const accountInfo = (await this.helper.callRpc('api.query.system.account', [address])).data;2261 return {free: accountInfo.free.toBigInt(), miscFrozen: accountInfo.miscFrozen.toBigInt(), feeFrozen: accountInfo.feeFrozen.toBigInt(), reserved: accountInfo.reserved.toBigInt()};2262 }2263}22642265class EthereumBalanceGroup<T extends ChainHelperBase> extends HelperGroup<T> {2266 /**2267 * Get ethereum address balance2268 * @param address ethereum address2269 * @example getEthereum("0x9F0583DbB855d...")2270 * @returns amount of tokens on address2271 */2272 async getEthereum(address: TEthereumAccount): Promise<bigint> {2273 return (await this.helper.callRpc('api.rpc.eth.getBalance', [address])).toBigInt();2274 }22752276 /**2277 * Transfer tokens to address2278 * @param signer keyring of signer2279 * @param address Ethereum address of a recipient2280 * @param amount amount of tokens to be transfered2281 * @example transferToEthereum(alithKeyring, "0x9F0583DbB855d...", 100_000_000_000n);2282 * @returns ```true``` if extrinsic success, otherwise ```false```2283 */2284 async transferToEthereum(signer: TSigner, address: TEthereumAccount, amount: bigint | string): Promise<boolean> {2285 const result = await this.helper.executeExtrinsic(signer, 'api.tx.balances.transfer', [address, amount], true);22862287 let transfer = {from: null, to: null, amount: 0n} as any;2288 result.result.events.forEach(({event: {data, method, section}}) => {2289 if ((section === 'balances') && (method === 'Transfer')) {2290 transfer = {2291 from: data[0].toString(),2292 to: data[1].toString(),2293 amount: BigInt(data[2]),2294 };2295 }2296 });2297 const isSuccess = (typeof signer === 'string' ? signer : signer.address) === transfer.from2298 && address === transfer.to2299 && BigInt(amount) === transfer.amount;2300 return isSuccess;2301 }2302}23032304class BalanceGroup<T extends ChainHelperBase> extends HelperGroup<T> {2305 subBalanceGroup: SubstrateBalanceGroup<T>;2306 ethBalanceGroup: EthereumBalanceGroup<T>;23072308 constructor(helper: T) {2309 super(helper);2310 this.subBalanceGroup = new SubstrateBalanceGroup(helper);2311 this.ethBalanceGroup = new EthereumBalanceGroup(helper);2312 }23132314 getCollectionCreationPrice(): bigint {2315 return 2n * this.getOneTokenNominal();2316 }2317 /**2318 * Representation of the native token in the smallest unit - one OPAL (OPL), QUARTZ (QTZ), or UNIQUE (UNQ).2319 * @example getOneTokenNominal()2320 * @returns ```BigInt``` representation of the native token in the smallest unit, e.g. ```1_000_000_000_000_000_000n``` for QTZ.2321 */2322 getOneTokenNominal(): bigint {2323 const chainProperties = this.helper.chain.getChainProperties();2324 return 10n ** BigInt((chainProperties.tokenDecimals || [18])[0]);2325 }23262327 /**2328 * Get substrate address balance2329 * @param address substrate address2330 * @example getSubstrate("5GrwvaEF5zXb26Fz...")2331 * @returns amount of tokens on address2332 */2333 getSubstrate(address: TSubstrateAccount): Promise<bigint> {2334 return this.subBalanceGroup.getSubstrate(address);2335 }23362337 /**2338 * Get full substrate balance including free, miscFrozen, feeFrozen, and reserved2339 * @param address substrate address2340 * @returns2341 */2342 getSubstrateFull(address: TSubstrateAccount): Promise<ISubstrateBalance> {2343 return this.subBalanceGroup.getSubstrateFull(address);2344 }23452346 /**2347 * Get ethereum address balance2348 * @param address ethereum address2349 * @example getEthereum("0x9F0583DbB855d...")2350 * @returns amount of tokens on address2351 */2352 getEthereum(address: TEthereumAccount): Promise<bigint> {2353 return this.ethBalanceGroup.getEthereum(address);2354 }23552356 /**2357 * Transfer tokens to substrate address2358 * @param signer keyring of signer2359 * @param address substrate address of a recipient2360 * @param amount amount of tokens to be transfered2361 * @example transferToSubstrate(aliceKeyring, "5GrwvaEF5zXb26Fz...", 100_000_000_000n);2362 * @returns ```true``` if extrinsic success, otherwise ```false```2363 */2364 transferToSubstrate(signer: TSigner, address: TSubstrateAccount, amount: bigint | string): Promise<boolean> {2365 return this.subBalanceGroup.transferToSubstrate(signer, address, amount);2366 }23672368 async forceTransferToSubstrate(signer: TSigner, from: TSubstrateAccount, to: TSubstrateAccount, amount: bigint | string): Promise<boolean> {2369 const result = await this.helper.executeExtrinsic(signer, 'api.tx.balances.forceTransfer', [from, to, amount], true);23702371 let transfer = {from: null, to: null, amount: 0n} as any;2372 result.result.events.forEach(({event: {data, method, section}}) => {2373 if ((section === 'balances') && (method === 'Transfer')) {2374 transfer = {2375 from: this.helper.address.normalizeSubstrate(data[0]),2376 to: this.helper.address.normalizeSubstrate(data[1]),2377 amount: BigInt(data[2]),2378 };2379 }2380 });2381 let isSuccess = this.helper.address.normalizeSubstrate(from) === transfer.from;2382 isSuccess = isSuccess && this.helper.address.normalizeSubstrate(to) === transfer.to;2383 isSuccess = isSuccess && BigInt(amount) === transfer.amount;2384 return isSuccess;2385 }2386}23872388class AddressGroup extends HelperGroup<ChainHelperBase> {2389 /**2390 * Normalizes the address to the specified ss58 format, by default ```42```.2391 * @param address substrate address2392 * @param ss58Format format for address conversion, by default ```42```2393 * @example normalizeSubstrate("unjKJQJrRd238pkUZZvzDQrfKuM39zBSnQ5zjAGAGcdRhaJTx") // returns 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY2394 * @returns substrate address converted to normalized (i.e., starting with 5) or specified explicitly representation2395 */2396 normalizeSubstrate(address: TSubstrateAccount, ss58Format = 42): TSubstrateAccount {2397 return CrossAccountId.normalizeSubstrateAddress(address, ss58Format);2398 }23992400 /**2401 * Get address in the connected chain format2402 * @param address substrate address2403 * @example normalizeSubstrateToChainFormat("5GrwvaEF5zXb26Fz...") // returns unjKJQJrRd238pkUZZ... for Unique Network2404 * @returns address in chain format2405 */2406 normalizeSubstrateToChainFormat(address: TSubstrateAccount): TSubstrateAccount {2407 return this.normalizeSubstrate(address, this.helper.chain.getChainProperties().ss58Format);2408 }24092410 /**2411 * Get substrate mirror of an ethereum address2412 * @param ethAddress ethereum address2413 * @param toChainFormat false for normalized account2414 * @example ethToSubstrate('0x9F0583DbB855d...')2415 * @returns substrate mirror of a provided ethereum address2416 */2417 ethToSubstrate(ethAddress: TEthereumAccount, toChainFormat=false): TSubstrateAccount {2418 return CrossAccountId.translateEthToSub(ethAddress, toChainFormat ? this.helper.chain.getChainProperties().ss58Format : undefined);2419 }24202421 /**2422 * Get ethereum mirror of a substrate address2423 * @param subAddress substrate account2424 * @example substrateToEth("5DnSF6RRjwteE3BrC...")2425 * @returns ethereum mirror of a provided substrate address2426 */2427 substrateToEth(subAddress: TSubstrateAccount): TEthereumAccount {2428 return CrossAccountId.translateSubToEth(subAddress);2429 }24302431 /**2432 * Encode key to substrate address2433 * @param key key for encoding address2434 * @param ss58Format prefix for encoding to the address of the corresponding network2435 * @returns encoded substrate address2436 */2437 encodeSubstrateAddress (key: Uint8Array | string | bigint, ss58Format = 42): string {2438 const u8a :Uint8Array = typeof key === 'string'2439 ? hexToU8a(key)2440 : typeof key === 'bigint'2441 ? hexToU8a(key.toString(16))2442 : key;2443 2444 if (ss58Format < 0 || ss58Format > 16383 || [46, 47].includes(ss58Format)) {2445 throw new Error(`ss58Format is not valid, received ${typeofss58Format} "${ss58Format}"`);2446 }2447 2448 const allowedDecodedLengths = [1, 2, 4, 8, 32, 33];2449 if (!allowedDecodedLengths.includes(u8a.length)) {2450 throw new Error(`key length is not valid, received ${u8a.length}, valid values are ${allowedDecodedLengths.join(', ')}`);2451 }2452 2453 const u8aPrefix = ss58Format < 642454 ? new Uint8Array([ss58Format])2455 : new Uint8Array([2456 ((ss58Format & 0xfc) >> 2) | 0x40,2457 (ss58Format >> 8) | ((ss58Format & 0x03) << 6),2458 ]);24592460 const input = u8aConcat(u8aPrefix, u8a);2461 2462 return base58Encode(u8aConcat(2463 input,2464 blake2AsU8a(input).subarray(0, [32, 33].includes(u8a.length) ? 2 : 1),2465 ));2466 }24672468 /**2469 * Restore substrate address from bigint representation2470 * @param number decimal representation of substrate address2471 * @returns substrate address2472 */2473 restoreCrossAccountFromBigInt(number: bigint): TSubstrateAccount {2474 if (this.helper.api === null) {2475 throw 'Not connected';2476 }2477 const res = this.helper.api.registry.createType('AccountId', '0x' + number.toString(16).padStart(64, '0')).toJSON();2478 if (res === undefined || res === null) {2479 throw 'Restore address error';2480 }2481 return res.toString();2482 }24832484 /**2485 * Convert etherium cross account id to substrate cross account id2486 * @param ethCrossAccount etherium cross account2487 * @returns substrate cross account id2488 */2489 convertCrossAccountFromEthCrossAccount(ethCrossAccount: IEthCrossAccountId): ICrossAccountId {2490 if (ethCrossAccount.sub === '0') {2491 return {Ethereum: ethCrossAccount.eth.toLocaleLowerCase()};2492 }2493 2494 const ss58 = this.restoreCrossAccountFromBigInt(BigInt(ethCrossAccount.sub));2495 return {Substrate: ss58};2496 }24972498 paraSiblingSovereignAccount(paraid: number) {2499 // We are getting a *sibling* parachain sovereign account,2500 // so we need a sibling prefix: encoded(b"sibl") == 0x7369626c2501 const siblingPrefix = '0x7369626c';25022503 const encodedParaId = this.helper.getApi().createType('u32', paraid).toHex(true).substring(2);2504 const suffix = '000000000000000000000000000000000000000000000000';25052506 return siblingPrefix + encodedParaId + suffix;2507 }2508}25092510class StakingGroup extends HelperGroup<UniqueHelper> {2511 /**2512 * Stake tokens for App Promotion2513 * @param signer keyring of signer2514 * @param amountToStake amount of tokens to stake2515 * @param label extra label for log2516 * @returns2517 */2518 async stake(signer: TSigner, amountToStake: bigint, label?: string): Promise<boolean> {2519 if(typeof label === 'undefined') label = `${signer.address} amount: ${amountToStake}`;2520 const _stakeResult = await this.helper.executeExtrinsic(2521 signer, 'api.tx.appPromotion.stake',2522 [amountToStake], true,2523 );2524 // TODO extract info from stakeResult2525 return true;2526 }25272528 /**2529 * Unstake tokens for App Promotion2530 * @param signer keyring of signer2531 * @param amountToUnstake amount of tokens to unstake2532 * @param label extra label for log2533 * @returns block number where balances will be unlocked2534 */2535 async unstake(signer: TSigner, label?: string): Promise<number> {2536 if(typeof label === 'undefined') label = `${signer.address}`;2537 const _unstakeResult = await this.helper.executeExtrinsic(2538 signer, 'api.tx.appPromotion.unstake',2539 [], true,2540 );2541 // TODO extract block number fron events2542 return 1;2543 }25442545 /**2546 * Get total staked amount for address2547 * @param address substrate or ethereum address2548 * @returns total staked amount2549 */2550 async getTotalStaked(address?: ICrossAccountId): Promise<bigint> {2551 if (address) return (await this.helper.callRpc('api.rpc.appPromotion.totalStaked', [address])).toBigInt();2552 return (await this.helper.callRpc('api.rpc.appPromotion.totalStaked')).toBigInt();2553 }25542555 /**2556 * Get total staked per block2557 * @param address substrate or ethereum address2558 * @returns array of stakes. `block` – the number of the block in which the stake was made. `amount` - the number of tokens staked in the block2559 */2560 async getTotalStakedPerBlock(address: ICrossAccountId): Promise<IStakingInfo[]> {2561 const rawTotalStakerdPerBlock = await this.helper.callRpc('api.rpc.appPromotion.totalStakedPerBlock', [address]);2562 return rawTotalStakerdPerBlock.map(([block, amount]: any[]) => {2563 return {2564 block: block.toBigInt(),2565 amount: amount.toBigInt(),2566 };2567 });2568 }25692570 /**2571 * Get total pending unstake amount for address2572 * @param address substrate or ethereum address2573 * @returns total pending unstake amount2574 */2575 async getPendingUnstake(address: ICrossAccountId): Promise<bigint> {2576 return (await this.helper.callRpc('api.rpc.appPromotion.pendingUnstake', [address])).toBigInt();2577 }25782579 /**2580 * Get pending unstake amount per block for address2581 * @param address substrate or ethereum address2582 * @returns array of pending stakes. `block` – the number of the block in which the unstake was made. `amount` - the number of tokens unstaked in the block2583 */2584 async getPendingUnstakePerBlock(address: ICrossAccountId): Promise<IStakingInfo[]> {2585 const rawUnstakedPerBlock = await this.helper.callRpc('api.rpc.appPromotion.pendingUnstakePerBlock', [address]);2586 const result = rawUnstakedPerBlock.map(([block, amount]: any[]) => {2587 return {2588 block: block.toBigInt(),2589 amount: amount.toBigInt(),2590 };2591 });2592 return result;2593 }2594}25952596class SchedulerGroup extends HelperGroup<UniqueHelper> {2597 constructor(helper: UniqueHelper) {2598 super(helper);2599 }26002601 cancelScheduled(signer: TSigner, scheduledId: string) {2602 return this.helper.executeExtrinsic(2603 signer,2604 'api.tx.scheduler.cancelNamed',2605 [scheduledId],2606 true,2607 );2608 }26092610 changePriority(signer: TSigner, scheduledId: string, priority: number) {2611 return this.helper.executeExtrinsic(2612 signer,2613 'api.tx.scheduler.changeNamedPriority',2614 [scheduledId, priority],2615 true,2616 );2617 }26182619 scheduleAt<T extends UniqueHelper>(2620 executionBlockNumber: number,2621 options: ISchedulerOptions = {},2622 ) {2623 return this.schedule<T>('schedule', executionBlockNumber, options);2624 }26252626 scheduleAfter<T extends UniqueHelper>(2627 blocksBeforeExecution: number,2628 options: ISchedulerOptions = {},2629 ) {2630 return this.schedule<T>('scheduleAfter', blocksBeforeExecution, options);2631 }26322633 schedule<T extends UniqueHelper>(2634 scheduleFn: 'schedule' | 'scheduleAfter',2635 blocksNum: number,2636 options: ISchedulerOptions = {},2637 ) {2638 // eslint-disable-next-line @typescript-eslint/naming-convention2639 const ScheduledHelperType = ScheduledUniqueHelper(this.helper.helperBase);2640 return this.helper.clone(ScheduledHelperType, {2641 scheduleFn,2642 blocksNum,2643 options,2644 }) as T;2645 }2646}26472648class SessionGroup extends HelperGroup<ChainHelperBase> {2649 //todo:collator documentation2650 async getIndex(): Promise<number> {2651 return (await this.helper.callRpc('api.query.session.currentIndex')).toNumber();2652 }26532654 newSessions(sessionCount = 1, blockTimeout = 24000): Promise<void> {2655 return (this.helper as DevUniqueHelper).wait.newSessions(sessionCount, blockTimeout);2656 }26572658 setOwnKeys(signer: TSigner, key: string) {2659 return this.helper.executeExtrinsic(2660 signer,2661 'api.tx.session.setKeys', 2662 [key, '0x0'],2663 true,2664 );2665 }26662667 setOwnKeysFromAddress(signer: TSigner) {2668 return this.setOwnKeys(signer, '0x' + Buffer.from(signer.addressRaw).toString('hex'));2669 }2670}26712672class CollatorSelectionGroup extends HelperGroup<UniqueHelper> {2673 //todo:collator documentation2674 addInvulnerable(signer: TSigner, address: string) {2675 return this.helper.executeExtrinsic(signer, 'api.tx.collatorSelection.addInvulnerable', [address]);2676 }26772678 removeInvulnerable(signer: TSigner, address: string) {2679 return this.helper.executeExtrinsic(signer, 'api.tx.collatorSelection.removeInvulnerable', [address]);2680 }26812682 async getInvulnerables(): Promise<string[]> {2683 return (await this.helper.callRpc('api.query.collatorSelection.invulnerables')).map((x: any) => x.toHuman());2684 }26852686 setLicenseBond(signer: TSigner, amount: bigint) {2687 return this.helper.executeExtrinsic(signer, 'api.tx.collatorSelection.setLicenseBond', [amount]);2688 }26892690 async getLicenseBond(): Promise<bigint> {2691 return (await this.helper.callRpc('api.query.collatorSelection.licenseBond')).toBigInt();2692 }26932694 obtainLicense(signer: TSigner) {2695 return this.helper.executeExtrinsic(signer, 'api.tx.collatorSelection.getLicense', []);2696 }26972698 releaseLicense(signer: TSigner) {2699 return this.helper.executeExtrinsic(signer, 'api.tx.collatorSelection.releaseLicense', []);2700 }27012702 forceRevokeLicense(signer: TSigner, released: string) {2703 return this.helper.executeExtrinsic(signer, 'api.tx.collatorSelection.forceRevokeLicense', [released]);2704 }27052706 async hasLicense(address: string): Promise<bigint> {2707 return (await this.helper.callRpc('api.query.collatorSelection.licenses', [address])).toBigInt();2708 }27092710 onboard(signer: TSigner) {2711 return this.helper.executeExtrinsic(signer, 'api.tx.collatorSelection.onboard', []);2712 }27132714 offboard(signer: TSigner) {2715 return this.helper.executeExtrinsic(signer, 'api.tx.collatorSelection.offboard', []);2716 }27172718 async getCandidates(): Promise<string[]> {2719 return (await this.helper.callRpc('api.query.collatorSelection.candidates')).map((x: any) => x.toHuman());2720 }2721}27222723class ForeignAssetsGroup extends HelperGroup<UniqueHelper> {2724 async register(signer: TSigner, ownerAddress: TSubstrateAccount, location: any, metadata: IForeignAssetMetadata) {2725 await this.helper.executeExtrinsic(2726 signer,2727 'api.tx.foreignAssets.registerForeignAsset',2728 [ownerAddress, location, metadata],2729 true,2730 );2731 }27322733 async update(signer: TSigner, foreignAssetId: number, location: any, metadata: IForeignAssetMetadata) {2734 await this.helper.executeExtrinsic(2735 signer,2736 'api.tx.foreignAssets.updateForeignAsset',2737 [foreignAssetId, location, metadata],2738 true,2739 );2740 }2741}27422743class XcmGroup<T extends ChainHelperBase> extends HelperGroup<T> {2744 palletName: string;27452746 constructor(helper: T, palletName: string) {2747 super(helper);27482749 this.palletName = palletName;2750 }27512752 async limitedReserveTransferAssets(signer: TSigner, destination: any, beneficiary: any, assets: any, feeAssetItem: number, weightLimit: number) {2753 await this.helper.executeExtrinsic(signer, `api.tx.${this.palletName}.limitedReserveTransferAssets`, [destination, beneficiary, assets, feeAssetItem, {Limited: weightLimit}], true);2754 }2755}27562757class XTokensGroup<T extends ChainHelperBase> extends HelperGroup<T> {2758 async transfer(signer: TSigner, currencyId: any, amount: bigint, destination: any, destWeight: number) {2759 await this.helper.executeExtrinsic(signer, 'api.tx.xTokens.transfer', [currencyId, amount, destination, destWeight], true);2760 }27612762 async transferMultiasset(signer: TSigner, asset: any, destination: any, destWeight: number) {2763 await this.helper.executeExtrinsic(signer, 'api.tx.xTokens.transferMultiasset', [asset, destination, destWeight], true);2764 }27652766 async transferMulticurrencies(signer: TSigner, currencies: any[], feeItem: number, destLocation: any, destWeight: number) {2767 await this.helper.executeExtrinsic(signer, 'api.tx.xTokens.transferMulticurrencies', [currencies, feeItem, destLocation, destWeight], true);2768 }2769}27702771class TokensGroup<T extends ChainHelperBase> extends HelperGroup<T> {2772 async accounts(address: string, currencyId: any) {2773 const {free} = (await this.helper.callRpc('api.query.tokens.accounts', [address, currencyId])).toJSON() as any;2774 return BigInt(free);2775 }2776}27772778class AssetsGroup<T extends ChainHelperBase> extends HelperGroup<T> {2779 async create(signer: TSigner, assetId: number, admin: string, minimalBalance: bigint) {2780 await this.helper.executeExtrinsic(signer, 'api.tx.assets.create', [assetId, admin, minimalBalance], true);2781 }27822783 async setMetadata(signer: TSigner, assetId: number, name: string, symbol: string, decimals: number) {2784 await this.helper.executeExtrinsic(signer, 'api.tx.assets.setMetadata', [assetId, name, symbol, decimals], true);2785 }27862787 async mint(signer: TSigner, assetId: number, beneficiary: string, amount: bigint) {2788 await this.helper.executeExtrinsic(signer, 'api.tx.assets.mint', [assetId, beneficiary, amount], true);2789 }27902791 async account(assetId: string | number, address: string) {2792 const accountAsset = (2793 await this.helper.callRpc('api.query.assets.account', [assetId, address])2794 ).toJSON()! as any;27952796 if (accountAsset !== null) {2797 return BigInt(accountAsset['balance']);2798 } else {2799 return null;2800 }2801 }2802}28032804class AcalaAssetRegistryGroup extends HelperGroup<AcalaHelper> {2805 async registerForeignAsset(signer: TSigner, destination: any, metadata: AcalaAssetMetadata) {2806 await this.helper.executeExtrinsic(signer, 'api.tx.assetRegistry.registerForeignAsset', [destination, metadata], true);2807 }2808}28092810class MoonbeamAssetManagerGroup extends HelperGroup<MoonbeamHelper> {2811 makeRegisterForeignAssetProposal(assetInfo: MoonbeamAssetInfo) {2812 const apiPrefix = 'api.tx.assetManager.';28132814 const registerTx = this.helper.constructApiCall(2815 apiPrefix + 'registerForeignAsset',2816 [assetInfo.location, assetInfo.metadata, assetInfo.existentialDeposit, assetInfo.isSufficient],2817 );28182819 const setUnitsTx = this.helper.constructApiCall(2820 apiPrefix + 'setAssetUnitsPerSecond',2821 [assetInfo.location, assetInfo.unitsPerSecond, assetInfo.numAssetsWeightHint],2822 );28232824 const batchCall = this.helper.getApi().tx.utility.batchAll([registerTx, setUnitsTx]);2825 const encodedProposal = batchCall?.method.toHex() || '';2826 return encodedProposal;2827 }28282829 async assetTypeId(location: any) {2830 return await this.helper.callRpc('api.query.assetManager.assetTypeId', [location]);2831 }2832}28332834class MoonbeamDemocracyGroup extends HelperGroup<MoonbeamHelper> {2835 async notePreimage(signer: TSigner, encodedProposal: string) {2836 await this.helper.executeExtrinsic(signer, 'api.tx.democracy.notePreimage', [encodedProposal], true);2837 }28382839 externalProposeMajority(proposalHash: string) {2840 return this.helper.constructApiCall('api.tx.democracy.externalProposeMajority', [proposalHash]);2841 }28422843 fastTrack(proposalHash: string, votingPeriod: number, delayPeriod: number) {2844 return this.helper.constructApiCall('api.tx.democracy.fastTrack', [proposalHash, votingPeriod, delayPeriod]);2845 }28462847 async referendumVote(signer: TSigner, referendumIndex: number, accountVote: DemocracyStandardAccountVote) {2848 await this.helper.executeExtrinsic(signer, 'api.tx.democracy.vote', [referendumIndex, {Standard: accountVote}], true);2849 }2850}28512852class MoonbeamCollectiveGroup extends HelperGroup<MoonbeamHelper> {2853 collective: string;28542855 constructor(helper: MoonbeamHelper, collective: string) {2856 super(helper);28572858 this.collective = collective;2859 }28602861 async propose(signer: TSigner, threshold: number, proposalHash: string, lengthBound: number) {2862 await this.helper.executeExtrinsic(signer, `api.tx.${this.collective}.propose`, [threshold, proposalHash, lengthBound], true);2863 }28642865 async vote(signer: TSigner, proposalHash: string, proposalIndex: number, approve: boolean) {2866 await this.helper.executeExtrinsic(signer, `api.tx.${this.collective}.vote`, [proposalHash, proposalIndex, approve], true);2867 }28682869 async close(signer: TSigner, proposalHash: string, proposalIndex: number, weightBound: number, lengthBound: number) {2870 await this.helper.executeExtrinsic(signer, `api.tx.${this.collective}.close`, [proposalHash, proposalIndex, weightBound, lengthBound], true);2871 }28722873 async proposalCount() {2874 return Number(await this.helper.callRpc(`api.query.${this.collective}.proposalCount`, []));2875 }2876}28772878export type ChainHelperBaseConstructor = new(...args: any[]) => ChainHelperBase;2879export type UniqueHelperConstructor = new(...args: any[]) => UniqueHelper;28802881export class UniqueHelper extends ChainHelperBase {2882 balance: BalanceGroup<UniqueHelper>;2883 collection: CollectionGroup;2884 nft: NFTGroup;2885 rft: RFTGroup;2886 ft: FTGroup;2887 staking: StakingGroup;2888 scheduler: SchedulerGroup;2889 collatorSelection: CollatorSelectionGroup;2890 foreignAssets: ForeignAssetsGroup;2891 xcm: XcmGroup<UniqueHelper>;2892 xTokens: XTokensGroup<UniqueHelper>;2893 tokens: TokensGroup<UniqueHelper>;28942895 constructor(logger?: ILogger, options: {[key: string]: any} = {}) {2896 super(logger, options.helperBase ?? UniqueHelper);28972898 this.balance = new BalanceGroup(this);2899 this.collection = new CollectionGroup(this);2900 this.nft = new NFTGroup(this);2901 this.rft = new RFTGroup(this);2902 this.ft = new FTGroup(this);2903 this.staking = new StakingGroup(this);2904 this.scheduler = new SchedulerGroup(this);2905 this.collatorSelection = new CollatorSelectionGroup(this);2906 this.foreignAssets = new ForeignAssetsGroup(this);2907 this.xcm = new XcmGroup(this, 'polkadotXcm');2908 this.xTokens = new XTokensGroup(this);2909 this.tokens = new TokensGroup(this);2910 }29112912 getSudo<T extends UniqueHelper>() {2913 // eslint-disable-next-line @typescript-eslint/naming-convention2914 const SudoHelperType = SudoHelper(this.helperBase);2915 return this.clone(SudoHelperType) as T;2916 }2917}29182919export class XcmChainHelper extends ChainHelperBase {2920 async connect(wsEndpoint: string, _listeners?: any): Promise<void> {2921 const wsProvider = new WsProvider(wsEndpoint);2922 this.api = new ApiPromise({2923 provider: wsProvider,2924 });2925 await this.api.isReadyOrError;2926 this.network = await UniqueHelper.detectNetwork(this.api);2927 }2928}29292930export class RelayHelper extends XcmChainHelper {2931 xcm: XcmGroup<RelayHelper>;29322933 constructor(logger?: ILogger, options: {[key: string]: any} = {}) {2934 super(logger, options.helperBase ?? RelayHelper);29352936 this.xcm = new XcmGroup(this, 'xcmPallet');2937 }2938}29392940export class WestmintHelper extends XcmChainHelper {2941 balance: SubstrateBalanceGroup<WestmintHelper>;2942 xcm: XcmGroup<WestmintHelper>;2943 assets: AssetsGroup<WestmintHelper>;2944 xTokens: XTokensGroup<WestmintHelper>;29452946 constructor(logger?: ILogger, options: {[key: string]: any} = {}) {2947 super(logger, options.helperBase ?? WestmintHelper);29482949 this.balance = new SubstrateBalanceGroup(this);2950 this.xcm = new XcmGroup(this, 'polkadotXcm');2951 this.assets = new AssetsGroup(this);2952 this.xTokens = new XTokensGroup(this);2953 }2954}29552956export class MoonbeamHelper extends XcmChainHelper {2957 balance: EthereumBalanceGroup<MoonbeamHelper>;2958 assetManager: MoonbeamAssetManagerGroup;2959 assets: AssetsGroup<MoonbeamHelper>;2960 xTokens: XTokensGroup<MoonbeamHelper>;2961 democracy: MoonbeamDemocracyGroup;2962 collective: {2963 council: MoonbeamCollectiveGroup,2964 techCommittee: MoonbeamCollectiveGroup,2965 };29662967 constructor(logger?: ILogger, options: {[key: string]: any} = {}) {2968 super(logger, options.helperBase ?? MoonbeamHelper);29692970 this.balance = new EthereumBalanceGroup(this);2971 this.assetManager = new MoonbeamAssetManagerGroup(this);2972 this.assets = new AssetsGroup(this);2973 this.xTokens = new XTokensGroup(this);2974 this.democracy = new MoonbeamDemocracyGroup(this);2975 this.collective = {2976 council: new MoonbeamCollectiveGroup(this, 'councilCollective'),2977 techCommittee: new MoonbeamCollectiveGroup(this, 'techCommitteeCollective'),2978 };2979 }2980}29812982export class AcalaHelper extends XcmChainHelper {2983 balance: SubstrateBalanceGroup<AcalaHelper>;2984 assetRegistry: AcalaAssetRegistryGroup;2985 xTokens: XTokensGroup<AcalaHelper>;2986 tokens: TokensGroup<AcalaHelper>;29872988 constructor(logger?: ILogger, options: {[key: string]: any} = {}) {2989 super(logger, options.helperBase ?? AcalaHelper);29902991 this.balance = new SubstrateBalanceGroup(this);2992 this.assetRegistry = new AcalaAssetRegistryGroup(this);2993 this.xTokens = new XTokensGroup(this);2994 this.tokens = new TokensGroup(this);2995 }29962997 getSudo<T extends AcalaHelper>() {2998 // eslint-disable-next-line @typescript-eslint/naming-convention2999 const SudoHelperType = SudoHelper(this.helperBase);3000 return this.clone(SudoHelperType) as T;3001 }3002}30033004// eslint-disable-next-line @typescript-eslint/naming-convention3005function ScheduledUniqueHelper<T extends UniqueHelperConstructor>(Base: T) {3006 return class extends Base {3007 scheduleFn: 'schedule' | 'scheduleAfter';3008 blocksNum: number;3009 options: ISchedulerOptions;30103011 constructor(...args: any[]) {3012 const logger = args[0] as ILogger;3013 const options = args[1] as {3014 scheduleFn: 'schedule' | 'scheduleAfter',3015 blocksNum: number,3016 options: ISchedulerOptions3017 };30183019 super(logger);30203021 this.scheduleFn = options.scheduleFn;3022 this.blocksNum = options.blocksNum;3023 this.options = options.options;3024 }30253026 executeExtrinsic(sender: IKeyringPair, scheduledExtrinsic: string, scheduledParams: any[], expectSuccess?: boolean): Promise<ITransactionResult> {3027 const scheduledTx = this.constructApiCall(scheduledExtrinsic, scheduledParams);3028 3029 const mandatorySchedArgs = [3030 this.blocksNum,3031 this.options.periodic ? [this.options.periodic.period, this.options.periodic.repetitions] : null,3032 this.options.priority ?? null,3033 scheduledTx,3034 ];3035 3036 let schedArgs;3037 let scheduleFn;30383039 if (this.options.scheduledId) {3040 schedArgs = [this.options.scheduledId!, ...mandatorySchedArgs];30413042 if (this.scheduleFn == 'schedule') {3043 scheduleFn = 'scheduleNamed';3044 } else if (this.scheduleFn == 'scheduleAfter') {3045 scheduleFn = 'scheduleNamedAfter';3046 }3047 } else {3048 schedArgs = mandatorySchedArgs;3049 scheduleFn = this.scheduleFn;3050 }30513052 const extrinsic = 'api.tx.scheduler.' + scheduleFn;30533054 return super.executeExtrinsic(3055 sender,3056 extrinsic,3057 schedArgs,3058 expectSuccess,3059 );3060 }3061 };3062}30633064// eslint-disable-next-line @typescript-eslint/naming-convention3065function SudoHelper<T extends ChainHelperBaseConstructor>(Base: T) {3066 return class extends Base {3067 constructor(...args: any[]) {3068 super(...args);3069 }30703071 async executeExtrinsic(3072 sender: IKeyringPair,3073 extrinsic: string,3074 params: any[],3075 expectSuccess?: boolean,3076 options: Partial<SignerOptions>|null = null,3077 ): Promise<ITransactionResult> {3078 const call = this.constructApiCall(extrinsic, params);3079 const result = await super.executeExtrinsic(3080 sender,3081 'api.tx.sudo.sudo',3082 [call],3083 expectSuccess,3084 options,3085 );30863087 if (result.status === 'Fail') return result;30883089 const data = (result.result.events.find(x => x.event.section == 'sudo' && x.event.method == 'Sudid')?.event.data as any).sudoResult;3090 if (data.isErr) {3091 if (data.asErr.isModule) {3092 const error = (result.result.events[1].event.data as any).sudoResult.asErr.asModule;3093 const metaError = super.getApi()?.registry.findMetaError(error);3094 throw new Error(`${metaError.section}.${metaError.name}`);3095 } else {3096 throw new Error(data.asErr.toHuman());3097 }3098 }3099 return result;3100 }3101 };3102}31033104export class UniqueBaseCollection {3105 helper: UniqueHelper;3106 collectionId: number;31073108 constructor(collectionId: number, uniqueHelper: UniqueHelper) {3109 this.collectionId = collectionId;3110 this.helper = uniqueHelper;3111 }31123113 async getData() {3114 return await this.helper.collection.getData(this.collectionId);3115 }31163117 async getLastTokenId() {3118 return await this.helper.collection.getLastTokenId(this.collectionId);3119 }31203121 async doesTokenExist(tokenId: number) {3122 return await this.helper.collection.doesTokenExist(this.collectionId, tokenId);3123 }31243125 async getAdmins() {3126 return await this.helper.collection.getAdmins(this.collectionId);3127 }31283129 async getAllowList() {3130 return await this.helper.collection.getAllowList(this.collectionId);3131 }31323133 async getEffectiveLimits() {3134 return await this.helper.collection.getEffectiveLimits(this.collectionId);3135 }31363137 async getProperties(propertyKeys?: string[] | null) {3138 return await this.helper.collection.getProperties(this.collectionId, propertyKeys);3139 }31403141 async getPropertiesConsumedSpace() {3142 return await this.helper.collection.getPropertiesConsumedSpace(this.collectionId);3143 }31443145 async getTokenNextSponsored(tokenId: number, addressObj: ICrossAccountId) {3146 return await this.helper.collection.getTokenNextSponsored(this.collectionId, tokenId, addressObj);3147 }31483149 async getOptions() {3150 return await this.helper.collection.getCollectionOptions(this.collectionId);3151 }31523153 async setSponsor(signer: TSigner, sponsorAddress: TSubstrateAccount) {3154 return await this.helper.collection.setSponsor(signer, this.collectionId, sponsorAddress);3155 }31563157 async confirmSponsorship(signer: TSigner) {3158 return await this.helper.collection.confirmSponsorship(signer, this.collectionId);3159 }31603161 async removeSponsor(signer: TSigner) {3162 return await this.helper.collection.removeSponsor(signer, this.collectionId);3163 }31643165 async setLimits(signer: TSigner, limits: ICollectionLimits) {3166 return await this.helper.collection.setLimits(signer, this.collectionId, limits);3167 }31683169 async changeOwner(signer: TSigner, ownerAddress: TSubstrateAccount) {3170 return await this.helper.collection.changeOwner(signer, this.collectionId, ownerAddress);3171 }31723173 async addAdmin(signer: TSigner, adminAddressObj: ICrossAccountId) {3174 return await this.helper.collection.addAdmin(signer, this.collectionId, adminAddressObj);3175 }31763177 async addToAllowList(signer: TSigner, addressObj: ICrossAccountId) {3178 return await this.helper.collection.addToAllowList(signer, this.collectionId, addressObj);3179 }31803181 async removeFromAllowList(signer: TSigner, addressObj: ICrossAccountId) {3182 return await this.helper.collection.removeFromAllowList(signer, this.collectionId, addressObj);3183 }31843185 async removeAdmin(signer: TSigner, adminAddressObj: ICrossAccountId) {3186 return await this.helper.collection.removeAdmin(signer, this.collectionId, adminAddressObj);3187 }31883189 async setProperties(signer: TSigner, properties: IProperty[]) {3190 return await this.helper.collection.setProperties(signer, this.collectionId, properties);3191 }31923193 async deleteProperties(signer: TSigner, propertyKeys: string[]) {3194 return await this.helper.collection.deleteProperties(signer, this.collectionId, propertyKeys);3195 }31963197 async setPermissions(signer: TSigner, permissions: ICollectionPermissions) {3198 return await this.helper.collection.setPermissions(signer, this.collectionId, permissions);3199 }32003201 async enableNesting(signer: TSigner, permissions: INestingPermissions) {3202 return await this.helper.collection.enableNesting(signer, this.collectionId, permissions);3203 }32043205 async disableNesting(signer: TSigner) {3206 return await this.helper.collection.disableNesting(signer, this.collectionId);3207 }32083209 async burn(signer: TSigner) {3210 return await this.helper.collection.burn(signer, this.collectionId);3211 }32123213 scheduleAt<T extends UniqueHelper>(3214 executionBlockNumber: number,3215 options: ISchedulerOptions = {},3216 ) {3217 const scheduledHelper = this.helper.scheduler.scheduleAt<T>(executionBlockNumber, options);3218 return new UniqueBaseCollection(this.collectionId, scheduledHelper);3219 }32203221 scheduleAfter<T extends UniqueHelper>(3222 blocksBeforeExecution: number,3223 options: ISchedulerOptions = {},3224 ) {3225 const scheduledHelper = this.helper.scheduler.scheduleAfter<T>(blocksBeforeExecution, options);3226 return new UniqueBaseCollection(this.collectionId, scheduledHelper);3227 }32283229 getSudo<T extends UniqueHelper>() {3230 return new UniqueBaseCollection(this.collectionId, this.helper.getSudo<T>());3231 }3232}323332343235export class UniqueNFTCollection extends UniqueBaseCollection {3236 getTokenObject(tokenId: number) {3237 return new UniqueNFToken(tokenId, this);3238 }32393240 async getTokensByAddress(addressObj: ICrossAccountId) {3241 return await this.helper.nft.getTokensByAddress(this.collectionId, addressObj);3242 }32433244 async getToken(tokenId: number, blockHashAt?: string) {3245 return await this.helper.nft.getToken(this.collectionId, tokenId, [], blockHashAt);3246 }32473248 async getTokenOwner(tokenId: number, blockHashAt?: string) {3249 return await this.helper.nft.getTokenOwner(this.collectionId, tokenId, blockHashAt);3250 }32513252 async getTokenTopmostOwner(tokenId: number, blockHashAt?: string) {3253 return await this.helper.nft.getTokenTopmostOwner(this.collectionId, tokenId, blockHashAt);3254 }32553256 async getTokenChildren(tokenId: number, blockHashAt?: string) {3257 return await this.helper.nft.getTokenChildren(this.collectionId, tokenId, blockHashAt);3258 }32593260 async getPropertyPermissions(propertyKeys: string[] | null = null) {3261 return await this.helper.nft.getPropertyPermissions(this.collectionId, propertyKeys);3262 }32633264 async getTokenProperties(tokenId: number, propertyKeys?: string[] | null) {3265 return await this.helper.nft.getTokenProperties(this.collectionId, tokenId, propertyKeys);3266 }32673268 async getTokenPropertiesConsumedSpace(tokenId: number): Promise<number> {3269 const api = this.helper.getApi();3270 const props = (await api.query.nonfungible.tokenProperties(this.collectionId, tokenId)).toJSON();3271 3272 return (props! as any).consumedSpace;3273 }32743275 async transferToken(signer: TSigner, tokenId: number, addressObj: ICrossAccountId) {3276 return await this.helper.nft.transferToken(signer, this.collectionId, tokenId, addressObj);3277 }32783279 async transferTokenFrom(signer: TSigner, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId) {3280 return await this.helper.nft.transferTokenFrom(signer, this.collectionId, tokenId, fromAddressObj, toAddressObj);3281 }32823283 async approveToken(signer: TSigner, tokenId: number, toAddressObj: ICrossAccountId) {3284 return await this.helper.nft.approveToken(signer, this.collectionId, tokenId, toAddressObj);3285 }32863287 async isTokenApproved(tokenId: number, toAddressObj: ICrossAccountId) {3288 return await this.helper.nft.isTokenApproved(this.collectionId, tokenId, toAddressObj);3289 }32903291 async mintToken(signer: TSigner, owner: ICrossAccountId = {Substrate: signer.address}, properties?: IProperty[]) {3292 return await this.helper.nft.mintToken(signer, {collectionId: this.collectionId, owner, properties});3293 }32943295 async mintMultipleTokens(signer: TSigner, tokens: {owner: ICrossAccountId, properties?: IProperty[]}[]) {3296 return await this.helper.nft.mintMultipleTokens(signer, this.collectionId, tokens);3297 }32983299 async burnToken(signer: TSigner, tokenId: number) {3300 return await this.helper.nft.burnToken(signer, this.collectionId, tokenId);3301 }33023303 async burnTokenFrom(signer: TSigner, tokenId: number, fromAddressObj: ICrossAccountId) {3304 return await this.helper.nft.burnTokenFrom(signer, this.collectionId, tokenId, fromAddressObj);3305 }33063307 async setTokenProperties(signer: TSigner, tokenId: number, properties: IProperty[]) {3308 return await this.helper.nft.setTokenProperties(signer, this.collectionId, tokenId, properties);3309 }33103311 async deleteTokenProperties(signer: TSigner, tokenId: number, propertyKeys: string[]) {3312 return await this.helper.nft.deleteTokenProperties(signer, this.collectionId, tokenId, propertyKeys);3313 }33143315 async setTokenPropertyPermissions(signer: TSigner, permissions: ITokenPropertyPermission[]) {3316 return await this.helper.nft.setTokenPropertyPermissions(signer, this.collectionId, permissions);3317 }33183319 async nestToken(signer: TSigner, tokenId: number, toTokenObj: IToken) {3320 return await this.helper.nft.nestToken(signer, {collectionId: this.collectionId, tokenId}, toTokenObj);3321 }33223323 async unnestToken(signer: TSigner, tokenId: number, fromTokenObj: IToken, toAddressObj: ICrossAccountId) {3324 return await this.helper.nft.unnestToken(signer, {collectionId: this.collectionId, tokenId}, fromTokenObj, toAddressObj);3325 }33263327 scheduleAt<T extends UniqueHelper>(3328 executionBlockNumber: number,3329 options: ISchedulerOptions = {},3330 ) {3331 const scheduledHelper = this.helper.scheduler.scheduleAt<T>(executionBlockNumber, options);3332 return new UniqueNFTCollection(this.collectionId, scheduledHelper);3333 }33343335 scheduleAfter<T extends UniqueHelper>(3336 blocksBeforeExecution: number,3337 options: ISchedulerOptions = {},3338 ) {3339 const scheduledHelper = this.helper.scheduler.scheduleAfter<T>(blocksBeforeExecution, options);3340 return new UniqueNFTCollection(this.collectionId, scheduledHelper);3341 }33423343 getSudo<T extends UniqueHelper>() {3344 return new UniqueNFTCollection(this.collectionId, this.helper.getSudo<T>());3345 }3346}334733483349export class UniqueRFTCollection extends UniqueBaseCollection {3350 getTokenObject(tokenId: number) {3351 return new UniqueRFToken(tokenId, this);3352 }33533354 async getToken(tokenId: number, blockHashAt?: string) {3355 return await this.helper.rft.getToken(this.collectionId, tokenId, [], blockHashAt);3356 }33573358 async getTokensByAddress(addressObj: ICrossAccountId) {3359 return await this.helper.rft.getTokensByAddress(this.collectionId, addressObj);3360 }33613362 async getTop10TokenOwners(tokenId: number) {3363 return await this.helper.rft.getTokenTop10Owners(this.collectionId, tokenId);3364 }33653366 async getTokenBalance(tokenId: number, addressObj: ICrossAccountId) {3367 return await this.helper.rft.getTokenBalance(this.collectionId, tokenId, addressObj);3368 }33693370 async getTokenTotalPieces(tokenId: number) {3371 return await this.helper.rft.getTokenTotalPieces(this.collectionId, tokenId);3372 }33733374 async getTokenApprovedPieces(tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId) {3375 return await this.helper.rft.getTokenApprovedPieces(this.collectionId, tokenId, toAddressObj, fromAddressObj);3376 }33773378 async getPropertyPermissions(propertyKeys: string[] | null = null) {3379 return await this.helper.rft.getPropertyPermissions(this.collectionId, propertyKeys);3380 }33813382 async getTokenProperties(tokenId: number, propertyKeys?: string[] | null) {3383 return await this.helper.rft.getTokenProperties(this.collectionId, tokenId, propertyKeys);3384 }33853386 async getTokenPropertiesConsumedSpace(tokenId: number): Promise<number> {3387 const api = this.helper.getApi();3388 const props = (await api.query.refungible.tokenProperties(this.collectionId, tokenId)).toJSON();3389 3390 return (props! as any).consumedSpace;3391 }33923393 async transferToken(signer: TSigner, tokenId: number, addressObj: ICrossAccountId, amount=1n) {3394 return await this.helper.rft.transferToken(signer, this.collectionId, tokenId, addressObj, amount);3395 }33963397 async transferTokenFrom(signer: TSigner, tokenId: number, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId, amount=1n) {3398 return await this.helper.rft.transferTokenFrom(signer, this.collectionId, tokenId, fromAddressObj, toAddressObj, amount);3399 }34003401 async approveToken(signer: TSigner, tokenId: number, toAddressObj: ICrossAccountId, amount=1n) {3402 return await this.helper.rft.approveToken(signer, this.collectionId, tokenId, toAddressObj, amount);3403 }34043405 async repartitionToken(signer: TSigner, tokenId: number, amount: bigint) {3406 return await this.helper.rft.repartitionToken(signer, this.collectionId, tokenId, amount);3407 }34083409 async mintToken(signer: TSigner, pieces=1n, owner: ICrossAccountId = {Substrate: signer.address}, properties?: IProperty[]) {3410 return await this.helper.rft.mintToken(signer, {collectionId: this.collectionId, owner, pieces, properties});3411 }34123413 async mintMultipleTokens(signer: TSigner, tokens: {pieces: bigint, owner: ICrossAccountId, properties?: IProperty[]}[]) {3414 return await this.helper.rft.mintMultipleTokens(signer, this.collectionId, tokens);3415 }34163417 async burnToken(signer: TSigner, tokenId: number, amount=1n) {3418 return await this.helper.rft.burnToken(signer, this.collectionId, tokenId, amount);3419 }34203421 async burnTokenFrom(signer: TSigner, tokenId: number, fromAddressObj: ICrossAccountId, amount=1n) {3422 return await this.helper.rft.burnTokenFrom(signer, this.collectionId, tokenId, fromAddressObj, amount);3423 }34243425 async setTokenProperties(signer: TSigner, tokenId: number, properties: IProperty[]) {3426 return await this.helper.rft.setTokenProperties(signer, this.collectionId, tokenId, properties);3427 }34283429 async deleteTokenProperties(signer: TSigner, tokenId: number, propertyKeys: string[]) {3430 return await this.helper.rft.deleteTokenProperties(signer, this.collectionId, tokenId, propertyKeys);3431 }34323433 async setTokenPropertyPermissions(signer: TSigner, permissions: ITokenPropertyPermission[]) {3434 return await this.helper.rft.setTokenPropertyPermissions(signer, this.collectionId, permissions);3435 }34363437 scheduleAt<T extends UniqueHelper>(3438 executionBlockNumber: number,3439 options: ISchedulerOptions = {},3440 ) {3441 const scheduledHelper = this.helper.scheduler.scheduleAt<T>(executionBlockNumber, options);3442 return new UniqueRFTCollection(this.collectionId, scheduledHelper);3443 }34443445 scheduleAfter<T extends UniqueHelper>(3446 blocksBeforeExecution: number,3447 options: ISchedulerOptions = {},3448 ) {3449 const scheduledHelper = this.helper.scheduler.scheduleAfter<T>(blocksBeforeExecution, options);3450 return new UniqueRFTCollection(this.collectionId, scheduledHelper);3451 }34523453 getSudo<T extends UniqueHelper>() {3454 return new UniqueRFTCollection(this.collectionId, this.helper.getSudo<T>());3455 }3456}345734583459export class UniqueFTCollection extends UniqueBaseCollection {3460 async getBalance(addressObj: ICrossAccountId) {3461 return await this.helper.ft.getBalance(this.collectionId, addressObj);3462 }34633464 async getTotalPieces() {3465 return await this.helper.ft.getTotalPieces(this.collectionId);3466 }34673468 async getApprovedTokens(fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId) {3469 return await this.helper.ft.getApprovedTokens(this.collectionId, fromAddressObj, toAddressObj);3470 }34713472 async getTop10Owners() {3473 return await this.helper.ft.getTop10Owners(this.collectionId);3474 }34753476 async mint(signer: TSigner, amount=1n, owner: ICrossAccountId = {Substrate: signer.address}) {3477 return await this.helper.ft.mintTokens(signer, this.collectionId, amount, owner);3478 }34793480 async mintWithOneOwner(signer: TSigner, tokens: {value: bigint}[], owner: ICrossAccountId = {Substrate: signer.address}) {3481 return await this.helper.ft.mintMultipleTokensWithOneOwner(signer, this.collectionId, tokens, owner);3482 }34833484 async transfer(signer: TSigner, toAddressObj: ICrossAccountId, amount=1n) {3485 return await this.helper.ft.transfer(signer, this.collectionId, toAddressObj, amount);3486 }34873488 async transferFrom(signer: TSigner, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId, amount=1n) {3489 return await this.helper.ft.transferFrom(signer, this.collectionId, fromAddressObj, toAddressObj, amount);3490 }34913492 async burnTokens(signer: TSigner, amount=1n) {3493 return await this.helper.ft.burnTokens(signer, this.collectionId, amount);3494 }34953496 async burnTokensFrom(signer: TSigner, fromAddressObj: ICrossAccountId, amount=1n) {3497 return await this.helper.ft.burnTokensFrom(signer, this.collectionId, fromAddressObj, amount);3498 }34993500 async approveTokens(signer: TSigner, toAddressObj: ICrossAccountId, amount=1n) {3501 return await this.helper.ft.approveTokens(signer, this.collectionId, toAddressObj, amount);3502 }35033504 scheduleAt<T extends UniqueHelper>(3505 executionBlockNumber: number,3506 options: ISchedulerOptions = {},3507 ) {3508 const scheduledHelper = this.helper.scheduler.scheduleAt<T>(executionBlockNumber, options);3509 return new UniqueFTCollection(this.collectionId, scheduledHelper);3510 }35113512 scheduleAfter<T extends UniqueHelper>(3513 blocksBeforeExecution: number,3514 options: ISchedulerOptions = {},3515 ) {3516 const scheduledHelper = this.helper.scheduler.scheduleAfter<T>(blocksBeforeExecution, options);3517 return new UniqueFTCollection(this.collectionId, scheduledHelper);3518 }35193520 getSudo<T extends UniqueHelper>() {3521 return new UniqueFTCollection(this.collectionId, this.helper.getSudo<T>());3522 }3523}352435253526export class UniqueBaseToken {3527 collection: UniqueNFTCollection | UniqueRFTCollection;3528 collectionId: number;3529 tokenId: number;35303531 constructor(tokenId: number, collection: UniqueNFTCollection | UniqueRFTCollection) {3532 this.collection = collection;3533 this.collectionId = collection.collectionId;3534 this.tokenId = tokenId;3535 }35363537 async getNextSponsored(addressObj: ICrossAccountId) {3538 return await this.collection.getTokenNextSponsored(this.tokenId, addressObj);3539 }35403541 async getProperties(propertyKeys?: string[] | null) {3542 return await this.collection.getTokenProperties(this.tokenId, propertyKeys);3543 }35443545 async getTokenPropertiesConsumedSpace() {3546 return await this.collection.getTokenPropertiesConsumedSpace(this.tokenId);3547 }35483549 async setProperties(signer: TSigner, properties: IProperty[]) {3550 return await this.collection.setTokenProperties(signer, this.tokenId, properties);3551 }35523553 async deleteProperties(signer: TSigner, propertyKeys: string[]) {3554 return await this.collection.deleteTokenProperties(signer, this.tokenId, propertyKeys);3555 }35563557 async doesExist() {3558 return await this.collection.doesTokenExist(this.tokenId);3559 }35603561 nestingAccount() {3562 return this.collection.helper.util.getTokenAccount(this);3563 }35643565 scheduleAt<T extends UniqueHelper>(3566 executionBlockNumber: number,3567 options: ISchedulerOptions = {},3568 ) {3569 const scheduledCollection = this.collection.scheduleAt<T>(executionBlockNumber, options);3570 return new UniqueBaseToken(this.tokenId, scheduledCollection);3571 }35723573 scheduleAfter<T extends UniqueHelper>(3574 blocksBeforeExecution: number,3575 options: ISchedulerOptions = {},3576 ) {3577 const scheduledCollection = this.collection.scheduleAfter<T>(blocksBeforeExecution, options);3578 return new UniqueBaseToken(this.tokenId, scheduledCollection);3579 }35803581 getSudo<T extends UniqueHelper>() {3582 return new UniqueBaseToken(this.tokenId, this.collection.getSudo<T>());3583 }3584}358535863587export class UniqueNFToken extends UniqueBaseToken {3588 collection: UniqueNFTCollection;35893590 constructor(tokenId: number, collection: UniqueNFTCollection) {3591 super(tokenId, collection);3592 this.collection = collection;3593 }35943595 async getData(blockHashAt?: string) {3596 return await this.collection.getToken(this.tokenId, blockHashAt);3597 }35983599 async getOwner(blockHashAt?: string) {3600 return await this.collection.getTokenOwner(this.tokenId, blockHashAt);3601 }36023603 async getTopmostOwner(blockHashAt?: string) {3604 return await this.collection.getTokenTopmostOwner(this.tokenId, blockHashAt);3605 }36063607 async getChildren(blockHashAt?: string) {3608 return await this.collection.getTokenChildren(this.tokenId, blockHashAt);3609 }36103611 async nest(signer: TSigner, toTokenObj: IToken) {3612 return await this.collection.nestToken(signer, this.tokenId, toTokenObj);3613 }36143615 async unnest(signer: TSigner, fromTokenObj: IToken, toAddressObj: ICrossAccountId) {3616 return await this.collection.unnestToken(signer, this.tokenId, fromTokenObj, toAddressObj);3617 }36183619 async transfer(signer: TSigner, addressObj: ICrossAccountId) {3620 return await this.collection.transferToken(signer, this.tokenId, addressObj);3621 }36223623 async transferFrom(signer: TSigner, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId) {3624 return await this.collection.transferTokenFrom(signer, this.tokenId, fromAddressObj, toAddressObj);3625 }36263627 async approve(signer: TSigner, toAddressObj: ICrossAccountId) {3628 return await this.collection.approveToken(signer, this.tokenId, toAddressObj);3629 }36303631 async isApproved(toAddressObj: ICrossAccountId) {3632 return await this.collection.isTokenApproved(this.tokenId, toAddressObj);3633 }36343635 async burn(signer: TSigner) {3636 return await this.collection.burnToken(signer, this.tokenId);3637 }36383639 async burnFrom(signer: TSigner, fromAddressObj: ICrossAccountId) {3640 return await this.collection.burnTokenFrom(signer, this.tokenId, fromAddressObj);3641 }36423643 scheduleAt<T extends UniqueHelper>(3644 executionBlockNumber: number,3645 options: ISchedulerOptions = {},3646 ) {3647 const scheduledCollection = this.collection.scheduleAt<T>(executionBlockNumber, options);3648 return new UniqueNFToken(this.tokenId, scheduledCollection);3649 }36503651 scheduleAfter<T extends UniqueHelper>(3652 blocksBeforeExecution: number,3653 options: ISchedulerOptions = {},3654 ) {3655 const scheduledCollection = this.collection.scheduleAfter<T>(blocksBeforeExecution, options);3656 return new UniqueNFToken(this.tokenId, scheduledCollection);3657 }36583659 getSudo<T extends UniqueHelper>() {3660 return new UniqueNFToken(this.tokenId, this.collection.getSudo<T>());3661 }3662}36633664export class UniqueRFToken extends UniqueBaseToken {3665 collection: UniqueRFTCollection;36663667 constructor(tokenId: number, collection: UniqueRFTCollection) {3668 super(tokenId, collection);3669 this.collection = collection;3670 }36713672 async getData(blockHashAt?: string) {3673 return await this.collection.getToken(this.tokenId, blockHashAt);3674 }36753676 async getTop10Owners() {3677 return await this.collection.getTop10TokenOwners(this.tokenId);3678 }36793680 async getBalance(addressObj: ICrossAccountId) {3681 return await this.collection.getTokenBalance(this.tokenId, addressObj);3682 }36833684 async getTotalPieces() {3685 return await this.collection.getTokenTotalPieces(this.tokenId);3686 }36873688 async getApprovedPieces(fromAddressObj: ICrossAccountId, toAccountObj: ICrossAccountId) {3689 return await this.collection.getTokenApprovedPieces(this.tokenId, fromAddressObj, toAccountObj);3690 }36913692 async transfer(signer: TSigner, addressObj: ICrossAccountId, amount=1n) {3693 return await this.collection.transferToken(signer, this.tokenId, addressObj, amount);3694 }36953696 async transferFrom(signer: TSigner, fromAddressObj: ICrossAccountId, toAddressObj: ICrossAccountId, amount=1n) {3697 return await this.collection.transferTokenFrom(signer, this.tokenId, fromAddressObj, toAddressObj, amount);3698 }36993700 async approve(signer: TSigner, toAddressObj: ICrossAccountId, amount=1n) {3701 return await this.collection.approveToken(signer, this.tokenId, toAddressObj, amount);3702 }37033704 async repartition(signer: TSigner, amount: bigint) {3705 return await this.collection.repartitionToken(signer, this.tokenId, amount);3706 }37073708 async burn(signer: TSigner, amount=1n) {3709 return await this.collection.burnToken(signer, this.tokenId, amount);3710 }37113712 async burnFrom(signer: TSigner, fromAddressObj: ICrossAccountId, amount=1n) {3713 return await this.collection.burnTokenFrom(signer, this.tokenId, fromAddressObj, amount);3714 }37153716 scheduleAt<T extends UniqueHelper>(3717 executionBlockNumber: number,3718 options: ISchedulerOptions = {},3719 ) {3720 const scheduledCollection = this.collection.scheduleAt<T>(executionBlockNumber, options);3721 return new UniqueRFToken(this.tokenId, scheduledCollection);3722 }37233724 scheduleAfter<T extends UniqueHelper>(3725 blocksBeforeExecution: number,3726 options: ISchedulerOptions = {},3727 ) {3728 const scheduledCollection = this.collection.scheduleAfter<T>(blocksBeforeExecution, options);3729 return new UniqueRFToken(this.tokenId, scheduledCollection);3730 }37313732 getSudo<T extends UniqueHelper>() {3733 return new UniqueRFToken(this.tokenId, this.collection.getSudo<T>());3734 }3735}