Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Drew.merge upstream #9

Merged
merged 112 commits into from
Jun 23, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
f2c8b88
Fix typo: eror -> error (#6293)
subsocialdev Jun 8, 2020
cc5b3a6
Fix typo: PRORITY -> PRIORITY (#6291)
subsocialdev Jun 8, 2020
e287915
Intent to release rc3 (#6290)
gnunicorn Jun 8, 2020
85cd556
Fix transaction pool & network issues (#6288)
NikVolf Jun 8, 2020
863611e
Use `sign_with` for signing grandpa's outgoing message (#6178)
rakanalh Jun 9, 2020
a8bf260
Revalidation tweak & logging for transaction pool (#6258)
NikVolf Jun 9, 2020
feb334d
Update README.md
gavofyork Jun 9, 2020
1853b9a
Allow adding a prefix to the informant (#6174)
cecton Jun 9, 2020
65fe00b
Transaction pool added missed comment (#6308)
bkchr Jun 9, 2020
a3a5160
Add a test for lots of nodes connecting at the same time (#6247)
tomaka Jun 9, 2020
4b1d862
Introduce frozen indices. (#6307)
gavofyork Jun 9, 2020
6c01b10
new crate sc-light (#6235)
seunlanlege Jun 9, 2020
9c39e2c
Fix ui tests for latest rust stable (#6310)
bkchr Jun 9, 2020
b1038c8
Expose light client. (#6313)
dvc94ch Jun 10, 2020
571cfc1
Fix nits in rpc error display. (#6302)
seerscode Jun 10, 2020
e2a6c3e
"OR gate" for EnsureOrigin (#6237)
shaunxw Jun 10, 2020
69034ef
New CI image (#6223)
TriplEight Jun 10, 2020
a684e83
Add a feature to create automatically a random temporary directory fo…
cecton Jun 10, 2020
f06d5f0
Add a [prefix]_process_start_time_seconds metric (#6315)
tomaka Jun 10, 2020
8aeda51
Make NumberOrHex a common primitive. (#6321)
pepyakin Jun 10, 2020
70cfeff
Avoid self-lookups in Authority Discovery (#6317)
romanb Jun 10, 2020
606c56d
Fix quadratic iterations in transaction pool ready set (#6256)
NikVolf Jun 10, 2020
164fb3b
Find the alive incoming entry on disconnect. (#6320)
romanb Jun 11, 2020
99708c0
Impl Debug and Display for Ss58AddressFormat when compiled with std (…
cecton Jun 11, 2020
0a169d4
transaction-pool: expose blocking api for tx submission (#6325)
andresilva Jun 11, 2020
f893506
Pruned and resubmitted metrics in transaction pool (#6322)
NikVolf Jun 11, 2020
4bd0785
Enable wasmtime on node-template (#6336)
shawntabrizi Jun 11, 2020
75113aa
Adds support for storage parameter types (#6296)
bkchr Jun 11, 2020
883c89a
Basic documentation for Scheduler pallet (#6338)
danforbes Jun 12, 2020
6b45e24
Fix check-line-width CI script (#6326)
athei Jun 12, 2020
0dc6634
client: use appropriate ExecutionContext for initial sync / regular i…
andresilva Jun 12, 2020
384be7e
Fix transaction pool event sending (#6341)
bkchr Jun 12, 2020
afdf5ef
Deprecate FunctionOf and remove its users (#6340)
athei Jun 12, 2020
d735e4d
Add events for balance reserve and unreserve functions (#6330)
joepetrowski Jun 12, 2020
1a31f43
Update contributing guide with new label policy (#6333)
apopiak Jun 13, 2020
7401153
adding a ss58 format for Stafi Network (#6347)
Tore19 Jun 14, 2020
f837c39
add extend_lock for StorageLock (#6323)
wangjj9219 Jun 15, 2020
0db70ea
Introduce in-origin filtering (#6318)
gui1117 Jun 15, 2020
4368fc6
pallet-evm add get(fn) to AccountStorages (#6279)
tgmichel Jun 15, 2020
6907018
Add IPC support (#6348)
Demi-Marie Jun 16, 2020
9e999b2
expose constants of pallet_recovery trait (#6363)
wangjj9219 Jun 16, 2020
b29e467
Impl integrity test for runtime (#6356)
gui1117 Jun 16, 2020
1095920
historical slashing w ocw w adhoc tree creation (#6220)
drahnr Jun 16, 2020
1f536e9
[CI] Auto-label new PRs according to draft status (#6361)
s3krit Jun 16, 2020
6199d86
Split the service initialisation up into seperate functions (#6332)
expenses Jun 16, 2020
54d1c5c
[CI] Add label enforcement (#6365)
s3krit Jun 16, 2020
24cbfc4
vesting: Force Vested Transfer (#6368)
gavofyork Jun 16, 2020
288ead0
client/authority-discovery: Don't add own address to priority group (…
mxinden Jun 16, 2020
74efab4
.gitlab-ci.yml: Run promtool on Prometheus alerting rules (#6344)
mxinden Jun 16, 2020
1823782
Use /dns/ instead of /dns4/ (#6369)
tomaka Jun 16, 2020
02e77d2
add system_dryRun (#6300)
xlc Jun 16, 2020
db8916a
fix BlockAttributes encoding (#6281)
svyatonik Jun 16, 2020
bdae39f
Allow Sudo to do anything (#6375)
gavofyork Jun 17, 2020
17be6fd
Stored call in multisig (#6319)
gavofyork Jun 17, 2020
0c42ced
Fix the broken weight multiplier update function (#6334)
kianenigma Jun 17, 2020
8e1f753
Restrict remove_proxies (#6383)
gavofyork Jun 18, 2020
a2653e8
Remove penalty on duplicate Status message (#6377)
tomaka Jun 18, 2020
d6d688c
`decl_module!` print better error on duplicate reserved keyword (#6384)
bkchr Jun 18, 2020
f8afa52
FixedPointNumber: zero is not positive. (#6385)
shaunxw Jun 18, 2020
b02101e
Allow empty values in the storage (#6364)
arkpar Jun 18, 2020
bd72cb6
Pallet: Atomic Swap (#6349)
sorpaas Jun 18, 2020
81ba3e2
Runtime interface to add support for tracing from wasm (#6381)
mattrutherford Jun 18, 2020
9a5892e
Block packet size limit
arkpar Jun 18, 2020
0bb3001
Revert "Block packet size limit"
arkpar Jun 18, 2020
9402334
Update s3 artifact url (#6399)
ddorgan Jun 18, 2020
44978b9
Increase network buffer sizes even more (#6080)
tomaka Jun 18, 2020
cb83391
Remove pallet-balances from non-dev-deps (#6407)
gnunicorn Jun 18, 2020
9b08492
Babe VRF Signing in keystore (#6225)
rakanalh Jun 18, 2020
caf9fbe
Update `libp2p-ping`. (#6412)
twittner Jun 18, 2020
7a4bd76
Remove --legacy-network-protocol CLI flag (#6411)
tomaka Jun 18, 2020
4f0b601
Scale and increase validator count (#6417)
gavofyork Jun 19, 2020
369f9fc
Expose constants from Proxy Pallet (#6420)
shawntabrizi Jun 19, 2020
31c3e06
.maintain/monitoring: Add alerting rule tests (#6343)
mxinden Jun 19, 2020
31af203
[CI] Label PRs if polkadot companion build fails (#6410)
s3krit Jun 19, 2020
3ca1d91
Print bad mandatory error (#6416)
bkchr Jun 19, 2020
9758376
Track last blocks in informant display (#6429)
bkchr Jun 19, 2020
2bb79cb
Simple Docs for Atomic Swap Pallet (#6434)
danforbes Jun 19, 2020
a2c493d
More descriptive error message when invalid slot duration is used (#6…
cecton Jun 19, 2020
d343bfc
Root origin use no filter by default. Scheduler and Democracy dispatc…
gui1117 Jun 19, 2020
111b628
llow decl-module to have a where clause with trailing comma (#6431)
gui1117 Jun 19, 2020
18707b3
.gitlab-ci.yml: Use promtool from paritytech/tools:latest image (#6425)
mxinden Jun 19, 2020
26aec42
Update sync chain info on own block import (#6424)
bkchr Jun 19, 2020
4c67aee
client/authority-discovery: Compare PeerIds and not Multihashes (#6414)
mxinden Jun 19, 2020
c8c16d1
add network propagated metrics (#6438)
NikVolf Jun 19, 2020
f9d4d30
change (ci): add interruptible to kubernetes jobs (#6441)
TriplEight Jun 19, 2020
9cbda1e
Avoid multisig reentrancy (#6445)
gavofyork Jun 19, 2020
d0ab405
Validate encoding of extrinsics passed to runtime (#6442)
arkpar Jun 19, 2020
8032321
Fix Babe secondary plain slots claiming (#6451)
bkchr Jun 19, 2020
1fae45f
sp-npos-elections should not depend on itself (#6444)
bkchr Jun 20, 2020
6c16d15
Don't autolabel insubstantial PRs 'pleasereview' (#6447)
s3krit Jun 20, 2020
ef2a6c1
change everything to transaction (#6440)
NikVolf Jun 21, 2020
41970e7
node: spawn block authoring and grandpa voter as blocking tasks (#6446)
andresilva Jun 21, 2020
a5bcfed
pallet-atomic-swap: generialized swap action (#6421)
sorpaas Jun 21, 2020
6f86bdd
Fix issues with `Operational` transactions validity and prioritizatio…
tomusdrw Jun 21, 2020
3bf25c2
`pallet-staking`: Expose missing consts (#6456)
bkchr Jun 22, 2020
8329dbd
update collective events docs to be consistent with changes (#6463)
apopiak Jun 22, 2020
94b3812
[CI] Don't tag PRs on companion job cancels (#6470)
s3krit Jun 22, 2020
50eb257
network: remove unused variable (#6460)
andresilva Jun 22, 2020
19826b9
Avoid panic on dropping a `sc_network::service::out_events::Receiver`…
romanb Jun 23, 2020
5a102f7
Implement nested storage transactions (#6269)
athei Jun 23, 2020
fed834c
Optimize offchain worker api by re-using http-client (#6454)
pscott Jun 23, 2020
cf7432a
Remove lingering runtime upgrades (#6476)
shawntabrizi Jun 23, 2020
6221146
impl Debug for sc_service::Configuration (#6400)
cecton Jun 23, 2020
c771821
Fix `sp-api` handling of multiple arguments (#6484)
bkchr Jun 23, 2020
ad7b5ef
Fix the browser node and ensure it doesn't colour the informant outpu…
expenses Jun 23, 2020
8baaa18
bound some missing bound for elevated trait (#6487)
gui1117 Jun 23, 2020
034055a
`pallet-scheduler`: Check that `when` is not in the past (#6480)
bkchr Jun 23, 2020
4c03656
client/network/service: Add primary dimension to connection metrics (…
mxinden Jun 23, 2020
d59281f
Ensure the listen addresses are consistent with the transport (#6436)
cecton Jun 23, 2020
9a9b248
pallet-contracts: migrate to nested storage transaction mechanism (#6…
pepyakin Jun 23, 2020
b1ba3a4
Update lock
drewstone Jun 23, 2020
11682ef
Another upstream merge
drewstone Jun 23, 2020
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
Prev Previous commit
Next Next commit
Introduce frozen indices. (paritytech#6307)
* Introduce frozen indices.

* Fix.

* Bump runtime

* Benchmark for freeze

* Fix

* fix benchmarks

* update freeze weights

* remove copy pasta

Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
  • Loading branch information
gavofyork and shawntabrizi authored Jun 9, 2020
commit 4b1d86201b07ca6ebc2bfc2fd39262c2f24102b3
4 changes: 2 additions & 2 deletions bin/node/runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
// and set impl_version to 0. If only runtime
// implementation changes and behavior does not, then leave spec_version as
// is and increment impl_version.
spec_version: 251,
impl_version: 2,
spec_version: 252,
impl_version: 0,
apis: RUNTIME_API_VERSIONS,
transaction_version: 1,
};
Expand Down
17 changes: 16 additions & 1 deletion frame/indices/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,25 @@ benchmarks! {
T::Currency::make_free_balance_be(&recipient, BalanceOf::<T>::max_value());
// Claim the index
Indices::<T>::claim(RawOrigin::Signed(original).into(), account_index)?;
}: _(RawOrigin::Root, recipient.clone(), account_index)
}: _(RawOrigin::Root, recipient.clone(), account_index, false)
verify {
assert_eq!(Accounts::<T>::get(account_index).unwrap().0, recipient);
}

freeze {
// Index being claimed
let i in 0 .. 1000;
let account_index = T::AccountIndex::from(i);
// Setup accounts
let caller: T::AccountId = account("caller", 0, SEED);
T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());
// Claim the index
Indices::<T>::claim(RawOrigin::Signed(caller.clone()).into(), account_index)?;
}: _(RawOrigin::Signed(caller.clone()), account_index)
verify {
assert_eq!(Accounts::<T>::get(account_index).unwrap().2, true);
}

// TODO in another PR: lookup and unlookup trait weights (not critical)
}

Expand All @@ -104,6 +118,7 @@ mod tests {
assert_ok!(test_benchmark_transfer::<Test>());
assert_ok!(test_benchmark_free::<Test>());
assert_ok!(test_benchmark_force_transfer::<Test>());
assert_ok!(test_benchmark_freeze::<Test>());
});
}
}
70 changes: 60 additions & 10 deletions frame/indices/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ use sp_runtime::traits::{
StaticLookup, Member, LookupError, Zero, Saturating, AtLeast32Bit
};
use frame_support::{Parameter, decl_module, decl_error, decl_event, decl_storage, ensure};
use frame_support::dispatch::DispatchResult;
use frame_support::dispatch::{DispatchResult, Weight};
use frame_support::traits::{Currency, ReservableCurrency, Get, BalanceStatus::Reserved};
use frame_support::weights::constants::WEIGHT_PER_MICROS;
use frame_system::{ensure_signed, ensure_root};
Expand Down Expand Up @@ -62,9 +62,9 @@ decl_storage! {
pub Accounts build(|config: &GenesisConfig<T>|
config.indices.iter()
.cloned()
.map(|(a, b)| (a, (b, Zero::zero())))
.map(|(a, b)| (a, (b, Zero::zero(), false)))
.collect::<Vec<_>>()
): map hasher(blake2_128_concat) T::AccountIndex => Option<(T::AccountId, BalanceOf<T>)>;
): map hasher(blake2_128_concat) T::AccountIndex => Option<(T::AccountId, BalanceOf<T>, bool)>;
}
add_extra_genesis {
config(indices): Vec<(T::AccountIndex, T::AccountId)>;
Expand All @@ -80,6 +80,8 @@ decl_event!(
IndexAssigned(AccountId, AccountIndex),
/// A account index has been freed up (unassigned).
IndexFreed(AccountIndex),
/// A account index has been frozen to its current account ID.
IndexFrozen(AccountIndex, AccountId),
}
);

Expand All @@ -93,13 +95,25 @@ decl_error! {
InUse,
/// The source and destination accounts are identical.
NotTransfer,
/// The index is permanent and may not be freed/changed.
Permanent,
}
}

decl_module! {
pub struct Module<T: Trait> for enum Call where origin: T::Origin, system = frame_system {
fn deposit_event() = default;

fn on_runtime_upgrade() -> Weight {
use frame_support::migration::{StorageIterator, put_storage_value};
for (key, value) in StorageIterator::<
(T::AccountId, BalanceOf<T>)
>::new(b"Indices", b"Accounts").drain() {
put_storage_value(b"Indices", b"Accounts", &key, (value.0, value.1, false));
}
1_000_000_000
}

/// Assign an previously unassigned index.
///
/// Payment: `Deposit` is reserved from the sender account.
Expand All @@ -125,7 +139,7 @@ decl_module! {

Accounts::<T>::try_mutate(index, |maybe_value| {
ensure!(maybe_value.is_none(), Error::<T>::InUse);
*maybe_value = Some((who.clone(), T::Deposit::get()));
*maybe_value = Some((who.clone(), T::Deposit::get(), false));
T::Currency::reserve(&who, T::Deposit::get())
})?;
Self::deposit_event(RawEvent::IndexAssigned(who, index));
Expand Down Expand Up @@ -158,10 +172,11 @@ decl_module! {
ensure!(who != new, Error::<T>::NotTransfer);

Accounts::<T>::try_mutate(index, |maybe_value| -> DispatchResult {
let (account, amount) = maybe_value.take().ok_or(Error::<T>::NotAssigned)?;
let (account, amount, perm) = maybe_value.take().ok_or(Error::<T>::NotAssigned)?;
ensure!(!perm, Error::<T>::Permanent);
ensure!(&account == &who, Error::<T>::NotOwner);
let lost = T::Currency::repatriate_reserved(&who, &new, amount, Reserved)?;
*maybe_value = Some((new.clone(), amount.saturating_sub(lost)));
*maybe_value = Some((new.clone(), amount.saturating_sub(lost), false));
Ok(())
})?;
Self::deposit_event(RawEvent::IndexAssigned(new, index));
Expand Down Expand Up @@ -191,7 +206,8 @@ decl_module! {
let who = ensure_signed(origin)?;

Accounts::<T>::try_mutate(index, |maybe_value| -> DispatchResult {
let (account, amount) = maybe_value.take().ok_or(Error::<T>::NotAssigned)?;
let (account, amount, perm) = maybe_value.take().ok_or(Error::<T>::NotAssigned)?;
ensure!(!perm, Error::<T>::Permanent);
ensure!(&account == &who, Error::<T>::NotOwner);
T::Currency::unreserve(&who, amount);
Ok(())
Expand All @@ -206,6 +222,7 @@ decl_module! {
///
/// - `index`: the index to be (re-)assigned.
/// - `new`: the new owner of the index. This function is a no-op if it is equal to sender.
/// - `freeze`: if set to `true`, will freeze the index so it cannot be transferred.
///
/// Emits `IndexAssigned` if successful.
///
Expand All @@ -221,17 +238,50 @@ decl_module! {
/// - Writes: Indices Accounts, System Account (original owner)
/// # </weight>
#[weight = T::DbWeight::get().reads_writes(2, 2) + 25 * WEIGHT_PER_MICROS]
fn force_transfer(origin, new: T::AccountId, index: T::AccountIndex) {
fn force_transfer(origin, new: T::AccountId, index: T::AccountIndex, freeze: bool) {
ensure_root(origin)?;

Accounts::<T>::mutate(index, |maybe_value| {
if let Some((account, amount)) = maybe_value.take() {
if let Some((account, amount, _)) = maybe_value.take() {
T::Currency::unreserve(&account, amount);
}
*maybe_value = Some((new.clone(), Zero::zero()));
*maybe_value = Some((new.clone(), Zero::zero(), freeze));
});
Self::deposit_event(RawEvent::IndexAssigned(new, index));
}

/// Freeze an index so it will always point to the sender account. This consumes the deposit.
///
/// The dispatch origin for this call must be _Signed_ and the signing account must have a
/// non-frozen account `index`.
///
/// - `index`: the index to be frozen in place.
///
/// Emits `IndexFrozen` if successful.
///
/// # <weight>
/// - `O(1)`.
/// - One storage mutation (codec `O(1)`).
/// - Up to one slash operation.
/// - One event.
/// -------------------
/// - Base Weight: 30.86 µs
/// - DB Weight: 1 Read/Write (Accounts)
/// # </weight>
#[weight = T::DbWeight::get().reads_writes(1, 1) + 30 * WEIGHT_PER_MICROS]
fn freeze(origin, index: T::AccountIndex) {
let who = ensure_signed(origin)?;

Accounts::<T>::try_mutate(index, |maybe_value| -> DispatchResult {
let (account, amount, perm) = maybe_value.take().ok_or(Error::<T>::NotAssigned)?;
ensure!(!perm, Error::<T>::Permanent);
ensure!(&account == &who, Error::<T>::NotOwner);
T::Currency::slash_reserved(&who, amount);
*maybe_value = Some((account, Zero::zero(), true));
Ok(())
})?;
Self::deposit_event(RawEvent::IndexFrozen(index, who));
}
}
}

Expand Down
18 changes: 16 additions & 2 deletions frame/indices/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,20 @@ fn freeing_should_work() {
});
}

#[test]
fn freezing_should_work() {
new_test_ext().execute_with(|| {
assert_ok!(Indices::claim(Some(1).into(), 0));
assert_noop!(Indices::freeze(Some(1).into(), 1), Error::<Test>::NotAssigned);
assert_noop!(Indices::freeze(Some(2).into(), 0), Error::<Test>::NotOwner);
assert_ok!(Indices::freeze(Some(1).into(), 0));
assert_noop!(Indices::freeze(Some(1).into(), 0), Error::<Test>::Permanent);

assert_noop!(Indices::free(Some(1).into(), 0), Error::<Test>::Permanent);
assert_noop!(Indices::transfer(Some(1).into(), 2, 0), Error::<Test>::Permanent);
});
}

#[test]
fn indexing_lookup_should_work() {
new_test_ext().execute_with(|| {
Expand Down Expand Up @@ -87,7 +101,7 @@ fn transfer_index_on_accounts_should_work() {
fn force_transfer_index_on_preowned_should_work() {
new_test_ext().execute_with(|| {
assert_ok!(Indices::claim(Some(1).into(), 0));
assert_ok!(Indices::force_transfer(Origin::ROOT, 3, 0));
assert_ok!(Indices::force_transfer(Origin::ROOT, 3, 0, false));
assert_eq!(Balances::reserved_balance(1), 0);
assert_eq!(Balances::reserved_balance(3), 0);
assert_eq!(Indices::lookup_index(0), Some(3));
Expand All @@ -97,7 +111,7 @@ fn force_transfer_index_on_preowned_should_work() {
#[test]
fn force_transfer_index_on_free_should_work() {
new_test_ext().execute_with(|| {
assert_ok!(Indices::force_transfer(Origin::ROOT, 3, 0));
assert_ok!(Indices::force_transfer(Origin::ROOT, 3, 0, false));
assert_eq!(Balances::reserved_balance(3), 0);
assert_eq!(Indices::lookup_index(0), Some(3));
});
Expand Down