Rpc for pending rewards (#11831)

* rpc pending rewards

* commit

* remove unused imports

* fix

* fix

* fmt

* fix

* fmt

* fix

* docs

* docs & formatting

* better formatting

* temporary fix

* error handling

* fix?

* fmt

* use to_string

* fmt

* fixed error handling

* fix

* rpc added to client

* Update Cargo.toml

* Update Cargo.toml

* fix wrong reward counter

* expose function

* move implementation

* docs

* docs

* docs

* Update lib.rs

* Update lib.rs

* unexpose functions

* unused dependency

* update Cargo.lock

* Update frame/nomination-pools/src/lib.rs

* Update lib.rs

* Update lib.rs

* Update frame/nomination-pools/rpc/runtime-api/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* remove rpc

* remove rpc directory

* final fix

Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
Sergej Sakac
2022-07-26 11:06:48 +02:00
committed by GitHub
parent a37226d09e
commit cdfd2da02e
8 changed files with 96 additions and 1 deletions
+10
View File
@@ -4759,6 +4759,7 @@ dependencies = [
"pallet-multisig",
"pallet-nomination-pools",
"pallet-nomination-pools-benchmarking",
"pallet-nomination-pools-runtime-api",
"pallet-offences",
"pallet-offences-benchmarking",
"pallet-preimage",
@@ -5911,6 +5912,15 @@ dependencies = [
"sp-std",
]
[[package]]
name = "pallet-nomination-pools-runtime-api"
version = "1.0.0-dev"
dependencies = [
"parity-scale-codec",
"sp-api",
"sp-std",
]
[[package]]
name = "pallet-nomination-pools-test-staking"
version = "1.0.0"
+1
View File
@@ -116,6 +116,7 @@ members = [
"frame/nomination-pools",
"frame/nomination-pools/benchmarking",
"frame/nomination-pools/test-staking",
"frame/nomination-pools/runtime-api",
"frame/randomness-collective-flip",
"frame/ranked-collective",
"frame/recovery",
+2
View File
@@ -79,6 +79,7 @@ pallet-mmr = { version = "4.0.0-dev", default-features = false, path = "../../..
pallet-multisig = { version = "4.0.0-dev", default-features = false, path = "../../../frame/multisig" }
pallet-nomination-pools = { version = "1.0.0", default-features = false, path = "../../../frame/nomination-pools"}
pallet-nomination-pools-benchmarking = { version = "1.0.0", default-features = false, optional = true, path = "../../../frame/nomination-pools/benchmarking" }
pallet-nomination-pools-runtime-api = { version = "1.0.0-dev", default-features = false, path = "../../../frame/nomination-pools/runtime-api" }
pallet-offences = { version = "4.0.0-dev", default-features = false, path = "../../../frame/offences" }
pallet-offences-benchmarking = { version = "4.0.0-dev", path = "../../../frame/offences/benchmarking", default-features = false, optional = true }
pallet-preimage = { version = "4.0.0-dev", default-features = false, path = "../../../frame/preimage" }
@@ -145,6 +146,7 @@ std = [
"pallet-mmr/std",
"pallet-multisig/std",
"pallet-nomination-pools/std",
"pallet-nomination-pools-runtime-api/std",
"pallet-identity/std",
"pallet-scheduler/std",
"node-primitives/std",
+6
View File
@@ -1835,6 +1835,12 @@ impl_runtime_apis! {
}
}
impl pallet_nomination_pools_runtime_api::NominationPoolsApi<Block, AccountId, Balance> for Runtime {
fn pending_rewards(member_account: AccountId) -> Balance {
NominationPools::pending_rewards(member_account)
}
}
impl sp_consensus_babe::BabeApi<Block> for Runtime {
fn configuration() -> sp_consensus_babe::BabeGenesisConfiguration {
// The choice of `c` parameter (where `1 - c` represents the
@@ -0,0 +1,26 @@
[package]
name = "pallet-nomination-pools-runtime-api"
version = "1.0.0-dev"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2021"
license = "Apache-2.0"
homepage = "https://substrate.io"
repository = "https://github.com/paritytech/substrate/"
description = "Runtime API for nomination-pools FRAME pallet"
readme = "README.md"
[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]
[dependencies]
codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] }
sp-api = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/api" }
sp-std = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/std" }
[features]
default = ["std"]
std = [
"codec/std",
"sp-api/std",
"sp-std/std",
]
@@ -0,0 +1,3 @@
Runtime API definition for nomination-pools pallet.
License: Apache-2.0
@@ -0,0 +1,33 @@
// This file is part of Substrate.
// Copyright (C) 2022 Parity Technologies (UK) Ltd.
// SPDX-License-Identifier: Apache-2.0
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//! Runtime API definition for nomination-pools pallet.
//! Currently supports only one rpc endpoint.
#![cfg_attr(not(feature = "std"), no_std)]
use codec::Codec;
sp_api::decl_runtime_apis! {
/// Runtime api for accessing information about nomination pools.
pub trait NominationPoolsApi<AccountId, Balance>
where AccountId: Codec, Balance: Codec
{
/// Returns the pending rewards for the member that the AccountId was given for.
fn pending_rewards(member: AccountId) -> Balance;
}
}
+15 -1
View File
@@ -939,7 +939,7 @@ pub struct RewardPool<T: Config> {
impl<T: Config> RewardPool<T> {
/// Getter for [`RewardPool::last_recorded_reward_counter`].
fn last_recorded_reward_counter(&self) -> T::RewardCounter {
pub(crate) fn last_recorded_reward_counter(&self) -> T::RewardCounter {
self.last_recorded_reward_counter
}
@@ -2147,6 +2147,20 @@ pub mod pallet {
}
impl<T: Config> Pallet<T> {
/// Returns the pending rewards for the specified `member_account`.
///
/// In the case of error the function returns balance of zero.
pub fn pending_rewards(member_account: T::AccountId) -> BalanceOf<T> {
if let Some(pool_member) = PoolMembers::<T>::get(member_account) {
if let Some(reward_pool) = RewardPools::<T>::get(pool_member.pool_id) {
return pool_member
.pending_rewards(reward_pool.last_recorded_reward_counter())
.unwrap_or_default()
}
}
BalanceOf::<T>::default()
}
/// The amount of bond that MUST REMAIN IN BONDED in ALL POOLS.
///
/// It is the responsibility of the depositor to put these funds into the pool initially. Upon