mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 19:51:05 +00:00
BABE signing and verification (#2270)
* Add basic BABE consensus type * Update core/consensus/babe/slots/Cargo.toml Co-Authored-By: DemiMarie-parity <48690212+DemiMarie-parity@users.noreply.github.com> * Fix parameterization and run `rustfmt` * Respond to review comments * Update various Cargo.lock files * Revert "Update various Cargo.lock files" This reverts commit af53d7624752a744320e9cbb25749fdd8e6f46d2. * `BabeSealSignature` → `BabeSeal` * Move slot code to its own crate This was highly non-trivial, due to cyclic dependencies. * Remove redundancy between AuRa and BABE Some of the code duplication was removed using a macro. * Fix build error * Avoid non-`#[doc(hidden)]` re-exports Also, bump some library versions in `Cargo.toml`. * Remove dead code in AuRa * Remove impl_slot macro It was more trouble than it was worth. Also, delete useless dependencies on Serde. * AuRa and BABE need different DB keys * Bring back `aura::Network`, but deprecate it. * Improve docs and add `slot_duration` inherent method * Add docs to `substrate_consensus_aura::SlotDuration` * Add missing documentation and #![forbid(missing_docs, unsafe_code)] * Add a #![forbid(missing_docs)] * Remove dependency of `test-runtime` on `slots` * Update core/consensus/babe/src/lib.rs Co-Authored-By: DemiMarie-parity <48690212+DemiMarie-parity@users.noreply.github.com> * Remove wrongly added file * Fix copyright notice Co-Authored-By: DemiMarie-parity <48690212+DemiMarie-parity@users.noreply.github.com> * Bump `impl_version` and `spec_version` * Add more code to BABE Most of it is copied from AuRa code, but at least the initial core is there. * Stuck on horrible compiler error message * add missing files * Spaces → tabs * Simplify code * Fix compilation This involved fixing dependencies and adding a `Mutex`. * More work on BABE * Fix deprecation version * Fix deprecation version; remove spurious carets * Fix Cargo.toml * Implement VRF signing logic * The import queue code compiles, though it probably doesn’t work. * Add VRF verification * Update Cargo.lock * Update dependencies * Move test network to sr25519 authority keys * Fix accidental build bustage * Trying to get the tests to work * Add logging messages and remove dead code There seems to be a problem with the test network. Since AuRa and BABE are both affected, this is most likely due to the switch from ed25519 to sr25519. * Trying to get the tests to work * Add logging messages and remove dead code There seems to be a problem with the test network. Since AuRa and BABE are both affected, this is most likely due to the switch from ed25519 to sr25519. * Working testsuite at last! The problem was with serialization and deserialization. Normally, those functions are generated automatically, but those for `BabeSeal` had to be written manually. The hand-written versions were not correct, however, as shown by the decoder not being able to decode the output of the encoder. * Enable BabeSeal::Encode asserts in --release tests * Bump runtime and dependency versions * Fix wasm compilation The wasm build was broken because of a typo in `core/test-runtime/src/lib.rs`, and missing gates on the `std` feature in `core/consensus/{aura,babe}/primitives/Cargo.toml`. Additionally, improve the quotation in the build scripts. * Merge Cargo.lock * Change expected JSON string The test was also broken on `master`, so I suspect that the test was incorrect. * Responded to review * Remove hard-coded threshold from production code A hard-coded threshold is now only used in tests. * Fix swapped doc comments * Fix unused import warnings * fix ci error * fix typo * Fix spacing in docs * Minor changes suggested by @joepetrowski on https://github.com/paritytech/substrate/pull/2372 * Remove unnecessary getters * fix compile error * Fix silly unused-variable error * Improve documentation formatting Co-Authored-By: DemiMarie-parity <48690212+DemiMarie-parity@users.noreply.github.com> * Add issue links * Revert excess verbosity and #![forbid(warnings)] * Apply suggestions from code review Co-Authored-By: DemiMarie-parity <48690212+DemiMarie-parity@users.noreply.github.com> * Reformat some comments * Threshold should depend on number of validators Also, respond to code review * Fix silly compilation errors * Reduce logging verbosity * Fix missing import
This commit is contained in:
@@ -22,7 +22,7 @@ use super::AccountId;
|
||||
use parity_codec::{Encode, KeyedVec, Joiner};
|
||||
use primitives::{ChangesTrieConfiguration, map, storage::well_known_keys};
|
||||
use runtime_primitives::traits::Block;
|
||||
use primitives::ed25519::Public as AuthorityId;
|
||||
use primitives::sr25519::Public as AuthorityId;
|
||||
|
||||
/// Configuration of a general Substrate test genesis block.
|
||||
pub struct GenesisConfig {
|
||||
|
||||
@@ -43,7 +43,7 @@ use runtime_primitives::{
|
||||
};
|
||||
use runtime_version::RuntimeVersion;
|
||||
pub use primitives::hash::H256;
|
||||
use primitives::{ed25519, sr25519, OpaqueMetadata};
|
||||
use primitives::{sr25519, OpaqueMetadata};
|
||||
#[cfg(any(feature = "std", test))]
|
||||
use runtime_version::NativeVersion;
|
||||
use inherents::{CheckInherentsResult, InherentData};
|
||||
@@ -142,7 +142,7 @@ impl Extrinsic {
|
||||
}
|
||||
|
||||
/// The signature type used by authorities.
|
||||
pub type AuthoritySignature = ed25519::Signature;
|
||||
pub type AuthoritySignature = sr25519::Signature;
|
||||
/// The identity type used by authorities.
|
||||
pub type AuthorityId = <AuthoritySignature as Verify>::Signer;
|
||||
/// The signature type used by accounts/transactions.
|
||||
@@ -448,6 +448,16 @@ cfg_if! {
|
||||
fn slot_duration() -> u64 { 1 }
|
||||
}
|
||||
|
||||
impl consensus_babe::BabeApi<Block> for Runtime {
|
||||
fn startup_data() -> consensus_babe::BabeConfiguration {
|
||||
consensus_babe::BabeConfiguration {
|
||||
slot_duration: 1,
|
||||
expected_block_time: 1,
|
||||
threshold: std::u64::MAX,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl offchain_primitives::OffchainWorkerApi<Block> for Runtime {
|
||||
fn offchain_worker(block: u64) {
|
||||
let ex = Extrinsic::IncludeData(block.encode());
|
||||
@@ -457,7 +467,7 @@ cfg_if! {
|
||||
|
||||
impl consensus_authorities::AuthoritiesApi<Block> for Runtime {
|
||||
fn authorities() -> Vec<AuthorityIdFor<Block>> {
|
||||
crate::system::authorities()
|
||||
system::authorities()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -580,6 +590,16 @@ cfg_if! {
|
||||
fn slot_duration() -> u64 { 1 }
|
||||
}
|
||||
|
||||
impl consensus_babe::BabeApi<Block> for Runtime {
|
||||
fn startup_data() -> consensus_babe::BabeConfiguration {
|
||||
consensus_babe::BabeConfiguration {
|
||||
slot_duration: 1,
|
||||
expected_block_time: 1,
|
||||
threshold: core::u64::MAX,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl offchain_primitives::OffchainWorkerApi<Block> for Runtime {
|
||||
fn offchain_worker(block: u64) {
|
||||
let ex = Extrinsic::IncludeData(block.encode());
|
||||
@@ -589,7 +609,7 @@ cfg_if! {
|
||||
|
||||
impl consensus_authorities::AuthoritiesApi<Block> for Runtime {
|
||||
fn authorities() -> Vec<AuthorityIdFor<Block>> {
|
||||
crate::system::authorities()
|
||||
system::authorities()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ use runtime_primitives::{ApplyError, ApplyOutcome, ApplyResult, transaction_vali
|
||||
use parity_codec::{KeyedVec, Encode};
|
||||
use super::{AccountId, BlockNumber, Extrinsic, Transfer, H256 as Hash, Block, Header, Digest};
|
||||
use primitives::{Blake2Hasher, storage::well_known_keys};
|
||||
use primitives::ed25519::Public as AuthorityId;
|
||||
use primitives::sr25519::Public as AuthorityId;
|
||||
|
||||
const NONCE_OF: &[u8] = b"nonce:";
|
||||
const BALANCE_OF: &[u8] = b"balance:";
|
||||
|
||||
Reference in New Issue
Block a user