Unverified Commit 185384a8 authored by Nikolay Volf's avatar Nikolay Volf Committed by GitHub
Browse files

Update to latest substrate master (#853)



* try to update

* latest updates

* final fixes

* Fix claim w/ vesting logic

* Make claim tests a bit better
Co-authored-by: Shawn Tabrizi's avatarShawn Tabrizi <shawntabrizi@gmail.com>
parent 4e4a9778
Pipeline #79684 passed with stages
in 23 minutes and 15 seconds
This diff is collapsed.
......@@ -4,7 +4,7 @@ path = "src/main.rs"
[package]
name = "polkadot"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <admin@parity.io>"]
build = "build.rs"
edition = "2018"
......
[package]
name = "polkadot-availability-store"
description = "Persistent database for parachain data"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
......
......@@ -647,7 +647,7 @@ impl<I, P> BlockImport<Block> for AvailabilityBlockImport<I, P> where
target: LOG_TARGET,
"Importing block #{}, ({})",
block.header.number(),
block.post_header().hash()
block.post_hash(),
);
if let Some(ref extrinsics) = block.body {
......
[package]
name = "polkadot-cli"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <admin@parity.io>"]
description = "Polkadot node implementation in Rust."
edition = "2018"
......
[package]
name = "polkadot-collator"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <admin@parity.io>"]
description = "Collator node implementation"
edition = "2018"
......
[package]
name = "polkadot-erasure-coding"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
......
[package]
name = "polkadot-network"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <admin@parity.io>"]
description = "Polkadot-specific networking protocol"
edition = "2018"
......
......@@ -283,11 +283,19 @@ pub fn register_validator<C: ChainContext + 'static, S: NetworkSpecialization<Bl
let gossip_side = validator.clone();
let gossip_engine = sc_network_gossip::GossipEngine::new(
service.clone(),
executor,
POLKADOT_ENGINE_ID,
gossip_side,
);
// Ideally this would not be spawned as an orphaned task, but polled by
// `RegisteredMessageValidator` which in turn would be polled by a `ValidationNetwork`.
let spawn_res = executor.spawn_obj(futures::task::FutureObj::from(Box::new(gossip_engine.clone())));
// Note: we consider the chances of an error to spawn a background task almost null.
if spawn_res.is_err() {
log::error!(target: "polkadot-gossip", "Failed to spawn background task");
}
RegisteredMessageValidator {
inner: validator as _,
service: Some(service),
......
[package]
name = "polkadot-parachain"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <admin@parity.io>"]
description = "Types and utilities for creating and working with parachains"
edition = "2018"
......
[package]
name = "polkadot-primitives"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
......
[package]
name = "polkadot-rpc"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
......
[package]
name = "polkadot-runtime-common"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
......
......@@ -125,14 +125,14 @@ decl_module! {
/// Provide candidate receipts for parachains, in ascending order by id.
fn more_attestations(origin, _more: MoreAttestations) -> DispatchResult {
ensure_none(origin)?;
ensure!(!<DidUpdate>::exists(), Error::<T>::TooManyAttestations);
<DidUpdate>::put(true);
ensure!(!DidUpdate::exists(), Error::<T>::TooManyAttestations);
DidUpdate::put(true);
Ok(())
}
fn on_finalize(_n: T::BlockNumber) {
<DidUpdate>::kill();
DidUpdate::kill();
}
}
}
......
......@@ -18,8 +18,8 @@
use rstd::prelude::*;
use sp_io::{hashing::keccak_256, crypto::secp256k1_ecdsa_recover};
use frame_support::{decl_event, decl_storage, decl_module, decl_error, ensure};
use frame_support::{dispatch::DispatchResult, weights::SimpleDispatchInfo};
use frame_support::{decl_event, decl_storage, decl_module, decl_error};
use frame_support::weights::SimpleDispatchInfo;
use frame_support::traits::{Currency, Get, VestingSchedule};
use system::{ensure_root, ensure_none};
use codec::{Encode, Decode};
......@@ -161,31 +161,18 @@ decl_module! {
let balance_due = <Claims<T>>::get(&signer)
.ok_or(Error::<T>::SignerHasNoClaim)?;
let maybe_vested = <Vesting<T>>::get(&signer);
// If this fails, destination account already has a vesting schedule
// applied to it, and this claim should not be processed.
ensure!(
maybe_vested.is_none() || T::VestingSchedule::vesting_balance(&dest).is_zero(),
Error::<T>::DestinationVesting
);
<Total<T>>::mutate(|t| -> DispatchResult {
*t = t.checked_sub(&balance_due).ok_or(Error::<T>::PotUnderflow)?;
Ok(())
})?;
// This must happen before the add_vesting_schedule otherwise the schedule will be
// nullified.
CurrencyOf::<T>::deposit_creating(&dest, balance_due);
let new_total = Self::total().checked_sub(&balance_due).ok_or(Error::<T>::PotUnderflow)?;
// Check if this claim should have a vesting schedule.
if let Some(vs) = maybe_vested {
// Should never fail since we ensured that the destination is not already vesting.
// However, we already deposited, so can't error out here anyway.
let _ = T::VestingSchedule::add_vesting_schedule(&dest, vs.0, vs.1, vs.2);
if let Some(vs) = <Vesting<T>>::get(&signer) {
// If this fails, destination account already has a vesting schedule
// applied to it, and this claim should not be processed.
T::VestingSchedule::add_vesting_schedule(&dest, vs.0, vs.1, vs.2)
.map_err(|_| Error::<T>::DestinationVesting)?;
}
CurrencyOf::<T>::deposit_creating(&dest, balance_due);
<Total<T>>::put(new_total);
<Claims<T>>::remove(&signer);
<Vesting<T>>::remove(&signer);
......@@ -268,7 +255,7 @@ impl<T: Trait> sp_runtime::traits::ValidateUnsigned for Module<T> {
).into();
};
if !<Claims<T>>::exists(&signer) {
if !<Claims<T>>::contains_key(&signer) {
return Err(InvalidTransaction::Custom(
ValidityError::SignerHasNoClaim.into(),
).into());
......@@ -335,6 +322,9 @@ mod tests {
type AvailableBlockRatio = AvailableBlockRatio;
type Version = ();
type ModuleToIndex = ();
type AccountData = balances::AccountData<u64>;
type OnNewAccount = ();
type OnReapAccount = Balances;
}
parameter_types! {
......@@ -344,13 +334,10 @@ mod tests {
impl balances::Trait for Test {
type Balance = u64;
type OnReapAccount = System;
type OnNewAccount = ();
type TransferPayment = ();
type DustRemoval = ();
type Event = ();
type DustRemoval = ();
type ExistentialDeposit = ExistentialDeposit;
type CreationFee = CreationFee;
type AccountStore = System;
}
impl vesting::Trait for Test {
......@@ -431,10 +418,11 @@ mod tests {
#[test]
fn claiming_works() {
new_test_ext().execute_with(|| {
assert_eq!(Balances::free_balance(&42), 0);
assert_eq!(Balances::free_balance(42), 0);
assert_ok!(Claims::claim(Origin::NONE, 42, sig(&alice(), &42u64.encode())));
assert_eq!(Balances::free_balance(&42), 100);
assert_eq!(Vesting::vesting_balance(&42), 50);
assert_eq!(Claims::total(), 0);
});
}
......@@ -445,15 +433,17 @@ mod tests {
Claims::mint_claim(Origin::signed(42), eth(&bob()), 200, None),
sp_runtime::traits::BadOrigin,
);
assert_eq!(Balances::free_balance(&42), 0);
assert_eq!(Balances::free_balance(42), 0);
assert_noop!(
Claims::claim(Origin::NONE, 69, sig(&bob(), &69u64.encode())),
Error::<Test>::SignerHasNoClaim
);
assert_ok!(Claims::mint_claim(Origin::ROOT, eth(&bob()), 200, None));
assert_eq!(Claims::total(), 300);
assert_ok!(Claims::claim(Origin::NONE, 69, sig(&bob(), &69u64.encode())));
assert_eq!(Balances::free_balance(69), 200);
assert_eq!(Balances::free_balance(&69), 200);
assert_eq!(Vesting::vesting_balance(&69), 0);
assert_eq!(Claims::total(), 100);
});
}
......@@ -471,7 +461,7 @@ mod tests {
);
assert_ok!(Claims::mint_claim(Origin::ROOT, eth(&bob()), 200, Some((50, 10, 1))));
assert_ok!(Claims::claim(Origin::NONE, 69, sig(&bob(), &69u64.encode())));
assert_eq!(Balances::free_balance(69), 200);
assert_eq!(Balances::free_balance(&69), 200);
assert_eq!(Vesting::vesting_balance(&69), 50);
});
}
......@@ -499,6 +489,30 @@ mod tests {
});
}
#[test]
fn claiming_while_vested_doesnt_work() {
new_test_ext().execute_with(|| {
assert_eq!(Claims::total(), 100);
// A user is already vested
assert_ok!(<Test as Trait>::VestingSchedule::add_vesting_schedule(&69, 1000, 100, 10));
CurrencyOf::<Test>::make_free_balance_be(&69, 1000);
assert_eq!(Balances::free_balance(69), 1000);
assert_ok!(Claims::mint_claim(Origin::ROOT, eth(&bob()), 200, Some((50, 10, 1))));
// New total
assert_eq!(Claims::total(), 300);
// They should not be able to claim
assert_noop!(
Claims::claim(Origin::NONE, 69, sig(&bob(), &69u64.encode())),
Error::<Test>::DestinationVesting
);
// Everything should be unchanged
assert_eq!(Claims::total(), 300);
assert_eq!(Balances::free_balance(69), 1000);
assert_eq!(Vesting::vesting_balance(&69), 1000);
});
}
#[test]
fn non_sender_sig_doesnt_work() {
new_test_ext().execute_with(|| {
......
......@@ -614,20 +614,19 @@ mod tests {
type AvailableBlockRatio = AvailableBlockRatio;
type Version = ();
type ModuleToIndex = ();
type AccountData = balances::AccountData<u64>;
type OnNewAccount = ();
type OnReapAccount = Balances;
}
parameter_types! {
pub const ExistentialDeposit: u64 = 1;
pub const CreationFee: u64 = 0;
}
impl balances::Trait for Test {
type Balance = u64;
type OnReapAccount = System;
type OnNewAccount = ();
type TransferPayment = ();
type DustRemoval = ();
type Event = ();
type DustRemoval = ();
type ExistentialDeposit = ExistentialDeposit;
type CreationFee = CreationFee;
type AccountStore = System;
}
parameter_types! {
......
......@@ -274,7 +274,7 @@ decl_module! {
Self::update_routing(
&heads,
);
Self::dispatch_upward_messages(
MAX_QUEUE_COUNT,
WATERMARK_QUEUE_SIZE,
......@@ -889,6 +889,9 @@ mod tests {
type AvailableBlockRatio = AvailableBlockRatio;
type Version = ();
type ModuleToIndex = ();
type AccountData = balances::AccountData<u128>;
type OnNewAccount = ();
type OnReapAccount = ();
}
parameter_types! {
......@@ -945,18 +948,14 @@ mod tests {
parameter_types! {
pub const ExistentialDeposit: Balance = 1;
pub const CreationFee: Balance = 0;
}
impl balances::Trait for Test {
type Balance = Balance;
type OnReapAccount = System;
type OnNewAccount = ();
type Event = ();
type Balance = u128;
type DustRemoval = ();
type Event = ();
type ExistentialDeposit = ExistentialDeposit;
type TransferPayment = ();
type CreationFee = CreationFee;
type AccountStore = System;
}
pallet_staking_reward_curve::build! {
......
......@@ -89,8 +89,7 @@ impl<T: Trait> Registrar<T::AccountId> for Module<T> {
code: Vec<u8>,
initial_head_data: Vec<u8>,
) -> DispatchResult {
ensure!(!Paras::exists(id), Error::<T>::ParaAlreadyExists);
ensure!(!Paras::contains_key(id), Error::<T>::ParaAlreadyExists);
if let Scheduling::Always = info.scheduling {
Parachains::mutate(|parachains|
match parachains.binary_search(&id) {
......@@ -703,22 +702,21 @@ mod tests {
type AvailableBlockRatio = AvailableBlockRatio;
type Version = ();
type ModuleToIndex = ();
type AccountData = balances::AccountData<u128>;
type OnNewAccount = ();
type OnReapAccount = Balances;
}
parameter_types! {
pub const ExistentialDeposit: Balance = 1;
pub const CreationFee: Balance = 0;
}
impl balances::Trait for Test {
type OnNewAccount = ();
type OnReapAccount = System;
type Balance = Balance;
type Event = ();
type Balance = u128;
type DustRemoval = ();
type Event = ();
type ExistentialDeposit = ExistentialDeposit;
type TransferPayment = ();
type CreationFee = CreationFee;
type AccountStore = System;
}
parameter_types!{
......
......@@ -189,7 +189,7 @@ decl_storage! {
impl<T: Trait> SwapAux for Module<T> {
fn ensure_can_swap(one: ParaId, other: ParaId) -> Result<(), &'static str> {
if <Onboarding<T>>::exists(one) || <Onboarding<T>>::exists(other) {
if <Onboarding<T>>::contains_key(one) || <Onboarding<T>>::contains_key(other) {
Err("can't swap an undeployed parachain")?
}
Ok(())
......@@ -292,7 +292,7 @@ decl_module! {
// winner information is duplicated from the previous block in case no bids happened
// in this block.
if let Some(offset) = Self::is_ending(now) {
if !<Winning<T>>::exists(&offset) {
if !<Winning<T>>::contains_key(&offset) {
<Winning<T>>::insert(offset,
offset.checked_sub(&One::one())
.and_then(<Winning<T>>::get)
......@@ -915,22 +915,21 @@ mod tests {
type AvailableBlockRatio = AvailableBlockRatio;
type Version = ();
type ModuleToIndex = ();
type AccountData = balances::AccountData<u64>;
type OnNewAccount = ();
type OnReapAccount = Balances;
}
parameter_types! {
pub const ExistentialDeposit: u64 = 1;
pub const CreationFee: u64 = 0;
}
impl balances::Trait for Test {
type Balance = u64;
type Event = ();
type OnNewAccount = ();
type OnReapAccount = System;
type DustRemoval = ();
type ExistentialDeposit = ExistentialDeposit;
type CreationFee = CreationFee;
type TransferPayment = ();
type AccountStore = System;
}
thread_local! {
......
[package]
name = "kusama-runtime"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
build = "build.rs"
......@@ -51,7 +51,7 @@ recovery = { package = "pallet-recovery", git = "https://github.com/paritytech/s
session = { package = "pallet-session", git = "https://github.com/paritytech/substrate", branch = "polkadot-master", default-features = false }
society = { package = "pallet-society", git = "https://github.com/paritytech/substrate", branch = "polkadot-master", default-features = false }
frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-master", default-features = false }
staking = { package = "pallet-staking", git = "https://github.com/paritytech/substrate", branch = "polkadot-master", default-features = false, features = ["migrate"] }
staking = { package = "pallet-staking", git = "https://github.com/paritytech/substrate", branch = "polkadot-master", default-features = false }
pallet-staking-reward-curve = { git = "https://github.com/paritytech/substrate", branch = "polkadot-master" }
system = { package = "frame-system", git = "https://github.com/paritytech/substrate", branch = "polkadot-master", default-features = false }
system_rpc_runtime_api = { package = "frame-system-rpc-runtime-api", git = "https://github.com/paritytech/substrate", branch = "polkadot-master", default-features = false }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment