--- a/Cargo.lock +++ b/Cargo.lock @@ -113,6 +113,20 @@ checksum = "508b352bb5c066aac251f6daf6b36eccd03e8a88e8081cd44959ea277a3af9a8" [[package]] +name = "app-promotion-rpc" +version = "0.1.0" +dependencies = [ + "pallet-common", + "pallet-evm", + "parity-scale-codec 3.1.5", + "sp-api", + "sp-core", + "sp-runtime", + "sp-std", + "up-data-structs", +] + +[[package]] name = "approx" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5127,6 +5141,7 @@ name = "opal-runtime" version = "0.9.27" dependencies = [ + "app-promotion-rpc", "cumulus-pallet-aura-ext", "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", @@ -8358,6 +8373,7 @@ name = "quartz-runtime" version = "0.9.27" dependencies = [ + "app-promotion-rpc", "cumulus-pallet-aura-ext", "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", @@ -8381,6 +8397,7 @@ "hex-literal", "log", "orml-vesting", + "pallet-app-promotion", "pallet-aura", "pallet-balances", "pallet-base-fee", @@ -12132,6 +12149,7 @@ version = "0.1.3" dependencies = [ "anyhow", + "app-promotion-rpc", "jsonrpsee", "pallet-common", "pallet-evm", @@ -12210,6 +12228,7 @@ name = "unique-node" version = "0.9.27" dependencies = [ + "app-promotion-rpc", "clap", "cumulus-client-cli", "cumulus-client-collator", @@ -12298,6 +12317,7 @@ name = "unique-rpc" version = "0.1.1" dependencies = [ + "app-promotion-rpc", "fc-db", "fc-mapping-sync", "fc-rpc", @@ -12347,6 +12367,7 @@ name = "unique-runtime" version = "0.9.27" dependencies = [ + "app-promotion-rpc", "cumulus-pallet-aura-ext", "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", @@ -12370,6 +12391,7 @@ "hex-literal", "log", "orml-vesting", + "pallet-app-promotion", "pallet-aura", "pallet-balances", "pallet-base-fee", --- a/client/rpc/Cargo.toml +++ b/client/rpc/Cargo.toml @@ -8,6 +8,7 @@ pallet-common = { default-features = false, path = '../../pallets/common' } up-data-structs = { default-features = false, path = '../../primitives/data-structs' } up-rpc = { path = "../../primitives/rpc" } +app-promotion-rpc = { path = "../../primitives/app_promotion_rpc"} rmrk-rpc = { path = "../../primitives/rmrk-rpc" } codec = { package = "parity-scale-codec", version = "3.1.2" } jsonrpsee = { version = "0.14.0", features = ["server", "macros"] } --- a/client/rpc/src/lib.rs +++ b/client/rpc/src/lib.rs @@ -31,6 +31,7 @@ use sp_api::{BlockId, BlockT, ProvideRuntimeApi, ApiExt}; use sp_blockchain::HeaderBackend; use up_rpc::UniqueApi as UniqueRuntimeApi; +use app_promotion_rpc::AppPromotionApi as AppPromotionRuntimeApi; // RMRK use rmrk_rpc::RmrkApi as RmrkRuntimeApi; @@ -38,6 +39,7 @@ RmrkCollectionId, RmrkNftId, RmrkBaseId, RmrkNftChild, RmrkThemeName, RmrkResourceId, }; +pub use app_promotion_unique_rpc::AppPromotionApiServer; pub use rmrk_unique_rpc::RmrkApiServer; #[rpc(server)] @@ -244,39 +246,48 @@ token_id: TokenId, at: Option, ) -> Result>; +} + +mod app_promotion_unique_rpc { + use super::*; + + #[rpc(server)] + #[async_trait] + pub trait AppPromotionApi { + /// Returns the total amount of staked tokens. + #[method(name = "appPromotion_totalStaked")] + fn total_staked(&self, staker: Option, at: Option) + -> Result; - /// Returns the total amount of staked tokens. - #[method(name = "unique_totalStaked")] - fn total_staked(&self, staker: Option, at: Option) - -> Result; + ///Returns the total amount of staked tokens per block when staked. + #[method(name = "appPromotion_totalStakedPerBlock")] + fn total_staked_per_block( + &self, + staker: CrossAccountId, + at: Option, + ) -> Result>; - ///Returns the total amount of staked tokens per block when staked. - #[method(name = "unique_totalStakedPerBlock")] - fn total_staked_per_block( - &self, - staker: CrossAccountId, - at: Option, - ) -> Result>; + /// Returns the total amount locked by staking tokens. + #[method(name = "appPromotion_totalStakingLocked")] + fn total_staking_locked(&self, staker: CrossAccountId, at: Option) + -> Result; - /// Returns the total amount locked by staking tokens. - #[method(name = "unique_totalStakingLocked")] - fn total_staking_locked(&self, staker: CrossAccountId, at: Option) - -> Result; + /// Returns the total amount of tokens pending withdrawal from staking. + #[method(name = "appPromotion_pendingUnstake")] + fn pending_unstake( + &self, + staker: Option, + at: Option, + ) -> Result; - /// Returns the total amount of tokens pending withdrawal from staking. - #[method(name = "unique_pendingUnstake")] - fn pending_unstake( - &self, - staker: Option, - at: Option, - ) -> Result; - /// Returns the total amount of tokens pending withdrawal from staking per block. - #[method(name = "unique_pendingUnstakePerBlock")] - fn pending_unstake_per_block( - &self, - staker: CrossAccountId, - at: Option, - ) -> Result>; + /// Returns the total amount of tokens pending withdrawal from staking per block. + #[method(name = "appPromotion_pendingUnstakePerBlock")] + fn pending_unstake_per_block( + &self, + staker: CrossAccountId, + at: Option, + ) -> Result>; + } } mod rmrk_unique_rpc { @@ -415,6 +426,20 @@ } } +pub struct AppPromotion { + client: Arc, + _marker: std::marker::PhantomData

, +} + +impl AppPromotion { + pub fn new(client: Arc) -> Self { + Self { + client, + _marker: Default::default(), + } + } +} + pub struct Rmrk { client: Arc, _marker: std::marker::PhantomData

, @@ -474,6 +499,12 @@ }; } +macro_rules! app_promotion_api { + () => { + dyn AppPromotionRuntimeApi + }; +} + macro_rules! rmrk_api { () => { dyn RmrkRuntimeApi @@ -556,7 +587,20 @@ pass_method!(effective_collection_limits(collection_id: CollectionId) -> Option, unique_api); pass_method!(total_pieces(collection_id: CollectionId, token_id: TokenId) -> Option => |o| o.map(|number| number.to_string()) , unique_api); pass_method!(token_owners(collection: CollectionId, token: TokenId) -> Vec, unique_api); - pass_method!(total_staked(staker: Option) -> String => |v| v.to_string(), unique_api); +} + +impl + app_promotion_unique_rpc::AppPromotionApiServer<::Hash, BlockNumber, CrossAccountId, AccountId> + for AppPromotion +where + Block: BlockT, + BlockNumber: Decode + Member + AtLeast32BitUnsigned, + AccountId: Decode, + C: 'static + ProvideRuntimeApi + HeaderBackend, + C::Api: AppPromotionRuntimeApi, + CrossAccountId: pallet_evm::account::CrossAccountId, +{ + pass_method!(total_staked(staker: Option) -> String => |v| v.to_string(), app_promotion_api); pass_method!(total_staked_per_block(staker: CrossAccountId) -> Vec<(BlockNumber, String)> => |v| v .into_iter() --- a/node/cli/Cargo.toml +++ b/node/cli/Cargo.toml @@ -318,6 +318,7 @@ pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.27" } unique-rpc = { default-features = false, path = "../rpc" } +app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false} rmrk-rpc = { path = "../../primitives/rmrk-rpc" } [features] --- a/node/cli/src/service.rs +++ b/node/cli/src/service.rs @@ -364,6 +364,7 @@ + pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi + sp_api::ApiExt> + up_rpc::UniqueApi + + app_promotion_rpc::AppPromotionApi + rmrk_rpc::RmrkApi< Block, AccountId, @@ -665,6 +666,7 @@ + pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi + sp_api::ApiExt> + up_rpc::UniqueApi + + app_promotion_rpc::AppPromotionApi + rmrk_rpc::RmrkApi< Block, AccountId, @@ -809,6 +811,7 @@ + pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi + sp_api::ApiExt> + up_rpc::UniqueApi + + app_promotion_rpc::AppPromotionApi + rmrk_rpc::RmrkApi< Block, AccountId, --- a/node/rpc/Cargo.toml +++ b/node/rpc/Cargo.toml @@ -53,6 +53,7 @@ pallet-unique = { path = "../../pallets/unique" } uc-rpc = { path = "../../client/rpc" } up-rpc = { path = "../../primitives/rpc" } +app-promotion-rpc = { path = "../../primitives/app_promotion_rpc"} rmrk-rpc = { path = "../../primitives/rmrk-rpc" } up-data-structs = { default-features = false, path = "../../primitives/data-structs" } --- a/node/rpc/src/lib.rs +++ b/node/rpc/src/lib.rs @@ -38,6 +38,7 @@ use sp_block_builder::BlockBuilder; use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}; use sc_service::TransactionPool; +use uc_rpc::AppPromotion; use std::{collections::BTreeMap, sync::Arc}; use up_common::types::opaque::{Hash, AccountId, RuntimeInstance, Index, Block, BlockNumber, Balance}; @@ -147,6 +148,7 @@ C::Api: fp_rpc::ConvertTransactionRuntimeApi, C::Api: up_rpc::UniqueApi::CrossAccountId, AccountId>, + C::Api: app_promotion_rpc::AppPromotionApi::CrossAccountId, AccountId>, C::Api: rmrk_rpc::RmrkApi< Block, AccountId, @@ -171,6 +173,7 @@ EthPubSubApiServer, EthSigner, Net, NetApiServer, Web3, Web3ApiServer, }; use uc_rpc::{UniqueApiServer, Unique}; + use uc_rpc::{AppPromotionApiServer, AppPromotion}; #[cfg(not(feature = "unique-runtime"))] use uc_rpc::{RmrkApiServer, Rmrk}; @@ -229,6 +232,9 @@ io.merge(Unique::new(client.clone()).into_rpc())?; + // #[cfg(not(feature = "unique-runtime"))] + io.merge(AppPromotion::new(client.clone()).into_rpc())?; + #[cfg(not(feature = "unique-runtime"))] io.merge(Rmrk::new(client.clone()).into_rpc())?; --- /dev/null +++ b/primitives/app_promotion_rpc/CHANGELOG.md @@ -0,0 +1,5 @@ +# Change Log + +All notable changes to this project will be documented in this file. + + --- /dev/null +++ b/primitives/app_promotion_rpc/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "app-promotion-rpc" +version = "0.1.0" +license = "GPLv3" +edition = "2021" + +[dependencies] +pallet-common = { default-features = false, path = '../../pallets/common' } +up-data-structs = { default-features = false, path = '../data-structs' } +codec = { package = "parity-scale-codec", version = "3.1.2", default-features = false, features = [ + "derive", +] } +sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.27" } +sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.27" } +sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.27" } +sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.27" } +pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.27" } + +[features] +default = ["std"] +std = [ + "codec/std", + "sp-core/std", + "sp-std/std", + "sp-api/std", + "sp-runtime/std", + "pallet-common/std", + "up-data-structs/std", +] --- /dev/null +++ b/primitives/app_promotion_rpc/src/lib.rs @@ -0,0 +1,47 @@ +// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. +// This file is part of Unique Network. + +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Unique Network is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Unique Network. If not, see . + +#![cfg_attr(not(feature = "std"), no_std)] + +use up_data_structs::{ + CollectionId, TokenId, RpcCollection, CollectionStats, CollectionLimits, Property, + PropertyKeyPermission, TokenData, TokenChild, +}; + +use sp_std::vec::Vec; +use codec::Decode; +use sp_runtime::{ + DispatchError, + traits::{AtLeast32BitUnsigned, Member}, +}; + +type Result = core::result::Result; + +sp_api::decl_runtime_apis! { + #[api_version(2)] + /// Trait for generate rpc. + pub trait AppPromotionApi where + BlockNumber: Decode + Member + AtLeast32BitUnsigned, + AccountId: Decode, + CrossAccountId: pallet_evm::account::CrossAccountId, + { + fn total_staked(staker: Option) -> Result; + fn total_staked_per_block(staker: CrossAccountId) -> Result>; + fn total_staking_locked(staker: CrossAccountId) -> Result; + fn pending_unstake(staker: Option) -> Result; + fn pending_unstake_per_block(staker: CrossAccountId) -> Result>; + } +} --- a/primitives/rpc/src/lib.rs +++ b/primitives/rpc/src/lib.rs @@ -127,11 +127,5 @@ fn total_pieces(collection_id: CollectionId, token_id: TokenId) -> Result>; fn token_owners(collection: CollectionId, token: TokenId) -> Result>; - fn total_staked(staker: Option) -> Result; - fn total_staked_per_block(staker: CrossAccountId) -> Result>; - fn total_staking_locked(staker: CrossAccountId) -> Result; - fn pending_unstake(staker: Option) -> Result; - fn pending_unstake_per_block(staker: CrossAccountId) -> Result>; - } } --- a/runtime/common/runtime_apis.rs +++ b/runtime/common/runtime_apis.rs @@ -187,25 +187,47 @@ fn total_pieces(collection: CollectionId, token_id: TokenId) -> Result, DispatchError> { dispatch_unique_runtime!(collection.total_pieces(token_id)) } + } + impl app_promotion_rpc::AppPromotionApi for Runtime { fn total_staked(staker: Option) -> Result { - Ok(>::cross_id_total_staked(staker).unwrap_or_default()) - } + #[cfg(not(feature = "app-promotion"))] + return unsupported!(); + #[cfg(feature = "app-promotion")] + return Ok(>::cross_id_total_staked(staker).unwrap_or_default()); + } + fn total_staked_per_block(staker: CrossAccountId) -> Result, DispatchError> { - Ok(>::cross_id_total_staked_per_block(staker)) + #[cfg(not(feature = "app-promotion"))] + return unsupported!(); + + #[cfg(feature = "app-promotion")] + return Ok(>::cross_id_total_staked_per_block(staker)); } fn total_staking_locked(staker: CrossAccountId) -> Result { - Ok(>::cross_id_locked_balance(staker)) + #[cfg(not(feature = "app-promotion"))] + return unsupported!(); + + #[cfg(feature = "app-promotion")] + return Ok(>::cross_id_locked_balance(staker)); } fn pending_unstake(staker: Option) -> Result { - Ok(>::cross_id_pending_unstake(staker)) + #[cfg(not(feature = "app-promotion"))] + return unsupported!(); + + #[cfg(feature = "app-promotion")] + return Ok(>::cross_id_pending_unstake(staker)); } fn pending_unstake_per_block(staker: CrossAccountId) -> Result, DispatchError> { - Ok(>::cross_id_pending_unstake_per_block(staker)) + #[cfg(not(feature = "app-promotion"))] + return unsupported!(); + + #[cfg(feature = "app-promotion")] + return Ok(>::cross_id_pending_unstake_per_block(staker)) } } --- a/runtime/opal/Cargo.toml +++ b/runtime/opal/Cargo.toml @@ -83,6 +83,7 @@ 'pallet-base-fee/std', 'fp-rpc/std', 'up-rpc/std', + 'app-promotion-rpc/std', 'fp-evm-mapping/std', 'fp-self-contained/std', 'parachain-info/std', @@ -414,6 +415,7 @@ derivative = "2.2.0" pallet-unique = { path = '../../pallets/unique', default-features = false } up-rpc = { path = "../../primitives/rpc", default-features = false } +app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false} rmrk-rpc = { path = "../../primitives/rmrk-rpc", default-features = false } fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.27" } pallet-inflation = { path = '../../pallets/inflation', default-features = false } --- a/runtime/quartz/Cargo.toml +++ b/runtime/quartz/Cargo.toml @@ -82,6 +82,7 @@ 'pallet-base-fee/std', 'fp-rpc/std', 'up-rpc/std', + 'app-promotion-rpc/std', 'fp-evm-mapping/std', 'fp-self-contained/std', 'parachain-info/std', @@ -416,8 +417,10 @@ derivative = "2.2.0" pallet-unique = { path = '../../pallets/unique', default-features = false } up-rpc = { path = "../../primitives/rpc", default-features = false } +app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false} fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.27" } pallet-inflation = { path = '../../pallets/inflation', default-features = false } +pallet-app-promotion = { path = '../../pallets/app-promotion', default-features = false } up-data-structs = { path = '../../primitives/data-structs', default-features = false } pallet-configuration = { default-features = false, path = "../../pallets/configuration" } pallet-common = { default-features = false, path = "../../pallets/common" } --- a/runtime/unique/Cargo.toml +++ b/runtime/unique/Cargo.toml @@ -83,6 +83,7 @@ 'pallet-base-fee/std', 'fp-rpc/std', 'up-rpc/std', + 'app-promotion-rpc/std', 'fp-evm-mapping/std', 'fp-self-contained/std', 'parachain-info/std', @@ -409,8 +410,10 @@ derivative = "2.2.0" pallet-unique = { path = '../../pallets/unique', default-features = false } up-rpc = { path = "../../primitives/rpc", default-features = false } +app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false} rmrk-rpc = { path = "../../primitives/rmrk-rpc", default-features = false } pallet-inflation = { path = '../../pallets/inflation', default-features = false } +pallet-app-promotion = { path = '../../pallets/app-promotion', default-features = false } up-data-structs = { path = '../../primitives/data-structs', default-features = false } pallet-configuration = { default-features = false, path = "../../pallets/configuration" } pallet-common = { default-features = false, path = "../../pallets/common" } --- /dev/null +++ b/tests/src/interfaces/appPromotion/definitions.ts @@ -0,0 +1,66 @@ +// Copyright 2019-2022 Unique Network (Gibraltar) Ltd. +// This file is part of Unique Network. + +// Unique Network is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Unique Network is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Unique Network. If not, see . + +type RpcParam = { + name: string; + type: string; + isOptional?: true; +}; + +const CROSS_ACCOUNT_ID_TYPE = 'PalletEvmAccountBasicCrossAccountIdRepr'; + +const collectionParam = {name: 'collection', type: 'u32'}; +const tokenParam = {name: 'tokenId', type: 'u32'}; +const propertyKeysParam = {name: 'propertyKeys', type: 'Vec', isOptional: true}; +const crossAccountParam = (name = 'account') => ({name, type: CROSS_ACCOUNT_ID_TYPE}); +const atParam = {name: 'at', type: 'Hash', isOptional: true}; + +const fun = (description: string, params: RpcParam[], type: string) => ({ + description, + params: [...params, atParam], + type, +}); + +export default { + types: {}, + rpc: { + totalStaked: fun( + 'Returns the total amount of staked tokens', + [{name: 'staker', type: CROSS_ACCOUNT_ID_TYPE, isOptional: true}], + 'u128', + ), + totalStakedPerBlock: fun( + 'Returns the total amount of staked tokens per block when staked', + [crossAccountParam('staker')], + 'Vec<(u32, u128)>', + ), + totalStakingLocked: fun( + 'Return the total amount locked by staking tokens', + [crossAccountParam('staker')], + 'u128', + ), + pendingUnstake: fun( + 'Returns the total amount of unstaked tokens', + [{name: 'staker', type: CROSS_ACCOUNT_ID_TYPE, isOptional: true}], + 'u128', + ), + pendingUnstakePerBlock: fun( + 'Returns the total amount of unstaked tokens per block', + [crossAccountParam('staker')], + 'Vec<(u32, u128)>', + ), + }, +}; --- /dev/null +++ b/tests/src/interfaces/appPromotion/index.ts @@ -0,0 +1,4 @@ +// Auto-generated via `yarn polkadot-types-from-defs`, do not edit +/* eslint-disable */ + +export * from './types'; --- /dev/null +++ b/tests/src/interfaces/appPromotion/types.ts @@ -0,0 +1,4 @@ +// Auto-generated via `yarn polkadot-types-from-defs`, do not edit +/* eslint-disable */ + +export type PHANTOM_APPPROMOTION = 'appPromotion'; --- a/tests/src/interfaces/augment-api-errors.ts +++ b/tests/src/interfaces/augment-api-errors.ts @@ -269,7 +269,7 @@ **/ NoPendingSponsor: AugmentedError; /** - * This method is only executable by owner. + * This method is only executable by contract owner **/ NoPermission: AugmentedError; /** @@ -278,7 +278,13 @@ [key: string]: AugmentedError; }; evmMigration: { + /** + * Migration of this account is not yet started, or already finished. + **/ AccountIsNotMigrating: AugmentedError; + /** + * Can only migrate to empty address. + **/ AccountNotEmpty: AugmentedError; /** * Generic error --- a/tests/src/interfaces/augment-api-query.ts +++ b/tests/src/interfaces/augment-api-query.ts @@ -335,7 +335,7 @@ * * Currently used to store RMRK data. **/ - tokenAuxProperties: AugmentedQuery Observable>, [u32, u32, UpDataStructsPropertyScope, Bytes]> & QueryableStorageEntry; + tokenAuxProperties: AugmentedQuery Observable>, [u32, u32, UpDataStructsPropertyScope, Bytes]> & QueryableStorageEntry; /** * Used to enumerate token's children. **/ --- a/tests/src/interfaces/augment-api-rpc.ts +++ b/tests/src/interfaces/augment-api-rpc.ts @@ -35,6 +35,28 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { interface RpcInterface { + appPromotion: { + /** + * Returns the total amount of unstaked tokens + **/ + pendingUnstake: AugmentedRpc<(staker?: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; + /** + * Returns the total amount of unstaked tokens per block + **/ + pendingUnstakePerBlock: AugmentedRpc<(staker: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>>; + /** + * Returns the total amount of staked tokens + **/ + totalStaked: AugmentedRpc<(staker?: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; + /** + * Returns the total amount of staked tokens per block when staked + **/ + totalStakedPerBlock: AugmentedRpc<(staker: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>>; + /** + * Return the total amount locked by staking tokens + **/ + totalStakingLocked: AugmentedRpc<(staker: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; + }; author: { /** * Returns true if the keystore has private keys for the given public key and key type. @@ -702,15 +724,7 @@ * Get the number of blocks until sponsoring a transaction is available **/ nextSponsored: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, account: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>; - /** - * Returns the total amount of unstaked tokens - **/ - pendingUnstake: AugmentedRpc<(staker?: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; /** - * Returns the total amount of unstaked tokens per block - **/ - pendingUnstakePerBlock: AugmentedRpc<(staker: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>>; - /** * Get property permissions, optionally limited to the provided keys **/ propertyPermissions: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, propertyKeys?: Vec | (Text | string)[], at?: Hash | string | Uint8Array) => Observable>>; @@ -746,18 +760,6 @@ * Get the total amount of pieces of an RFT **/ totalPieces: AugmentedRpc<(collection: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>; - /** - * Returns the total amount of staked tokens - **/ - totalStaked: AugmentedRpc<(staker?: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; - /** - * Returns the total amount of staked tokens per block when staked - **/ - totalStakedPerBlock: AugmentedRpc<(staker: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>>>; - /** - * Return the total amount locked by staking tokens - **/ - totalStakingLocked: AugmentedRpc<(staker: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, at?: Hash | string | Uint8Array) => Observable>; /** * Get the amount of distinctive tokens present in a collection **/ --- a/tests/src/interfaces/augment-api-tx.ts +++ b/tests/src/interfaces/augment-api-tx.ts @@ -181,8 +181,21 @@ [key: string]: SubmittableExtrinsicFunction; }; evmMigration: { + /** + * Start contract migration, inserts contract stub at target address, + * and marks account as pending, allowing to insert storage + **/ begin: AugmentedSubmittable<(address: H160 | string | Uint8Array) => SubmittableExtrinsic, [H160]>; + /** + * Finish contract migration, allows it to be called. + * It is not possible to alter contract storage via [`Self::set_data`] + * after this call. + **/ finish: AugmentedSubmittable<(address: H160 | string | Uint8Array, code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [H160, Bytes]>; + /** + * Insert items into contract storage, this method can be called + * multiple times + **/ setData: AugmentedSubmittable<(address: H160 | string | Uint8Array, data: Vec> | ([H256 | string | Uint8Array, H256 | string | Uint8Array])[]) => SubmittableExtrinsic, [H160, Vec>]>; /** * Generic tx @@ -372,7 +385,7 @@ stopAppPromotion: AugmentedSubmittable<() => SubmittableExtrinsic, []>; stopSponsoringCollection: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; stopSponsoringContract: AugmentedSubmittable<(contractId: H160 | string | Uint8Array) => SubmittableExtrinsic, [H160]>; - unstake: AugmentedSubmittable<(amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; + unstake: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** * Generic tx **/ --- a/tests/src/interfaces/default/types.ts +++ b/tests/src/interfaces/default/types.ts @@ -822,9 +822,6 @@ readonly amount: u128; } & Struct; readonly isUnstake: boolean; - readonly asUnstake: { - readonly amount: u128; - } & Struct; readonly isSponsorCollection: boolean; readonly asSponsorCollection: { readonly collectionId: u32; @@ -2639,8 +2636,7 @@ export interface UpDataStructsPropertyScope extends Enum { readonly isNone: boolean; readonly isRmrk: boolean; - readonly isEth: boolean; - readonly type: 'None' | 'Rmrk' | 'Eth'; + readonly type: 'None' | 'Rmrk'; } /** @name UpDataStructsRpcCollection */ --- a/tests/src/interfaces/definitions.ts +++ b/tests/src/interfaces/definitions.ts @@ -15,5 +15,6 @@ // along with Unique Network. If not, see . export {default as unique} from './unique/definitions'; +export {default as appPromotion} from './appPromotion/definitions'; export {default as rmrk} from './rmrk/definitions'; export {default as default} from './default/definitions'; \ No newline at end of file --- a/tests/src/interfaces/lookup.ts +++ b/tests/src/interfaces/lookup.ts @@ -2467,9 +2467,7 @@ stake: { amount: 'u128', }, - unstake: { - amount: 'u128', - }, + unstake: 'Null', sponsor_collection: { collectionId: 'u32', }, @@ -3078,7 +3076,7 @@ * Lookup403: up_data_structs::PropertyScope **/ UpDataStructsPropertyScope: { - _enum: ['None', 'Rmrk', 'Eth'] + _enum: ['None', 'Rmrk'] }, /** * Lookup405: pallet_nonfungible::pallet::Error --- a/tests/src/interfaces/types-lookup.ts +++ b/tests/src/interfaces/types-lookup.ts @@ -2675,9 +2675,6 @@ readonly amount: u128; } & Struct; readonly isUnstake: boolean; - readonly asUnstake: { - readonly amount: u128; - } & Struct; readonly isSponsorCollection: boolean; readonly asSponsorCollection: { readonly collectionId: u32; @@ -3238,8 +3235,7 @@ interface UpDataStructsPropertyScope extends Enum { readonly isNone: boolean; readonly isRmrk: boolean; - readonly isEth: boolean; - readonly type: 'None' | 'Rmrk' | 'Eth'; + readonly type: 'None' | 'Rmrk'; } /** @name PalletNonfungibleError (405) */ --- a/tests/src/interfaces/types.ts +++ b/tests/src/interfaces/types.ts @@ -2,5 +2,6 @@ /* eslint-disable */ export * from './unique/types'; +export * from './appPromotion/types'; export * from './rmrk/types'; export * from './default/types'; --- a/tests/src/interfaces/unique/definitions.ts +++ b/tests/src/interfaces/unique/definitions.ts @@ -175,30 +175,5 @@ [collectionParam, tokenParam], 'Option', ), - totalStaked: fun( - 'Returns the total amount of staked tokens', - [{name: 'staker', type: CROSS_ACCOUNT_ID_TYPE, isOptional: true}], - 'u128', - ), - totalStakedPerBlock: fun( - 'Returns the total amount of staked tokens per block when staked', - [crossAccountParam('staker')], - 'Vec<(u32, u128)>', - ), - totalStakingLocked: fun( - 'Return the total amount locked by staking tokens', - [crossAccountParam('staker')], - 'u128', - ), - pendingUnstake: fun( - 'Returns the total amount of unstaked tokens', - [{name: 'staker', type: CROSS_ACCOUNT_ID_TYPE, isOptional: true}], - 'u128', - ), - pendingUnstakePerBlock: fun( - 'Returns the total amount of unstaked tokens per block', - [crossAccountParam('staker')], - 'Vec<(u32, u128)>', - ), }, }; --- a/tests/src/substrate/substrate-api.ts +++ b/tests/src/substrate/substrate-api.ts @@ -42,6 +42,7 @@ }, rpc: { unique: defs.unique.rpc, + appPromotion: defs.appPromotion.rpc, rmrk: defs.rmrk.rpc, eth: { feeHistory: { --- a/tests/src/util/playgrounds/unique.dev.ts +++ b/tests/src/util/playgrounds/unique.dev.ts @@ -35,6 +35,7 @@ }, rpc: { unique: defs.unique.rpc, + appPromotion: defs.appPromotion.rpc, rmrk: defs.rmrk.rpc, eth: { feeHistory: { --- a/tests/src/util/playgrounds/unique.ts +++ b/tests/src/util/playgrounds/unique.ts @@ -2027,24 +2027,24 @@ } async getTotalStaked(address?: ICrossAccountId): Promise { - if (address) return (await this.helper.callRpc('api.rpc.unique.totalStaked', [address])).toBigInt(); - return (await this.helper.callRpc('api.rpc.unique.totalStaked')).toBigInt(); + if (address) return (await this.helper.callRpc('api.rpc.appPromotion.totalStaked', [address])).toBigInt(); + return (await this.helper.callRpc('api.rpc.appPromotion.totalStaked')).toBigInt(); } async getTotalStakingLocked(address: ICrossAccountId): Promise { - return (await this.helper.callRpc('api.rpc.unique.totalStakingLocked', [address])).toBigInt(); + return (await this.helper.callRpc('api.rpc.appPromotion.totalStakingLocked', [address])).toBigInt(); } async getTotalStakedPerBlock(address: ICrossAccountId): Promise { - return (await this.helper.callRpc('api.rpc.unique.totalStakedPerBlock', [address])).map(([block, amount]: any[]) => [block.toBigInt(), amount.toBigInt()]); + return (await this.helper.callRpc('api.rpc.appPromotion.totalStakedPerBlock', [address])).map(([block, amount]: any[]) => [block.toBigInt(), amount.toBigInt()]); } async getPendingUnstake(address: ICrossAccountId): Promise { - return (await this.helper.callRpc('api.rpc.unique.pendingUnstake', [address])).toBigInt(); + return (await this.helper.callRpc('api.rpc.appPromotion.pendingUnstake', [address])).toBigInt(); } async getPendingUnstakePerBlock(address: ICrossAccountId): Promise { - return (await this.helper.callRpc('api.rpc.unique.pendingUnstakePerBlock', [address])).map(([block, amount]: any[]) => [block.toBigInt(), amount.toBigInt()]); + return (await this.helper.callRpc('api.rpc.appPromotion.pendingUnstakePerBlock', [address])).map(([block, amount]: any[]) => [block.toBigInt(), amount.toBigInt()]); } }