difftreelog
fix tests and weights
in: master
16 files changed
pallets/balances-adapter/src/erc.rsdiffbeforeafterboth--- a/pallets/balances-adapter/src/erc.rs
+++ b/pallets/balances-adapter/src/erc.rs
@@ -1,6 +1,7 @@
-use crate::{Config, NativeFungibleHandle};
+use crate::{Config, NativeFungibleHandle, SelfWeightOf};
use evm_coder::{abi::AbiType, ToLog, generate_stubgen, solidity_interface, types::*};
use frame_support::traits::{Currency, ExistenceRequirement};
+use pallet_balances::WeightInfo;
use pallet_common::{
erc::{CommonEvmHandler, CrossAccountId, PrecompileHandle, PrecompileResult},
eth::CrossAddress,
@@ -73,7 +74,7 @@
Ok(total.into())
}
- // #[weight(<SelfWeightOf<T>>::transfer())]
+ #[weight(<SelfWeightOf<T>>::transfer())]
fn transfer(&mut self, caller: Caller, to: Address, amount: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = T::CrossAccountId::from_eth(to);
@@ -93,7 +94,7 @@
Ok(true)
}
- // #[weight(<SelfWeightOf<T>>::transfer_from())]
+ #[weight(<SelfWeightOf<T>>::transfer())]
fn transfer_from(
&mut self,
caller: Caller,
@@ -138,7 +139,7 @@
Ok(balance.into())
}
- // #[weight(<SelfWeightOf<T>>::transfer())]
+ #[weight(<SelfWeightOf<T>>::transfer())]
fn transfer_cross(&mut self, caller: Caller, to: CrossAddress, amount: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = to.into_sub_cross_account::<T>()?;
@@ -158,7 +159,7 @@
Ok(true)
}
- // #[weight(<SelfWeightOf<T>>::transfer_from())]
+ #[weight(<SelfWeightOf<T>>::transfer())]
fn transfer_from_cross(
&mut self,
caller: Caller,
pallets/balances-adapter/src/lib.rsdiffbeforeafterboth--- a/pallets/balances-adapter/src/lib.rs
+++ b/pallets/balances-adapter/src/lib.rs
@@ -11,6 +11,8 @@
pub mod common;
pub mod erc;
+pub(crate) type SelfWeightOf<T> = <T as Config>::WeightInfo;
+
pub struct NativeFungibleHandle<T: Config>(SubstrateRecorder<T>);
impl<T: Config> NativeFungibleHandle<T> {
pub fn new() -> NativeFungibleHandle<T> {
@@ -34,6 +36,7 @@
pub mod pallet {
use alloc::string::String;
use frame_support::{traits::Get, sp_runtime::DispatchResult};
+ use pallet_balances::WeightInfo;
use sp_core::U256;
#[pallet::config]
@@ -49,6 +52,8 @@
type Decimals: Get<u8>;
type Name: Get<String>;
type Symbol: Get<String>;
+
+ type WeightInfo: WeightInfo;
}
#[pallet::pallet]
pub struct Pallet<T>(_);
runtime/common/config/pallets/mod.rsdiffbeforeafterboth--- a/runtime/common/config/pallets/mod.rs
+++ b/runtime/common/config/pallets/mod.rs
@@ -94,6 +94,7 @@
type Decimals = Decimals;
type Name = Name;
type Symbol = Symbol;
+ type WeightInfo = pallet_balances::weights::SubstrateWeight<Self>;
}
parameter_types! {
tests/src/addCollectionAdmin.test.tsdiffbeforeafterboth--- a/tests/src/addCollectionAdmin.test.ts
+++ b/tests/src/addCollectionAdmin.test.ts
@@ -16,6 +16,7 @@
import {IKeyringPair} from '@polkadot/types/types';
import {itSub, usingPlaygrounds, expect} from './util';
+import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
describe('Integration Test addCollectionAdmin(collection_id, new_admin_id):', () => {
let donor: IKeyringPair;
@@ -82,7 +83,7 @@
itSub("Can't add collection admin of not existing collection.", async ({helper}) => {
const [alice, bob] = await helper.arrange.createAccounts([10n, 10n, 10n], donor);
- const collectionId = (1 << 32) - 1;
+ const collectionId = NON_EXISTENT_COLLECTION_ID;
await expect(helper.collection.addAdmin(alice, collectionId, {Substrate: bob.address})).to.be.rejectedWith(/common\.CollectionNotFound/);
tests/src/allowLists.test.tsdiffbeforeafterboth--- a/tests/src/allowLists.test.ts
+++ b/tests/src/allowLists.test.ts
@@ -16,7 +16,7 @@
import {IKeyringPair} from '@polkadot/types/types';
import {usingPlaygrounds, expect, itSub} from './util';
-import {ICollectionPermissions} from './util/playgrounds/types';
+import {ICollectionPermissions, NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
describe('Integration Test ext. Allow list tests', () => {
let alice: IKeyringPair;
@@ -60,7 +60,7 @@
describe('Negative', () => {
itSub('Nobody can add address to allow list of non-existing collection', async ({helper}) => {
- const collectionId = (1<<32) - 1;
+ const collectionId = NON_EXISTENT_COLLECTION_ID;
await expect(helper.nft.addToAllowList(bob, collectionId, {Substrate: charlie.address}))
.to.be.rejectedWith(/common\.CollectionNotFound/);
});
@@ -140,7 +140,7 @@
});
itSub('Nobody can remove address from allow list of non-existing collection', async ({helper}) => {
- const collectionId = (1<<32) - 1;
+ const collectionId = NON_EXISTENT_COLLECTION_ID;
await expect(helper.collection.removeFromAllowList(bob, collectionId, {Substrate: charlie.address}))
.to.be.rejectedWith(/common\.CollectionNotFound/);
});
tests/src/change-collection-owner.test.tsdiffbeforeafterboth--- a/tests/src/change-collection-owner.test.ts
+++ b/tests/src/change-collection-owner.test.ts
@@ -16,6 +16,7 @@
import {IKeyringPair} from '@polkadot/types/types';
import {usingPlaygrounds, expect, itSub} from './util';
+import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
describe('Integration Test changeCollectionOwner(collection_id, new_owner):', () => {
let alice: IKeyringPair;
@@ -127,7 +128,7 @@
});
itSub('Can\'t change owner of a non-existing collection.', async ({helper}) => {
- const collectionId = (1 << 32) - 1;
+ const collectionId = NON_EXISTENT_COLLECTION_ID;
const changeOwnerTx = () => helper.collection.changeOwner(bob, collectionId, bob.address);
await expect(changeOwnerTx()).to.be.rejectedWith(/common\.CollectionNotFound/);
});
tests/src/confirmSponsorship.test.tsdiffbeforeafterboth--- a/tests/src/confirmSponsorship.test.ts
+++ b/tests/src/confirmSponsorship.test.ts
@@ -16,6 +16,7 @@
import {IKeyringPair} from '@polkadot/types/types';
import {usingPlaygrounds, expect, itSub, Pallets} from './util';
+import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
async function setSponsorHelper(collection: any, signer: IKeyringPair, sponsorAddress: string) {
await collection.setSponsor(signer, sponsorAddress);
@@ -198,7 +199,7 @@
});
itSub('(!negative test!) Confirm sponsorship for a collection that never existed', async ({helper}) => {
- const collectionId = (1 << 32) - 1;
+ const collectionId = NON_EXISTENT_COLLECTION_ID;
const confirmSponsorshipTx = () => helper.collection.confirmSponsorship(bob, collectionId);
await expect(confirmSponsorshipTx()).to.be.rejectedWith(/common\.CollectionNotFound/);
});
tests/src/eth/util/playgrounds/types.tsdiffbeforeafterboth--- a/tests/src/eth/util/playgrounds/types.ts
+++ b/tests/src/eth/util/playgrounds/types.ts
@@ -48,5 +48,3 @@
field: CollectionLimitField,
value: OptionUint,
}
-
-export const NON_EXISTENT_COLLECTION_ID = 4_294_967_295;
\ No newline at end of file
tests/src/removeCollectionAdmin.test.tsdiffbeforeafterboth--- a/tests/src/removeCollectionAdmin.test.ts
+++ b/tests/src/removeCollectionAdmin.test.ts
@@ -16,6 +16,7 @@
import {IKeyringPair} from '@polkadot/types/types';
import {itSub, usingPlaygrounds, expect} from './util';
+import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
describe('Integration Test removeCollectionAdmin(collection_id, account_id):', () => {
let alice: IKeyringPair;
@@ -68,7 +69,7 @@
});
itSub('Can\'t remove collection admin from not existing collection', async ({helper}) => {
- const collectionId = (1 << 32) - 1;
+ const collectionId = NON_EXISTENT_COLLECTION_ID;
await expect(helper.collection.removeAdmin(alice, collectionId, {Substrate: bob.address}))
.to.be.rejectedWith(/common\.CollectionNotFound/);
tests/src/removeCollectionSponsor.test.tsdiffbeforeafterboth--- a/tests/src/removeCollectionSponsor.test.ts
+++ b/tests/src/removeCollectionSponsor.test.ts
@@ -16,6 +16,7 @@
import {IKeyringPair} from '@polkadot/types/types';
import {itSub, usingPlaygrounds, expect} from './util';
+import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
describe('integration test: ext. removeCollectionSponsor():', () => {
let donor: IKeyringPair;
@@ -91,7 +92,7 @@
});
itSub('(!negative test!) Remove sponsor for a collection that never existed', async ({helper}) => {
- const collectionId = (1 << 32) - 1;
+ const collectionId = NON_EXISTENT_COLLECTION_ID;
await expect(helper.collection.removeSponsor(alice, collectionId)).to.be.rejectedWith(/common\.CollectionNotFound/);
});
tests/src/setCollectionLimits.test.tsdiffbeforeafterboth--- a/tests/src/setCollectionLimits.test.ts
+++ b/tests/src/setCollectionLimits.test.ts
@@ -17,6 +17,7 @@
// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
import {IKeyringPair} from '@polkadot/types/types';
import {itSub, usingPlaygrounds, expect} from './util';
+import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
const accountTokenOwnershipLimit = 0;
const sponsoredDataSize = 0;
@@ -110,7 +111,7 @@
});
itSub('execute setCollectionLimits for not exists collection', async ({helper}) => {
- const nonExistentCollectionId = (1 << 32) - 1;
+ const nonExistentCollectionId = NON_EXISTENT_COLLECTION_ID;
await expect(helper.collection.setLimits(
alice,
nonExistentCollectionId,
tests/src/setCollectionSponsor.test.tsdiffbeforeafterboth--- a/tests/src/setCollectionSponsor.test.ts
+++ b/tests/src/setCollectionSponsor.test.ts
@@ -16,6 +16,7 @@
import {IKeyringPair} from '@polkadot/types/types';
import {itSub, usingPlaygrounds, expect, Pallets} from './util';
+import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
describe('integration test: ext. setCollectionSponsor():', () => {
let alice: IKeyringPair;
@@ -105,7 +106,7 @@
});
itSub('(!negative test!) Add sponsor to a collection that never existed', async ({helper}) => {
- const collectionId = (1 << 32) - 1;
+ const collectionId = NON_EXISTENT_COLLECTION_ID;
await expect(helper.collection.setSponsor(alice, collectionId, bob.address))
.to.be.rejectedWith(/common\.CollectionNotFound/);
});
tests/src/setPermissions.test.tsdiffbeforeafterboth--- a/tests/src/setPermissions.test.ts
+++ b/tests/src/setPermissions.test.ts
@@ -16,6 +16,7 @@
import {IKeyringPair} from '@polkadot/types/types';
import {itSub, usingPlaygrounds, expect} from './util';
+import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
describe('Integration Test: Set Permissions', () => {
let alice: IKeyringPair;
@@ -85,7 +86,7 @@
});
itSub('fails on not existing collection', async ({helper}) => {
- const collectionId = (1 << 32) - 1;
+ const collectionId = NON_EXISTENT_COLLECTION_ID;
await expect(helper.collection.setPermissions(alice, collectionId, {access: 'AllowList', mintMode: true}))
.to.be.rejectedWith(/common\.CollectionNotFound/);
});
tests/src/transfer.test.tsdiffbeforeafterboth--- a/tests/src/transfer.test.ts
+++ b/tests/src/transfer.test.ts
@@ -17,7 +17,7 @@
import {IKeyringPair} from '@polkadot/types/types';
import {itEth, usingEthPlaygrounds} from './eth/util';
import {itSub, Pallets, usingPlaygrounds, expect} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './eth/util/playgrounds/types';
+import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
describe('Integration Test Transfer(recipient, collection_id, item_id, value)', () => {
let donor: IKeyringPair;
tests/src/transferFrom.test.tsdiffbeforeafterboth--- a/tests/src/transferFrom.test.ts
+++ b/tests/src/transferFrom.test.ts
@@ -16,7 +16,7 @@
import {IKeyringPair} from '@polkadot/types/types';
import {itSub, Pallets, usingPlaygrounds, expect} from './util';
-import {NON_EXISTENT_COLLECTION_ID} from './eth/util/playgrounds/types';
+import {NON_EXISTENT_COLLECTION_ID} from './util/playgrounds/types';
describe('Integration Test transferFrom(from, recipient, collection_id, item_id, value):', () => {
let alice: IKeyringPair;
tests/src/util/playgrounds/types.tsdiffbeforeafterboth1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// SPDX-License-Identifier: Apache-2.034import {IKeyringPair} from '@polkadot/types/types';56export interface IEvent {7 section: string;8 method: string;9 index: [number, number] | string;10 data: any[];11 phase: {applyExtrinsic: number} | 'Initialization',12}1314export interface ITransactionResult {15 status: 'Fail' | 'Success';16 result: {17 dispatchError: any,18 events: {19 phase: any, // {ApplyExtrinsic: number} | 'Initialization',20 event: IEvent;21 }[];22 },23 blockHash: string,24 moduleError?: string | object;25}2627export interface ISubscribeBlockEventsData {28 number: number;29 hash: string;30 timestamp: number;31 events: IEvent[];32}3334export interface ILogger {35 log: (msg: any, level?: string) => void;36 level: {37 ERROR: 'ERROR';38 WARNING: 'WARNING';39 INFO: 'INFO';40 [key: string]: string;41 }42}4344export interface IUniqueHelperLog {45 executedAt: number;46 executionTime: number;47 type: 'extrinsic' | 'rpc';48 status: 'Fail' | 'Success';49 call: string;50 params: any[];51 moduleError?: string;52 dispatchError?: any;53 events?: any;54}5556export interface IApiListeners {57 connected?: (...args: any[]) => any;58 disconnected?: (...args: any[]) => any;59 error?: (...args: any[]) => any;60 ready?: (...args: any[]) => any;61 decorated?: (...args: any[]) => any;62}6364export type ICrossAccountId = {65 Substrate: TSubstrateAccount;66} | {67 Ethereum: TEthereumAccount;68}6970export type ICrossAccountIdLower = {71 substrate: TSubstrateAccount;72} | {73 ethereum: TEthereumAccount;74};7576export interface IEthCrossAccountId {77 0: TEthereumAccount;78 1: TSubstrateAccount;79 eth: TEthereumAccount;80 sub: TSubstrateAccount;81}8283export interface ICollectionLimits {84 accountTokenOwnershipLimit?: number | null;85 sponsoredDataSize?: number | null;86 sponsoredDataRateLimit?: {blocks: number} | {sponsoringDisabled: null} | null;87 tokenLimit?: number | null;88 sponsorTransferTimeout?: number | null;89 sponsorApproveTimeout?: number | null;90 ownerCanTransfer?: boolean | null;91 ownerCanDestroy?: boolean | null;92 transfersEnabled?: boolean | null;93}9495export interface INestingPermissions {96 tokenOwner?: boolean;97 collectionAdmin?: boolean;98 restricted?: number[] | null;99}100101export interface ICollectionPermissions {102 access?: 'Normal' | 'AllowList';103 mintMode?: boolean;104 nesting?: INestingPermissions;105}106107export interface IProperty {108 key: string;109 value?: string;110}111112export interface ITokenPropertyPermission {113 key: string;114 permission: {115 mutable?: boolean;116 tokenOwner?: boolean;117 collectionAdmin?: boolean;118 }119}120121export interface IToken {122 collectionId: number;123 tokenId: number;124}125126export interface IBlock {127 extrinsics: IExtrinsic[]128 header: {129 parentHash: string,130 number: number,131 };132}133134export interface IExtrinsic {135 isSigned: boolean,136 method: {137 method: string,138 section: string,139 args: any[]140 }141}142143export interface ICollectionCreationOptions {144 name?: string | number[];145 description?: string | number[];146 tokenPrefix?: string | number[];147 mode?: {148 nft?: null;149 refungible?: null;150 fungible?: number;151 }152 permissions?: ICollectionPermissions;153 properties?: IProperty[];154 tokenPropertyPermissions?: ITokenPropertyPermission[];155 limits?: ICollectionLimits;156 pendingSponsor?: TSubstrateAccount;157}158159export interface IChainProperties {160 ss58Format: number;161 tokenDecimals: number[];162 tokenSymbol: string[]163}164165export interface ISubstrateBalance {166 free: bigint,167 reserved: bigint,168 frozen: bigint,169}170171export interface IStakingInfo {172 block: bigint,173 amount: bigint,174}175176export interface IPovInfo {177 proofSize: number,178 compactProofSize: number,179 compressedProofSize: number,180 results: any[],181 kv: any,182}183184export interface ISchedulerOptions {185 scheduledId?: string,186 priority?: number,187 periodic?: {188 period: number,189 repetitions: number,190 },191}192193export interface IForeignAssetMetadata {194 name?: number | Uint8Array,195 symbol?: string,196 decimals?: number,197 minimalBalance?: bigint,198}199200export interface MoonbeamAssetInfo {201 location: any,202 metadata: {203 name: string,204 symbol: string,205 decimals: number,206 isFrozen: boolean,207 minimalBalance: bigint,208 },209 existentialDeposit: bigint,210 isSufficient: boolean,211 unitsPerSecond: bigint,212 numAssetsWeightHint: number,213}214215export interface AcalaAssetMetadata {216 name: string,217 symbol: string,218 decimals: number,219 minimalBalance: bigint,220}221222export interface DemocracyStandardAccountVote {223 balance: bigint,224 vote: {225 aye: boolean,226 conviction: number,227 },228}229230export type TSubstrateAccount = string;231export type TEthereumAccount = string;232export type TApiAllowedListeners = 'connected' | 'disconnected' | 'error' | 'ready' | 'decorated';233export type TUniqueNetworks = 'opal' | 'quartz' | 'unique';234export type TSiblingNetworkds = 'moonbeam' | 'moonriver' | 'acala' | 'karura' | 'westmint';235export type TRelayNetworks = 'rococo' | 'westend';236export type TNetworks = TUniqueNetworks | TSiblingNetworkds | TRelayNetworks;237export type TSigner = IKeyringPair; // | 'string'238export type TCollectionMode = 'nft' | 'rft' | 'ft';1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// SPDX-License-Identifier: Apache-2.034import {IKeyringPair} from '@polkadot/types/types';56export const NON_EXISTENT_COLLECTION_ID = 4_294_967_295;78export interface IEvent {9 section: string;10 method: string;11 index: [number, number] | string;12 data: any[];13 phase: {applyExtrinsic: number} | 'Initialization',14}1516export interface ITransactionResult {17 status: 'Fail' | 'Success';18 result: {19 dispatchError: any,20 events: {21 phase: any, // {ApplyExtrinsic: number} | 'Initialization',22 event: IEvent;23 }[];24 },25 blockHash: string,26 moduleError?: string | object;27}2829export interface ISubscribeBlockEventsData {30 number: number;31 hash: string;32 timestamp: number;33 events: IEvent[];34}3536export interface ILogger {37 log: (msg: any, level?: string) => void;38 level: {39 ERROR: 'ERROR';40 WARNING: 'WARNING';41 INFO: 'INFO';42 [key: string]: string;43 }44}4546export interface IUniqueHelperLog {47 executedAt: number;48 executionTime: number;49 type: 'extrinsic' | 'rpc';50 status: 'Fail' | 'Success';51 call: string;52 params: any[];53 moduleError?: string;54 dispatchError?: any;55 events?: any;56}5758export interface IApiListeners {59 connected?: (...args: any[]) => any;60 disconnected?: (...args: any[]) => any;61 error?: (...args: any[]) => any;62 ready?: (...args: any[]) => any;63 decorated?: (...args: any[]) => any;64}6566export type ICrossAccountId = {67 Substrate: TSubstrateAccount;68} | {69 Ethereum: TEthereumAccount;70}7172export type ICrossAccountIdLower = {73 substrate: TSubstrateAccount;74} | {75 ethereum: TEthereumAccount;76};7778export interface IEthCrossAccountId {79 0: TEthereumAccount;80 1: TSubstrateAccount;81 eth: TEthereumAccount;82 sub: TSubstrateAccount;83}8485export interface ICollectionLimits {86 accountTokenOwnershipLimit?: number | null;87 sponsoredDataSize?: number | null;88 sponsoredDataRateLimit?: {blocks: number} | {sponsoringDisabled: null} | null;89 tokenLimit?: number | null;90 sponsorTransferTimeout?: number | null;91 sponsorApproveTimeout?: number | null;92 ownerCanTransfer?: boolean | null;93 ownerCanDestroy?: boolean | null;94 transfersEnabled?: boolean | null;95}9697export interface INestingPermissions {98 tokenOwner?: boolean;99 collectionAdmin?: boolean;100 restricted?: number[] | null;101}102103export interface ICollectionPermissions {104 access?: 'Normal' | 'AllowList';105 mintMode?: boolean;106 nesting?: INestingPermissions;107}108109export interface IProperty {110 key: string;111 value?: string;112}113114export interface ITokenPropertyPermission {115 key: string;116 permission: {117 mutable?: boolean;118 tokenOwner?: boolean;119 collectionAdmin?: boolean;120 }121}122123export interface IToken {124 collectionId: number;125 tokenId: number;126}127128export interface IBlock {129 extrinsics: IExtrinsic[]130 header: {131 parentHash: string,132 number: number,133 };134}135136export interface IExtrinsic {137 isSigned: boolean,138 method: {139 method: string,140 section: string,141 args: any[]142 }143}144145export interface ICollectionCreationOptions {146 name?: string | number[];147 description?: string | number[];148 tokenPrefix?: string | number[];149 mode?: {150 nft?: null;151 refungible?: null;152 fungible?: number;153 }154 permissions?: ICollectionPermissions;155 properties?: IProperty[];156 tokenPropertyPermissions?: ITokenPropertyPermission[];157 limits?: ICollectionLimits;158 pendingSponsor?: TSubstrateAccount;159}160161export interface IChainProperties {162 ss58Format: number;163 tokenDecimals: number[];164 tokenSymbol: string[]165}166167export interface ISubstrateBalance {168 free: bigint,169 reserved: bigint,170 frozen: bigint,171}172173export interface IStakingInfo {174 block: bigint,175 amount: bigint,176}177178export interface IPovInfo {179 proofSize: number,180 compactProofSize: number,181 compressedProofSize: number,182 results: any[],183 kv: any,184}185186export interface ISchedulerOptions {187 scheduledId?: string,188 priority?: number,189 periodic?: {190 period: number,191 repetitions: number,192 },193}194195export interface IForeignAssetMetadata {196 name?: number | Uint8Array,197 symbol?: string,198 decimals?: number,199 minimalBalance?: bigint,200}201202export interface MoonbeamAssetInfo {203 location: any,204 metadata: {205 name: string,206 symbol: string,207 decimals: number,208 isFrozen: boolean,209 minimalBalance: bigint,210 },211 existentialDeposit: bigint,212 isSufficient: boolean,213 unitsPerSecond: bigint,214 numAssetsWeightHint: number,215}216217export interface AcalaAssetMetadata {218 name: string,219 symbol: string,220 decimals: number,221 minimalBalance: bigint,222}223224export interface DemocracyStandardAccountVote {225 balance: bigint,226 vote: {227 aye: boolean,228 conviction: number,229 },230}231232export type TSubstrateAccount = string;233export type TEthereumAccount = string;234export type TApiAllowedListeners = 'connected' | 'disconnected' | 'error' | 'ready' | 'decorated';235export type TUniqueNetworks = 'opal' | 'quartz' | 'unique';236export type TSiblingNetworkds = 'moonbeam' | 'moonriver' | 'acala' | 'karura' | 'westmint';237export type TRelayNetworks = 'rococo' | 'westend';238export type TNetworks = TUniqueNetworks | TSiblingNetworkds | TRelayNetworks;239export type TSigner = IKeyringPair; // | 'string'240export type TCollectionMode = 'nft' | 'rft' | 'ft';