Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,188 changes: 674 additions & 514 deletions Cargo.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ path = "src/main.rs"

[package]
name = "polkadot"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <[email protected]>"]
build = "build.rs"
edition = "2018"
Expand Down
2 changes: 1 addition & 1 deletion availability-store/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "polkadot-availability-store"
description = "Persistent database for parachain data"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <[email protected]>"]
edition = "2018"

Expand Down
2 changes: 1 addition & 1 deletion availability-store/src/worker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion cli/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "polkadot-cli"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <[email protected]>"]
description = "Polkadot node implementation in Rust."
edition = "2018"
Expand Down
2 changes: 1 addition & 1 deletion collator/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "polkadot-collator"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <[email protected]>"]
description = "Collator node implementation"
edition = "2018"
Expand Down
2 changes: 1 addition & 1 deletion erasure-coding/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "polkadot-erasure-coding"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <[email protected]>"]
edition = "2018"

Expand Down
2 changes: 1 addition & 1 deletion network/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "polkadot-network"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <[email protected]>"]
description = "Polkadot-specific networking protocol"
edition = "2018"
Expand Down
10 changes: 9 additions & 1 deletion network/src/legacy/gossip/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
2 changes: 1 addition & 1 deletion parachain/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "polkadot-parachain"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <[email protected]>"]
description = "Types and utilities for creating and working with parachains"
edition = "2018"
Expand Down
2 changes: 1 addition & 1 deletion primitives/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "polkadot-primitives"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <[email protected]>"]
edition = "2018"

Expand Down
2 changes: 1 addition & 1 deletion rpc/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "polkadot-rpc"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <[email protected]>"]
edition = "2018"

Expand Down
2 changes: 1 addition & 1 deletion runtime/common/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "polkadot-runtime-common"
version = "0.7.20"
version = "0.7.21"
authors = ["Parity Technologies <[email protected]>"]
edition = "2018"

Expand Down
6 changes: 3 additions & 3 deletions runtime/common/src/attestations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
}
Expand Down
80 changes: 47 additions & 33 deletions runtime/common/src/claims.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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());
Expand Down Expand Up @@ -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! {
Expand All @@ -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 {
Expand Down Expand Up @@ -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);
});
}

Expand All @@ -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);
});
}

Expand All @@ -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);
});
}
Expand Down Expand Up @@ -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(|| {
Expand Down
11 changes: 5 additions & 6 deletions runtime/common/src/crowdfund.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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! {
Expand Down
15 changes: 7 additions & 8 deletions runtime/common/src/parachains.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ decl_module! {
Self::update_routing(
&heads,
);

Self::dispatch_upward_messages(
MAX_QUEUE_COUNT,
WATERMARK_QUEUE_SIZE,
Expand Down Expand Up @@ -889,6 +889,9 @@ mod tests {
type AvailableBlockRatio = AvailableBlockRatio;
type Version = ();
type ModuleToIndex = ();
type AccountData = balances::AccountData<u128>;
type OnNewAccount = ();
type OnReapAccount = ();
}

parameter_types! {
Expand Down Expand Up @@ -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! {
Expand Down
16 changes: 7 additions & 9 deletions runtime/common/src/registrar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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!{
Expand Down
Loading