Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
e7cb51b
Contracts pallet: Bump Runtime API (#12677)
jasl Nov 10, 2022
112468e
Fix typo (#12680)
sorpaas Nov 10, 2022
7763a32
Move `WeightCounter` to `sp-weights` (#12603)
ggwpez Nov 11, 2022
b042ebd
Allow other pallets to check asset ids. (#12666)
gilescope Nov 11, 2022
67e3f9b
derive type info for some grandpa types (#12683)
yjhmelody Nov 11, 2022
e6768a3
Safe TreeRoute constructor (#12691)
davxy Nov 11, 2022
3e71d60
New `root_testing` pallet (#12451)
Szegoo Nov 13, 2022
59da38b
[ci] Add DAG for build-rustdoc and check-dependent-project (#12687)
alvicsam Nov 14, 2022
940a458
Collective: Benchmark with greater `MaxProposals` (#12454)
Szegoo Nov 14, 2022
65a8990
[ci] fix buildah for publishing docker (#12703)
alvicsam Nov 15, 2022
c067438
Make public is_passing and ReferendumStatus (#12667)
amarsinghcodes Nov 15, 2022
a0ab42a
Asset Pallet: Support repeated destroys to safely destroy large asset…
tonyalaribe Nov 15, 2022
cd30493
`seal_reentrant_count` returns contract reentrant count (#12695)
Artemka374 Nov 15, 2022
eb1a2a8
Assets Pallet: reintroduce fungibles::Destroy trait (#12708)
tonyalaribe Nov 15, 2022
108d8ee
release `sp-core 7.0.0` and `sp-runtime 7.0.0` (#12599)
niklasad1 Nov 15, 2022
38f473b
Release `sp-keyring` and `pallet-contracts-primitives` `7.0.0` (#12716)
ascjones Nov 16, 2022
b8ba481
Fix `cargo check` for `pallet-contracts-proc-macro` (#12706)
joao-paulo-parity Nov 16, 2022
0699880
[ci] Improve pipeline stopper (#12717)
alvicsam Nov 16, 2022
a7ba55d
sc-chainspec: Switch to `assimilate_storage` (#12720)
bkchr Nov 16, 2022
35170c5
[Cleanup] Remove obsolete event from fast-unstake (#12725)
ruseinov Nov 17, 2022
4baabe4
[Fix] Deposit for fast-unstake has to be define as pallet::constant (…
ruseinov Nov 17, 2022
0dc5358
Add event testing example to pallet template (#12722)
elv-nate Nov 17, 2022
a73a35e
Remove the `wasmtime` feature flag (#12684)
koute Nov 18, 2022
7cfaa03
Fix the light client protocol protobuf schema (#12732)
tomaka Nov 18, 2022
c290950
Update template to remove clippy warnings (#12670)
simonsso Nov 18, 2022
f80c370
Check all crates (#12709)
joao-paulo-parity Nov 21, 2022
ee9ddf1
client/beefy: persist voter state (#12712)
acatangiu Nov 21, 2022
69662c4
[Fix] Get target count from TargetList instead of storage (#12748)
ruseinov Nov 21, 2022
6cb4b67
Move block/state/warpc sync requests/responses to `ChainSync` (#12739)
altonen Nov 22, 2022
06d7a23
perf: generate_initial_session_keys: load runtime only if its relevan…
librelois Nov 22, 2022
431429f
Prevent epochs pruning while finalizing blocks on epoch 0 (#12758)
davxy Nov 23, 2022
269c799
return error instead of expect in `feasibility_check` (#12745)
kianenigma Nov 23, 2022
08d1b2c
BEEFY: optimize voter event loop for fewer 'active' wakeups (#12760)
acatangiu Nov 23, 2022
4e3a12b
Sort crates before splitting them into groups (+ some improvements) (…
joao-paulo-parity Nov 24, 2022
f465fee
contracts: Replace `sp-sandbox` and `wasmi-validation` by newest wasm…
athei Nov 24, 2022
d122169
update DefaultNoBound derive macro (#12723)
benluelo Nov 25, 2022
ab6142f
Fix rustdoc (#12777)
ggwpez Nov 25, 2022
3e91823
Allow Alliance Fellows to Give Up Voting Rights (#12730)
joepetrowski Nov 25, 2022
a1dc9d8
Add total nb to trie migration rpc (#12770)
cheme Nov 25, 2022
d11846b
add EnsureWithSuccess (#12775)
xlc Nov 25, 2022
39ef178
Explicitly unset RUSTC_WRAPPER=sccache environment variable (#12771)
rcny Nov 25, 2022
2eb5128
contracts: Don't put unstable functions in special module (#12781)
athei Nov 27, 2022
a92005a
ed25519_verify: Support using dalek for historical blocks (#12661)
bkchr Nov 27, 2022
d833e15
client/beefy: fix on-demand justifications sync for old blocks (#12767)
acatangiu Nov 28, 2022
a0e00dc
Remove Default, HasCompact, and TypeInfo trait bounds on AssetId (#12…
joepetrowski Nov 28, 2022
9ce75af
pallet-mmr: move offchain logic to client-side gadget (#12753)
serban300 Nov 29, 2022
59ca8df
Require rust-features check (#12796)
ggwpez Nov 29, 2022
5c8aa7e
MMR: move RPC code from frame/ to client/ (#12805)
acatangiu Nov 30, 2022
357c363
chore: remove unused traits for wasm interface (#12792)
yjhmelody Nov 30, 2022
cc36931
sc-transaction-handler: Fix potential crashes on exit (#12807)
bkchr Nov 30, 2022
2ed4058
Don't announce blocks in `sync_to_tip_when_we_sync_together_with_mult…
altonen Nov 30, 2022
982f599
contracts: Replace cargo feature `unstable-interface` with config (#1…
athei Nov 30, 2022
009c872
Bounties use SpendOrigin (#12808)
gavofyork Dec 1, 2022
5ae8a3b
Reduce provisioner work (#12749)
Dec 1, 2022
c17c7d8
Fix quantization in referenda alarm (#12815)
gavofyork Dec 2, 2022
34900ca
Add `Weightless` benchmark bailing (#12829)
ggwpez Dec 2, 2022
9812205
API for registering inactive funds (#12813)
gavofyork Dec 3, 2022
1a0af36
Tweak to active total migrations (#12832)
gavofyork Dec 3, 2022
cb3eaf2
frame-executive: Reject invalid inherents in the executive (#12365)
bkchr Dec 4, 2022
2bde8c1
Upgrade tokio to 1.22.0 and replace async-std with tokio (#12646)
dmitry-markin Dec 5, 2022
62a85fb
make threshold pub instead of pub crate (#12814)
amarsinghcodes Dec 5, 2022
0ab43bc
Non-Interactive Staking (#12610)
gavofyork Dec 5, 2022
2704ab3
pallet-balances: Fix inactive funds migration (#12840)
bkchr Dec 5, 2022
05ebde1
client/beefy: add some bounds on enqueued votes (#12562)
dharjeezy Dec 5, 2022
404b8c9
OpenGov: Abstentions (#12842)
gavofyork Dec 5, 2022
b1396f7
Add `with_weight` extrinsic (#12848)
shawntabrizi Dec 5, 2022
fa42631
[contracts] Add per local weight for function call (#12806)
agryaznov Dec 6, 2022
234749e
contracts: Add `instantiation_nonce` API (#12800)
athei Dec 6, 2022
1cc97dd
Rename some crates for publishing to crates.io (#12837)
joao-paulo-parity Dec 6, 2022
90eb84a
Merge remote-tracking branch 'upstream/polkadot-v0.9.34' into update-…
kacperzuk-neti Jan 23, 2023
b2bbeb8
Merge remote-tracking branch 'origin/develop' into update-to-polkadot…
kacperzuk-neti Jan 24, 2023
89ebc92
Fix CitizenshipMinimum value
kacperzuk-neti Jan 24, 2023
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
client/beefy: persist voter state (#12712)
* client/beefy: prepare worker for persisting state

* client/beefy: persist voter state

* client/beefy: initialize persistent state

* client/beefy: try to vote from the very beginning

Now that voter is initialized from persistent state, it makes
sense that it can attempt voting right away. This also helps
the genesis case when we consider block `One` as mandatory.

* client/beefy: add tests for voter state db
* client/beefy: persist voter state as soon as initialized
* client/beefy: make sure min-block-delta is at least 1
* client/beefy: persist state after voting

Persist state after handling self vote to avoid double voting in case
of voter restarts.

* client/beefy: persist state after handling mandatory block vote

For mandatory blocks we want to make sure we're not losing votes
in case of crashes or restarts, since voter will not make further
progress without finalizing them.

* frame/beefy: use GENESIS_AUTHORITY_SET_ID on pallet genesis

* client/beefy: initialize voter at either genesis or last finalized
To guarantee unbroken chain of mandatory blocks justifications, voter
will always resume from either last BEEFY-justified block or
`pallet-beefy` genesis, whichever is more recent.

Initialization walks back the chain from latest GRANDPA finalized
block looking for one of the above. Along the way, it also records
and enqueues for processing any BEEFY mandatory blocks that have
been already GRANDPA finalized but not BEEFY finalized.

* client/beefy: decouple voter init from aux db state load
* client/beefy: fix voter init tests
* remove debug prints
* gadget future must be type ()
* fix init from last justification

Signed-off-by: Adrian Catangiu <adrian@parity.io>
  • Loading branch information
acatangiu authored Nov 21, 2022
commit ee9ddf1238ce2c4a82f95841b8ac477a3dc1f2db
105 changes: 105 additions & 0 deletions client/beefy/src/aux_schema.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
// This file is part of Substrate.

// Copyright (C) 2019-2022 Parity Technologies (UK) Ltd.
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0

// This program 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.

// This program 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 this program. If not, see <https://www.gnu.org/licenses/>.

//! Schema for BEEFY state persisted in the aux-db.

use crate::worker::PersistedState;
use codec::{Decode, Encode};
use log::{info, trace};
use sc_client_api::{backend::AuxStore, Backend};
use sp_blockchain::{Error as ClientError, Result as ClientResult};
use sp_runtime::traits::Block as BlockT;

const VERSION_KEY: &[u8] = b"beefy_auxschema_version";
const WORKER_STATE: &[u8] = b"beefy_voter_state";

const CURRENT_VERSION: u32 = 1;

pub(crate) fn write_current_version<B: AuxStore>(backend: &B) -> ClientResult<()> {
info!(target: "beefy", "🥩 write aux schema version {:?}", CURRENT_VERSION);
AuxStore::insert_aux(backend, &[(VERSION_KEY, CURRENT_VERSION.encode().as_slice())], &[])
}

/// Write voter state.
pub(crate) fn write_voter_state<Block: BlockT, B: AuxStore>(
backend: &B,
state: &PersistedState<Block>,
) -> ClientResult<()> {
trace!(target: "beefy", "🥩 persisting {:?}", state);
backend.insert_aux(&[(WORKER_STATE, state.encode().as_slice())], &[])
}

fn load_decode<B: AuxStore, T: Decode>(backend: &B, key: &[u8]) -> ClientResult<Option<T>> {
match backend.get_aux(key)? {
None => Ok(None),
Some(t) => T::decode(&mut &t[..])
.map_err(|e| ClientError::Backend(format!("BEEFY DB is corrupted: {}", e)))
.map(Some),
}
}

/// Load or initialize persistent data from backend.
pub(crate) fn load_persistent<B, BE>(backend: &BE) -> ClientResult<Option<PersistedState<B>>>
where
B: BlockT,
BE: Backend<B>,
{
let version: Option<u32> = load_decode(backend, VERSION_KEY)?;

match version {
None => (),
Some(1) => return load_decode::<_, PersistedState<B>>(backend, WORKER_STATE),
other =>
return Err(ClientError::Backend(format!("Unsupported BEEFY DB version: {:?}", other))),
}

// No persistent state found in DB.
Ok(None)
}

#[cfg(test)]
pub(crate) mod tests {
use super::*;
use crate::tests::BeefyTestNet;
use sc_network_test::TestNetFactory;

// also used in tests.rs
pub fn verify_persisted_version<B: BlockT, BE: Backend<B>>(backend: &BE) -> bool {
let version: u32 = load_decode(backend, VERSION_KEY).unwrap().unwrap();
version == CURRENT_VERSION
}

#[test]
fn should_load_persistent_sanity_checks() {
let mut net = BeefyTestNet::new(1);
let backend = net.peer(0).client().as_backend();

// version not available in db -> None
assert_eq!(load_persistent(&*backend).unwrap(), None);

// populate version in db
write_current_version(&*backend).unwrap();
// verify correct version is retrieved
assert_eq!(load_decode(&*backend, VERSION_KEY).unwrap(), Some(CURRENT_VERSION));

// version is available in db but state isn't -> None
assert_eq!(load_persistent(&*backend).unwrap(), None);

// full `PersistedState` load is tested in `tests.rs`.
}
}
Loading