Stable: 1.10.9 backports (#9016)
* parity-version: bump stable to 1.10.9 * scripts: remove md5 checksums (#8884) * Add support for --chain tobalaba (#8870) * Add support for --chain tobalaba * Only return error log for rustls (#9025) * Fixes for misbehavior reporting in AuthorityRound (#8998) * aura: only report after checking for repeated skipped primaries * aura: refactor duplicate code for getting epoch validator set * aura: verify_external: report on validator set contract instance * aura: use correct validator set epoch number when reporting * aura: use epoch set when verifying blocks * aura: report skipped primaries when generating seal * aura: handle immediate transitions * aura: don't report skipped steps from genesis to first block * aura: fix reporting test * aura: refactor duplicate code to handle immediate_transitions * aura: let reporting fail on verify_block_basic * aura: add comment about possible failure of reporting
This commit is contained in:
parent
bd20c45898
commit
23a9eefd64
12
Cargo.lock
generated
12
Cargo.lock
generated
@ -1875,7 +1875,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parity"
|
name = "parity"
|
||||||
version = "1.10.8"
|
version = "1.10.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"clap 2.29.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.29.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -1923,7 +1923,7 @@ dependencies = [
|
|||||||
"parity-rpc 1.9.0",
|
"parity-rpc 1.9.0",
|
||||||
"parity-rpc-client 1.4.0",
|
"parity-rpc-client 1.4.0",
|
||||||
"parity-updater 1.9.0",
|
"parity-updater 1.9.0",
|
||||||
"parity-version 1.10.8",
|
"parity-version 1.10.9",
|
||||||
"parity-whisper 0.1.0",
|
"parity-whisper 0.1.0",
|
||||||
"parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"path 0.1.0",
|
"path 0.1.0",
|
||||||
@ -1972,7 +1972,7 @@ dependencies = [
|
|||||||
"parity-reactor 0.1.0",
|
"parity-reactor 0.1.0",
|
||||||
"parity-ui 1.9.0",
|
"parity-ui 1.9.0",
|
||||||
"parity-ui-deprecation 1.10.0",
|
"parity-ui-deprecation 1.10.0",
|
||||||
"parity-version 1.10.8",
|
"parity-version 1.10.9",
|
||||||
"parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rand 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rand 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2109,7 +2109,7 @@ dependencies = [
|
|||||||
"order-stat 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"order-stat 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"parity-reactor 0.1.0",
|
"parity-reactor 0.1.0",
|
||||||
"parity-updater 1.9.0",
|
"parity-updater 1.9.0",
|
||||||
"parity-version 1.10.8",
|
"parity-version 1.10.9",
|
||||||
"parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pretty_assertions 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pretty_assertions 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rand 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rand 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2226,7 +2226,7 @@ dependencies = [
|
|||||||
"ethsync 1.9.0",
|
"ethsync 1.9.0",
|
||||||
"log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"parity-hash-fetch 1.9.0",
|
"parity-hash-fetch 1.9.0",
|
||||||
"parity-version 1.10.8",
|
"parity-version 1.10.9",
|
||||||
"parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"path 0.1.0",
|
"path 0.1.0",
|
||||||
"semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2235,7 +2235,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parity-version"
|
name = "parity-version"
|
||||||
version = "1.10.8"
|
version = "1.10.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ethcore-bytes 0.1.0",
|
"ethcore-bytes 0.1.0",
|
||||||
"rlp 0.2.1",
|
"rlp 0.2.1",
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
description = "Parity Ethereum client"
|
description = "Parity Ethereum client"
|
||||||
name = "parity"
|
name = "parity"
|
||||||
# NOTE Make sure to update util/version/Cargo.toml as well
|
# NOTE Make sure to update util/version/Cargo.toml as well
|
||||||
version = "1.10.8"
|
version = "1.10.9"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
authors = ["Parity Technologies <admin@parity.io>"]
|
authors = ["Parity Technologies <admin@parity.io>"]
|
||||||
|
|
||||||
|
54
ethcore/res/ethereum/tobalaba.json
Normal file
54
ethcore/res/ethereum/tobalaba.json
Normal file
File diff suppressed because one or more lines are too long
@ -16,12 +16,13 @@
|
|||||||
|
|
||||||
//! A blockchain engine that supports a non-instant BFT proof-of-authority.
|
//! A blockchain engine that supports a non-instant BFT proof-of-authority.
|
||||||
|
|
||||||
|
use std::collections::{BTreeMap, HashSet};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
use std::iter::FromIterator;
|
||||||
|
use std::ops::Deref;
|
||||||
use std::sync::atomic::{AtomicUsize, AtomicBool, Ordering as AtomicOrdering};
|
use std::sync::atomic::{AtomicUsize, AtomicBool, Ordering as AtomicOrdering};
|
||||||
use std::sync::{Weak, Arc};
|
use std::sync::{Weak, Arc};
|
||||||
use std::time::{UNIX_EPOCH, Duration};
|
use std::time::{UNIX_EPOCH, Duration};
|
||||||
use std::collections::{BTreeMap, HashSet};
|
|
||||||
use std::iter::FromIterator;
|
|
||||||
|
|
||||||
use account_provider::AccountProvider;
|
use account_provider::AccountProvider;
|
||||||
use block::*;
|
use block::*;
|
||||||
@ -564,7 +565,6 @@ fn verify_external(header: &Header, validators: &ValidatorSet, empty_steps_trans
|
|||||||
|
|
||||||
if is_invalid_proposer {
|
if is_invalid_proposer {
|
||||||
trace!(target: "engine", "verify_block_external: bad proposer for step: {}", header_step);
|
trace!(target: "engine", "verify_block_external: bad proposer for step: {}", header_step);
|
||||||
validators.report_benign(header.author(), header.number(), header.number());
|
|
||||||
Err(EngineError::NotProposer(Mismatch { expected: correct_proposer, found: header.author().clone() }))?
|
Err(EngineError::NotProposer(Mismatch { expected: correct_proposer, found: header.author().clone() }))?
|
||||||
} else {
|
} else {
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -596,6 +596,23 @@ impl AsMillis for Duration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A type for storing owned or borrowed data that has a common type.
|
||||||
|
// Useful for returning either a borrow or owned data from a function.
|
||||||
|
enum CowLike<'a, A: 'a + ?Sized, B> {
|
||||||
|
Borrowed(&'a A),
|
||||||
|
Owned(B),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, A: ?Sized, B> Deref for CowLike<'a, A, B> where B: AsRef<A> {
|
||||||
|
type Target = A;
|
||||||
|
fn deref(&self) -> &A {
|
||||||
|
match self {
|
||||||
|
CowLike::Borrowed(b) => b,
|
||||||
|
CowLike::Owned(o) => o.as_ref(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl AuthorityRound {
|
impl AuthorityRound {
|
||||||
/// Create a new instance of AuthorityRound engine.
|
/// Create a new instance of AuthorityRound engine.
|
||||||
pub fn new(our_params: AuthorityRoundParams, machine: EthereumMachine) -> Result<Arc<Self>, Error> {
|
pub fn new(our_params: AuthorityRoundParams, machine: EthereumMachine) -> Result<Arc<Self>, Error> {
|
||||||
@ -643,6 +660,30 @@ impl AuthorityRound {
|
|||||||
Ok(engine)
|
Ok(engine)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fetch correct validator set for epoch at header, taking into account
|
||||||
|
// finality of previous transitions.
|
||||||
|
fn epoch_set<'a>(&'a self, header: &Header) -> Result<(CowLike<ValidatorSet, SimpleList>, BlockNumber), Error> {
|
||||||
|
Ok(if self.immediate_transitions {
|
||||||
|
(CowLike::Borrowed(&*self.validators), header.number())
|
||||||
|
} else {
|
||||||
|
let mut epoch_manager = self.epoch_manager.lock();
|
||||||
|
let client = match self.client.read().as_ref().and_then(|weak| weak.upgrade()) {
|
||||||
|
Some(client) => client,
|
||||||
|
None => {
|
||||||
|
debug!(target: "engine", "Unable to verify sig: missing client ref.");
|
||||||
|
return Err(EngineError::RequiresClient.into())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if !epoch_manager.zoom_to(&*client, &self.machine, &*self.validators, header) {
|
||||||
|
debug!(target: "engine", "Unable to zoom to epoch.");
|
||||||
|
return Err(EngineError::RequiresClient.into())
|
||||||
|
}
|
||||||
|
|
||||||
|
(CowLike::Owned(epoch_manager.validators().clone()), epoch_manager.epoch_transition_number)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn empty_steps(&self, from_step: U256, to_step: U256, parent_hash: H256) -> Vec<EmptyStep> {
|
fn empty_steps(&self, from_step: U256, to_step: U256, parent_hash: H256) -> Vec<EmptyStep> {
|
||||||
self.empty_steps.lock().iter().filter(|e| {
|
self.empty_steps.lock().iter().filter(|e| {
|
||||||
U256::from(e.step) > from_step &&
|
U256::from(e.step) > from_step &&
|
||||||
@ -688,6 +729,28 @@ impl AuthorityRound {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn report_skipped(&self, header: &Header, current_step: usize, parent_step: usize, validators: &ValidatorSet, set_number: u64) {
|
||||||
|
// we're building on top of the genesis block so don't report any skipped steps
|
||||||
|
if header.number() == 1 {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if let (true, Some(me)) = (current_step > parent_step + 1, self.signer.read().address()) {
|
||||||
|
debug!(target: "engine", "Author {} built block with step gap. current step: {}, parent step: {}",
|
||||||
|
header.author(), current_step, parent_step);
|
||||||
|
let mut reported = HashSet::new();
|
||||||
|
for step in parent_step + 1..current_step {
|
||||||
|
let skipped_primary = step_proposer(validators, header.parent_hash(), step);
|
||||||
|
// Do not report this signer.
|
||||||
|
if skipped_primary != me {
|
||||||
|
// Stop reporting once validators start repeating.
|
||||||
|
if !reported.insert(skipped_primary) { break; }
|
||||||
|
self.validators.report_benign(&skipped_primary, set_number, header.number());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unix_now() -> Duration {
|
fn unix_now() -> Duration {
|
||||||
@ -867,32 +930,15 @@ impl Engine<EthereumMachine> for AuthorityRound {
|
|||||||
return Seal::None;
|
return Seal::None;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fetch correct validator set for current epoch, taking into account
|
let (validators, set_number) = match self.epoch_set(header) {
|
||||||
// finality of previous transitions.
|
Err(err) => {
|
||||||
let active_set;
|
warn!(target: "engine", "Unable to generate seal: {}", err);
|
||||||
|
|
||||||
let validators = if self.immediate_transitions {
|
|
||||||
&*self.validators
|
|
||||||
} else {
|
|
||||||
let mut epoch_manager = self.epoch_manager.lock();
|
|
||||||
let client = match self.client.read().as_ref().and_then(|weak| weak.upgrade()) {
|
|
||||||
Some(client) => client,
|
|
||||||
None => {
|
|
||||||
warn!(target: "engine", "Unable to generate seal: missing client ref.");
|
|
||||||
return Seal::None;
|
return Seal::None;
|
||||||
}
|
},
|
||||||
|
Ok(ok) => ok,
|
||||||
};
|
};
|
||||||
|
|
||||||
if !epoch_manager.zoom_to(&*client, &self.machine, &*self.validators, header) {
|
if is_step_proposer(&*validators, header.parent_hash(), step, header.author()) {
|
||||||
debug!(target: "engine", "Unable to zoom to epoch.");
|
|
||||||
return Seal::None;
|
|
||||||
}
|
|
||||||
|
|
||||||
active_set = epoch_manager.validators().clone();
|
|
||||||
&active_set as &_
|
|
||||||
};
|
|
||||||
|
|
||||||
if is_step_proposer(validators, header.parent_hash(), step, header.author()) {
|
|
||||||
// this is guarded against by `can_propose` unless the block was signed
|
// this is guarded against by `can_propose` unless the block was signed
|
||||||
// on the same step (implies same key) and on a different node.
|
// on the same step (implies same key) and on a different node.
|
||||||
if parent_step == step.into() {
|
if parent_step == step.into() {
|
||||||
@ -923,9 +969,15 @@ impl Engine<EthereumMachine> for AuthorityRound {
|
|||||||
|
|
||||||
// only issue the seal if we were the first to reach the compare_and_swap.
|
// only issue the seal if we were the first to reach the compare_and_swap.
|
||||||
if self.step.can_propose.compare_and_swap(true, false, AtomicOrdering::SeqCst) {
|
if self.step.can_propose.compare_and_swap(true, false, AtomicOrdering::SeqCst) {
|
||||||
|
// we can drop all accumulated empty step messages that are
|
||||||
|
// older than the parent step since we're including them in
|
||||||
|
// the seal
|
||||||
self.clear_empty_steps(parent_step);
|
self.clear_empty_steps(parent_step);
|
||||||
|
|
||||||
|
// report any skipped primaries between the parent block and
|
||||||
|
// the block we're sealing
|
||||||
|
self.report_skipped(header, step, u64::from(parent_step) as usize, &*validators, set_number);
|
||||||
|
|
||||||
let mut fields = vec![
|
let mut fields = vec![
|
||||||
encode(&step).into_vec(),
|
encode(&step).into_vec(),
|
||||||
encode(&(&H520::from(signature) as &[u8])).into_vec(),
|
encode(&(&H520::from(signature) as &[u8])).into_vec(),
|
||||||
@ -1030,13 +1082,21 @@ impl Engine<EthereumMachine> for AuthorityRound {
|
|||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO [ToDr] Should this go from epoch manager?
|
|
||||||
// If yes then probably benign reporting needs to be moved further in the verification.
|
|
||||||
let set_number = header.number();
|
|
||||||
|
|
||||||
match verify_timestamp(&self.step.inner, header_step(header, self.empty_steps_transition)?) {
|
match verify_timestamp(&self.step.inner, header_step(header, self.empty_steps_transition)?) {
|
||||||
Err(BlockError::InvalidSeal) => {
|
Err(BlockError::InvalidSeal) => {
|
||||||
|
// This check runs in Phase 1 where there is no guarantee that the parent block is
|
||||||
|
// already imported, therefore the call to `epoch_set` may fail. In that case we
|
||||||
|
// won't report the misbehavior but this is not a concern because:
|
||||||
|
// - Only authorities can report and it's expected that they'll be up-to-date and
|
||||||
|
// importing, therefore the parent header will most likely be available
|
||||||
|
// - Even if you are an authority that is syncing the chain, the contract will most
|
||||||
|
// likely ignore old reports
|
||||||
|
// - This specific check is only relevant if you're importing (since it checks
|
||||||
|
// against wall clock)
|
||||||
|
if let Ok((_, set_number)) = self.epoch_set(header) {
|
||||||
self.validators.report_benign(header.author(), set_number, header.number());
|
self.validators.report_benign(header.author(), set_number, header.number());
|
||||||
|
}
|
||||||
|
|
||||||
Err(BlockError::InvalidSeal.into())
|
Err(BlockError::InvalidSeal.into())
|
||||||
}
|
}
|
||||||
Err(e) => Err(e.into()),
|
Err(e) => Err(e.into()),
|
||||||
@ -1048,8 +1108,8 @@ impl Engine<EthereumMachine> for AuthorityRound {
|
|||||||
fn verify_block_family(&self, header: &Header, parent: &Header) -> Result<(), Error> {
|
fn verify_block_family(&self, header: &Header, parent: &Header) -> Result<(), Error> {
|
||||||
let step = header_step(header, self.empty_steps_transition)?;
|
let step = header_step(header, self.empty_steps_transition)?;
|
||||||
let parent_step = header_step(parent, self.empty_steps_transition)?;
|
let parent_step = header_step(parent, self.empty_steps_transition)?;
|
||||||
// TODO [ToDr] Should this go from epoch manager?
|
|
||||||
let set_number = header.number();
|
let (validators, set_number) = self.epoch_set(header)?;
|
||||||
|
|
||||||
// Ensure header is from the step after parent.
|
// Ensure header is from the step after parent.
|
||||||
if step == parent_step
|
if step == parent_step
|
||||||
@ -1076,7 +1136,7 @@ impl Engine<EthereumMachine> for AuthorityRound {
|
|||||||
format!("empty step proof for invalid parent hash: {:?}", empty_step.parent_hash)))?;
|
format!("empty step proof for invalid parent hash: {:?}", empty_step.parent_hash)))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if !empty_step.verify(&*self.validators).unwrap_or(false) {
|
if !empty_step.verify(&*validators).unwrap_or(false) {
|
||||||
Err(EngineError::InsufficientProof(
|
Err(EngineError::InsufficientProof(
|
||||||
format!("invalid empty step proof: {:?}", empty_step)))?;
|
format!("invalid empty step proof: {:?}", empty_step)))?;
|
||||||
}
|
}
|
||||||
@ -1090,21 +1150,7 @@ impl Engine<EthereumMachine> for AuthorityRound {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Report skipped primaries.
|
self.report_skipped(header, step, parent_step, &*validators, set_number);
|
||||||
if let (true, Some(me)) = (step > parent_step + 1, self.signer.read().address()) {
|
|
||||||
debug!(target: "engine", "Author {} built block with step gap. current step: {}, parent step: {}",
|
|
||||||
header.author(), step, parent_step);
|
|
||||||
let mut reported = HashSet::new();
|
|
||||||
for s in parent_step + 1..step {
|
|
||||||
let skipped_primary = step_proposer(&*self.validators, &parent.hash(), s);
|
|
||||||
// Do not report this signer.
|
|
||||||
if skipped_primary != me {
|
|
||||||
self.validators.report_benign(&skipped_primary, set_number, header.number());
|
|
||||||
// Stop reporting once validators start repeating.
|
|
||||||
if !reported.insert(skipped_primary) { break; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -1112,37 +1158,21 @@ impl Engine<EthereumMachine> for AuthorityRound {
|
|||||||
|
|
||||||
// Check the validators.
|
// Check the validators.
|
||||||
fn verify_block_external(&self, header: &Header) -> Result<(), Error> {
|
fn verify_block_external(&self, header: &Header) -> Result<(), Error> {
|
||||||
// fetch correct validator set for current epoch, taking into account
|
let (validators, set_number) = self.epoch_set(header)?;
|
||||||
// finality of previous transitions.
|
|
||||||
let active_set;
|
|
||||||
let validators = if self.immediate_transitions {
|
|
||||||
&*self.validators
|
|
||||||
} else {
|
|
||||||
// get correct validator set for epoch.
|
|
||||||
let client = match self.client.read().as_ref().and_then(|weak| weak.upgrade()) {
|
|
||||||
Some(client) => client,
|
|
||||||
None => {
|
|
||||||
debug!(target: "engine", "Unable to verify sig: missing client ref.");
|
|
||||||
return Err(EngineError::RequiresClient.into())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut epoch_manager = self.epoch_manager.lock();
|
|
||||||
if !epoch_manager.zoom_to(&*client, &self.machine, &*self.validators, header) {
|
|
||||||
debug!(target: "engine", "Unable to zoom to epoch.");
|
|
||||||
return Err(EngineError::RequiresClient.into())
|
|
||||||
}
|
|
||||||
|
|
||||||
active_set = epoch_manager.validators().clone();
|
|
||||||
&active_set as &_
|
|
||||||
};
|
|
||||||
|
|
||||||
// verify signature against fixed list, but reports should go to the
|
// verify signature against fixed list, but reports should go to the
|
||||||
// contract itself.
|
// contract itself.
|
||||||
let res = verify_external(header, validators, self.empty_steps_transition);
|
let res = verify_external(header, &*validators, self.empty_steps_transition);
|
||||||
if res.is_ok() {
|
match res {
|
||||||
|
Err(Error::Engine(EngineError::NotProposer(_))) => {
|
||||||
|
self.validators.report_benign(header.author(), set_number, header.number());
|
||||||
|
},
|
||||||
|
Ok(_) => {
|
||||||
|
// we can drop all accumulated empty step messages that are older than this header's step
|
||||||
let header_step = header_step(header, self.empty_steps_transition)?;
|
let header_step = header_step(header, self.empty_steps_transition)?;
|
||||||
self.clear_empty_steps(header_step.into());
|
self.clear_empty_steps(header_step.into());
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
}
|
}
|
||||||
res
|
res
|
||||||
}
|
}
|
||||||
@ -1542,7 +1572,6 @@ mod tests {
|
|||||||
parent_header.set_seal(vec![encode(&1usize).into_vec()]);
|
parent_header.set_seal(vec![encode(&1usize).into_vec()]);
|
||||||
parent_header.set_gas_limit("222222".parse::<U256>().unwrap());
|
parent_header.set_gas_limit("222222".parse::<U256>().unwrap());
|
||||||
let mut header: Header = Header::default();
|
let mut header: Header = Header::default();
|
||||||
header.set_number(1);
|
|
||||||
header.set_gas_limit("222222".parse::<U256>().unwrap());
|
header.set_gas_limit("222222".parse::<U256>().unwrap());
|
||||||
header.set_seal(vec![encode(&3usize).into_vec()]);
|
header.set_seal(vec![encode(&3usize).into_vec()]);
|
||||||
|
|
||||||
@ -1552,8 +1581,15 @@ mod tests {
|
|||||||
|
|
||||||
aura.set_signer(Arc::new(AccountProvider::transient_provider()), Default::default(), Default::default());
|
aura.set_signer(Arc::new(AccountProvider::transient_provider()), Default::default(), Default::default());
|
||||||
|
|
||||||
|
// Do not report on steps skipped between genesis and first block.
|
||||||
|
header.set_number(1);
|
||||||
assert!(aura.verify_block_family(&header, &parent_header).is_ok());
|
assert!(aura.verify_block_family(&header, &parent_header).is_ok());
|
||||||
assert_eq!(last_benign.load(AtomicOrdering::SeqCst), 1);
|
assert_eq!(last_benign.load(AtomicOrdering::SeqCst), 0);
|
||||||
|
|
||||||
|
// Report on skipped steps otherwise.
|
||||||
|
header.set_number(2);
|
||||||
|
assert!(aura.verify_block_family(&header, &parent_header).is_ok());
|
||||||
|
assert_eq!(last_benign.load(AtomicOrdering::SeqCst), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -55,7 +55,7 @@ pub fn new_validator_set(spec: ValidatorSpec) -> Box<ValidatorSet> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// A validator set.
|
/// A validator set.
|
||||||
pub trait ValidatorSet: Send + Sync {
|
pub trait ValidatorSet: Send + Sync + 'static {
|
||||||
/// Get the default "Call" helper, for use in general operation.
|
/// Get the default "Call" helper, for use in general operation.
|
||||||
// TODO [keorn]: this is a hack intended to migrate off of
|
// TODO [keorn]: this is a hack intended to migrate off of
|
||||||
// a strict dependency on state always being available.
|
// a strict dependency on state always being available.
|
||||||
|
@ -104,6 +104,12 @@ impl ValidatorSet for SimpleList {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl AsRef<ValidatorSet> for SimpleList {
|
||||||
|
fn as_ref(&self) -> &ValidatorSet {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
@ -61,6 +61,11 @@ pub fn new_expanse<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
|||||||
load(params.into(), include_bytes!("../../res/ethereum/expanse.json"))
|
load(params.into(), include_bytes!("../../res/ethereum/expanse.json"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a new Tobalaba chain spec.
|
||||||
|
pub fn new_tobalaba<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
||||||
|
load(params.into(), include_bytes!("../../res/ethereum/tobalaba.json"))
|
||||||
|
}
|
||||||
|
|
||||||
/// Create a new Musicoin mainnet chain spec.
|
/// Create a new Musicoin mainnet chain spec.
|
||||||
pub fn new_musicoin<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
pub fn new_musicoin<'a, T: Into<SpecParams<'a>>>(params: T) -> Spec {
|
||||||
load(params.into(), include_bytes!("../../res/ethereum/musicoin.json"))
|
load(params.into(), include_bytes!("../../res/ethereum/musicoin.json"))
|
||||||
|
@ -71,7 +71,7 @@ pub fn setup_log(config: &Config) -> Result<Arc<RotatingLogger>, String> {
|
|||||||
builder.filter(Some("ws"), LogLevelFilter::Warn);
|
builder.filter(Some("ws"), LogLevelFilter::Warn);
|
||||||
builder.filter(Some("reqwest"), LogLevelFilter::Warn);
|
builder.filter(Some("reqwest"), LogLevelFilter::Warn);
|
||||||
builder.filter(Some("hyper"), LogLevelFilter::Warn);
|
builder.filter(Some("hyper"), LogLevelFilter::Warn);
|
||||||
builder.filter(Some("rustls"), LogLevelFilter::Warn);
|
builder.filter(Some("rustls"), LogLevelFilter::Error);
|
||||||
// Enable info for others.
|
// Enable info for others.
|
||||||
builder.filter(None, LogLevelFilter::Info);
|
builder.filter(None, LogLevelFilter::Info);
|
||||||
|
|
||||||
|
@ -462,7 +462,7 @@
|
|||||||
<key>OVERWRITE_PERMISSIONS</key>
|
<key>OVERWRITE_PERMISSIONS</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>VERSION</key>
|
<key>VERSION</key>
|
||||||
<string>1.10.8</string>
|
<string>1.10.9</string>
|
||||||
</dict>
|
</dict>
|
||||||
<key>UUID</key>
|
<key>UUID</key>
|
||||||
<string>2DCD5B81-7BAF-4DA1-9251-6274B089FD36</string>
|
<string>2DCD5B81-7BAF-4DA1-9251-6274B089FD36</string>
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
!define DESCRIPTION "Fast, light, robust Ethereum implementation"
|
!define DESCRIPTION "Fast, light, robust Ethereum implementation"
|
||||||
!define VERSIONMAJOR 1
|
!define VERSIONMAJOR 1
|
||||||
!define VERSIONMINOR 10
|
!define VERSIONMINOR 10
|
||||||
!define VERSIONBUILD 8
|
!define VERSIONBUILD 9
|
||||||
!define ARGS ""
|
!define ARGS ""
|
||||||
!define FIRST_START_ARGS "--mode=passive ui"
|
!define FIRST_START_ARGS "--mode=passive ui"
|
||||||
|
|
||||||
|
@ -277,7 +277,7 @@ usage! {
|
|||||||
|
|
||||||
ARG arg_chain: (String) = "foundation", or |c: &Config| c.parity.as_ref()?.chain.clone(),
|
ARG arg_chain: (String) = "foundation", or |c: &Config| c.parity.as_ref()?.chain.clone(),
|
||||||
"--chain=[CHAIN]",
|
"--chain=[CHAIN]",
|
||||||
"Specify the blockchain type. CHAIN may be either a JSON chain specification file or olympic, frontier, homestead, mainnet, morden, ropsten, classic, expanse, musicoin, ellaism, testnet, kovan or dev.",
|
"Specify the blockchain type. CHAIN may be either a JSON chain specification file or olympic, frontier, homestead, mainnet, morden, ropsten, classic, expanse, tobalaba, musicoin, ellaism, testnet, kovan or dev.",
|
||||||
|
|
||||||
ARG arg_keys_path: (String) = "$BASE/keys", or |c: &Config| c.parity.as_ref()?.keys_path.clone(),
|
ARG arg_keys_path: (String) = "$BASE/keys", or |c: &Config| c.parity.as_ref()?.keys_path.clone(),
|
||||||
"--keys-path=[PATH]",
|
"--keys-path=[PATH]",
|
||||||
|
@ -32,6 +32,7 @@ pub enum SpecType {
|
|||||||
Foundation,
|
Foundation,
|
||||||
Morden,
|
Morden,
|
||||||
Ropsten,
|
Ropsten,
|
||||||
|
Tobalaba,
|
||||||
Kovan,
|
Kovan,
|
||||||
Olympic,
|
Olympic,
|
||||||
Classic,
|
Classic,
|
||||||
@ -58,6 +59,7 @@ impl str::FromStr for SpecType {
|
|||||||
"morden" | "classic-testnet" => SpecType::Morden,
|
"morden" | "classic-testnet" => SpecType::Morden,
|
||||||
"ropsten" => SpecType::Ropsten,
|
"ropsten" => SpecType::Ropsten,
|
||||||
"kovan" | "testnet" => SpecType::Kovan,
|
"kovan" | "testnet" => SpecType::Kovan,
|
||||||
|
"tobalaba" => SpecType::Tobalaba,
|
||||||
"olympic" => SpecType::Olympic,
|
"olympic" => SpecType::Olympic,
|
||||||
"expanse" => SpecType::Expanse,
|
"expanse" => SpecType::Expanse,
|
||||||
"musicoin" => SpecType::Musicoin,
|
"musicoin" => SpecType::Musicoin,
|
||||||
@ -81,6 +83,7 @@ impl fmt::Display for SpecType {
|
|||||||
SpecType::Musicoin => "musicoin",
|
SpecType::Musicoin => "musicoin",
|
||||||
SpecType::Ellaism => "ellaism",
|
SpecType::Ellaism => "ellaism",
|
||||||
SpecType::Kovan => "kovan",
|
SpecType::Kovan => "kovan",
|
||||||
|
SpecType::Tobalaba => "tobalaba",
|
||||||
SpecType::Dev => "dev",
|
SpecType::Dev => "dev",
|
||||||
SpecType::Custom(ref custom) => custom,
|
SpecType::Custom(ref custom) => custom,
|
||||||
})
|
})
|
||||||
@ -99,6 +102,7 @@ impl SpecType {
|
|||||||
SpecType::Expanse => Ok(ethereum::new_expanse(params)),
|
SpecType::Expanse => Ok(ethereum::new_expanse(params)),
|
||||||
SpecType::Musicoin => Ok(ethereum::new_musicoin(params)),
|
SpecType::Musicoin => Ok(ethereum::new_musicoin(params)),
|
||||||
SpecType::Ellaism => Ok(ethereum::new_ellaism(params)),
|
SpecType::Ellaism => Ok(ethereum::new_ellaism(params)),
|
||||||
|
SpecType::Tobalaba => Ok(ethereum::new_tobalaba(params)),
|
||||||
SpecType::Kovan => Ok(ethereum::new_kovan(params)),
|
SpecType::Kovan => Ok(ethereum::new_kovan(params)),
|
||||||
SpecType::Dev => Ok(Spec::new_instant()),
|
SpecType::Dev => Ok(Spec::new_instant()),
|
||||||
SpecType::Custom(ref filename) => {
|
SpecType::Custom(ref filename) => {
|
||||||
|
@ -22,9 +22,8 @@ echo "Parity version: " $VER
|
|||||||
echo "Branch: " $CI_BUILD_REF_NAME
|
echo "Branch: " $CI_BUILD_REF_NAME
|
||||||
echo "--------------------"
|
echo "--------------------"
|
||||||
|
|
||||||
# NOTE for md5 and sha256 we want to display filename as well
|
# NOTE for sha256 we want to display filename as well
|
||||||
# hence we use --* instead of -p *
|
# hence we use --* instead of -p *
|
||||||
MD5_BIN="rhash --md5"
|
|
||||||
SHA256_BIN="rhash --sha256"
|
SHA256_BIN="rhash --sha256"
|
||||||
|
|
||||||
set_env () {
|
set_env () {
|
||||||
@ -74,20 +73,15 @@ calculate_checksums () {
|
|||||||
echo "Checksum calculation:"
|
echo "Checksum calculation:"
|
||||||
rhash --version
|
rhash --version
|
||||||
|
|
||||||
rm -rf *.md5
|
|
||||||
rm -rf *.sha256
|
rm -rf *.sha256
|
||||||
|
|
||||||
BIN="target/$PLATFORM/release/parity$S3WIN"
|
BIN="target/$PLATFORM/release/parity$S3WIN"
|
||||||
export SHA3="$($BIN tools hash $BIN)"
|
export SHA3="$($BIN tools hash $BIN)"
|
||||||
|
|
||||||
echo "Parity file SHA3: $SHA3"
|
echo "Parity file SHA3: $SHA3"
|
||||||
$MD5_BIN target/$PLATFORM/release/parity$S3WIN > parity$S3WIN.md5
|
|
||||||
$SHA256_BIN target/$PLATFORM/release/parity$S3WIN > parity$S3WIN.sha256
|
$SHA256_BIN target/$PLATFORM/release/parity$S3WIN > parity$S3WIN.sha256
|
||||||
$MD5_BIN target/$PLATFORM/release/parity-evm$S3WIN > parity-evm$S3WIN.md5
|
|
||||||
$SHA256_BIN target/$PLATFORM/release/parity-evm$S3WIN > parity-evm$S3WIN.sha256
|
$SHA256_BIN target/$PLATFORM/release/parity-evm$S3WIN > parity-evm$S3WIN.sha256
|
||||||
$MD5_BIN target/$PLATFORM/release/ethstore$S3WIN > ethstore$S3WIN.md5
|
|
||||||
$SHA256_BIN target/$PLATFORM/release/ethstore$S3WIN > ethstore$S3WIN.sha256
|
$SHA256_BIN target/$PLATFORM/release/ethstore$S3WIN > ethstore$S3WIN.sha256
|
||||||
$MD5_BIN target/$PLATFORM/release/ethkey$S3WIN > ethkey$S3WIN.md5
|
|
||||||
$SHA256_BIN target/$PLATFORM/release/ethkey$S3WIN > ethkey$S3WIN.sha256
|
$SHA256_BIN target/$PLATFORM/release/ethkey$S3WIN > ethkey$S3WIN.sha256
|
||||||
}
|
}
|
||||||
make_deb () {
|
make_deb () {
|
||||||
@ -123,7 +117,6 @@ make_deb () {
|
|||||||
cp target/$PLATFORM/release/ethstore deb/usr/bin/ethstore
|
cp target/$PLATFORM/release/ethstore deb/usr/bin/ethstore
|
||||||
cp target/$PLATFORM/release/ethkey deb/usr/bin/ethkey
|
cp target/$PLATFORM/release/ethkey deb/usr/bin/ethkey
|
||||||
dpkg-deb -b deb "parity_"$VER"_"$IDENT"_"$ARC".deb"
|
dpkg-deb -b deb "parity_"$VER"_"$IDENT"_"$ARC".deb"
|
||||||
$MD5_BIN "parity_"$VER"_"$IDENT"_"$ARC".deb" > "parity_"$VER"_"$IDENT"_"$ARC".deb.md5"
|
|
||||||
$SHA256_BIN "parity_"$VER"_"$IDENT"_"$ARC".deb" > "parity_"$VER"_"$IDENT"_"$ARC".deb.sha256"
|
$SHA256_BIN "parity_"$VER"_"$IDENT"_"$ARC".deb" > "parity_"$VER"_"$IDENT"_"$ARC".deb.sha256"
|
||||||
}
|
}
|
||||||
make_rpm () {
|
make_rpm () {
|
||||||
@ -137,7 +130,6 @@ make_rpm () {
|
|||||||
rm -rf "parity-"$VER"-1."$ARC".rpm" || true
|
rm -rf "parity-"$VER"-1."$ARC".rpm" || true
|
||||||
fpm -s dir -t rpm -n parity -v $VER --epoch 1 --license GPLv3 -d openssl --provides parity --url https://parity.io --vendor "Parity Technologies" -a x86_64 -m "<devops@parity.io>" --description "Ethereum network client by Parity Technologies" -C /install/
|
fpm -s dir -t rpm -n parity -v $VER --epoch 1 --license GPLv3 -d openssl --provides parity --url https://parity.io --vendor "Parity Technologies" -a x86_64 -m "<devops@parity.io>" --description "Ethereum network client by Parity Technologies" -C /install/
|
||||||
cp "parity-"$VER"-1."$ARC".rpm" "parity_"$VER"_"$IDENT"_"$ARC".rpm"
|
cp "parity-"$VER"-1."$ARC".rpm" "parity_"$VER"_"$IDENT"_"$ARC".rpm"
|
||||||
$MD5_BIN "parity_"$VER"_"$IDENT"_"$ARC".rpm" > "parity_"$VER"_"$IDENT"_"$ARC".rpm.md5"
|
|
||||||
$SHA256_BIN "parity_"$VER"_"$IDENT"_"$ARC".rpm" > "parity_"$VER"_"$IDENT"_"$ARC".rpm.sha256"
|
$SHA256_BIN "parity_"$VER"_"$IDENT"_"$ARC".rpm" > "parity_"$VER"_"$IDENT"_"$ARC".rpm.sha256"
|
||||||
}
|
}
|
||||||
make_pkg () {
|
make_pkg () {
|
||||||
@ -152,7 +144,6 @@ make_pkg () {
|
|||||||
packagesbuild -v mac/Parity.pkgproj
|
packagesbuild -v mac/Parity.pkgproj
|
||||||
productsign --sign 'Developer ID Installer: PARITY TECHNOLOGIES LIMITED (P2PX3JU8FT)' target/release/Parity\ Ethereum.pkg target/release/Parity\ Ethereum-signed.pkg
|
productsign --sign 'Developer ID Installer: PARITY TECHNOLOGIES LIMITED (P2PX3JU8FT)' target/release/Parity\ Ethereum.pkg target/release/Parity\ Ethereum-signed.pkg
|
||||||
mv target/release/Parity\ Ethereum-signed.pkg "parity_"$VER"_"$IDENT"_"$ARC".pkg"
|
mv target/release/Parity\ Ethereum-signed.pkg "parity_"$VER"_"$IDENT"_"$ARC".pkg"
|
||||||
$MD5_BIN "parity_"$VER"_"$IDENT"_"$ARC"."$EXT >> "parity_"$VER"_"$IDENT"_"$ARC".pkg.md5"
|
|
||||||
$SHA256_BIN "parity_"$VER"_"$IDENT"_"$ARC"."$EXT >> "parity_"$VER"_"$IDENT"_"$ARC".pkg.sha256"
|
$SHA256_BIN "parity_"$VER"_"$IDENT"_"$ARC"."$EXT >> "parity_"$VER"_"$IDENT"_"$ARC".pkg.sha256"
|
||||||
}
|
}
|
||||||
sign_exe () {
|
sign_exe () {
|
||||||
@ -171,7 +162,6 @@ make_exe () {
|
|||||||
cd ..
|
cd ..
|
||||||
cp nsis/installer.exe "parity_"$VER"_"$IDENT"_"$ARC"."$EXT
|
cp nsis/installer.exe "parity_"$VER"_"$IDENT"_"$ARC"."$EXT
|
||||||
./sign.cmd $keyfile $certpass "parity_"$VER"_"$IDENT"_"$ARC"."$EXT
|
./sign.cmd $keyfile $certpass "parity_"$VER"_"$IDENT"_"$ARC"."$EXT
|
||||||
$MD5_BIN "parity_"$VER"_"$IDENT"_"$ARC"."$EXT -p %h > "parity_"$VER"_"$IDENT"_"$ARC"."$EXT".md5"
|
|
||||||
$SHA256_BIN "parity_"$VER"_"$IDENT"_"$ARC"."$EXT -p %h > "parity_"$VER"_"$IDENT"_"$ARC"."$EXT".sha256"
|
$SHA256_BIN "parity_"$VER"_"$IDENT"_"$ARC"."$EXT -p %h > "parity_"$VER"_"$IDENT"_"$ARC"."$EXT".sha256"
|
||||||
}
|
}
|
||||||
push_binaries () {
|
push_binaries () {
|
||||||
@ -186,26 +176,21 @@ push_binaries () {
|
|||||||
fi
|
fi
|
||||||
aws s3 rm --recursive s3://$S3_BUCKET/$CI_BUILD_REF_NAME/$BUILD_PLATFORM
|
aws s3 rm --recursive s3://$S3_BUCKET/$CI_BUILD_REF_NAME/$BUILD_PLATFORM
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/parity$S3WIN --body target/$PLATFORM/release/parity$S3WIN
|
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/parity$S3WIN --body target/$PLATFORM/release/parity$S3WIN
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/parity$S3WIN.md5 --body parity$S3WIN.md5
|
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/parity$S3WIN.sha256 --body parity$S3WIN.sha256
|
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/parity$S3WIN.sha256 --body parity$S3WIN.sha256
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/parity-evm$S3WIN --body target/$PLATFORM/release/parity-evm$S3WIN
|
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/parity-evm$S3WIN --body target/$PLATFORM/release/parity-evm$S3WIN
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/parity-evm$S3WIN.md5 --body parity-evm$S3WIN.md5
|
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/parity-evm$S3WIN.sha256 --body parity-evm$S3WIN.sha256
|
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/parity-evm$S3WIN.sha256 --body parity-evm$S3WIN.sha256
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/ethstore$S3WIN --body target/$PLATFORM/release/ethstore$S3WIN
|
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/ethstore$S3WIN --body target/$PLATFORM/release/ethstore$S3WIN
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/ethstore$S3WIN.md5 --body ethstore$S3WIN.md5
|
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/ethstore$S3WIN.sha256 --body ethstore$S3WIN.sha256
|
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/ethstore$S3WIN.sha256 --body ethstore$S3WIN.sha256
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/ethkey$S3WIN --body target/$PLATFORM/release/ethkey$S3WIN
|
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/ethkey$S3WIN --body target/$PLATFORM/release/ethkey$S3WIN
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/ethkey$S3WIN.md5 --body ethkey$S3WIN.md5
|
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/ethkey$S3WIN.sha256 --body ethkey$S3WIN.sha256
|
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/ethkey$S3WIN.sha256 --body ethkey$S3WIN.sha256
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/"parity_"$VER"_"$IDENT"_"$ARC"."$EXT --body "parity_"$VER"_"$IDENT"_"$ARC"."$EXT
|
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/"parity_"$VER"_"$IDENT"_"$ARC"."$EXT --body "parity_"$VER"_"$IDENT"_"$ARC"."$EXT
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/"parity_"$VER"_"$IDENT"_"$ARC"."$EXT".md5" --body "parity_"$VER"_"$IDENT"_"$ARC"."$EXT".md5"
|
|
||||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/"parity_"$VER"_"$IDENT"_"$ARC"."$EXT".sha256" --body "parity_"$VER"_"$IDENT"_"$ARC"."$EXT".sha256"
|
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/"parity_"$VER"_"$IDENT"_"$ARC"."$EXT".sha256" --body "parity_"$VER"_"$IDENT"_"$ARC"."$EXT".sha256"
|
||||||
}
|
}
|
||||||
|
|
||||||
make_archive () {
|
make_archive () {
|
||||||
echo "add artifacts to archive"
|
echo "add artifacts to archive"
|
||||||
rm -rf parity.zip
|
rm -rf parity.zip
|
||||||
zip -r parity.zip target/$PLATFORM/release/parity$S3WIN target/$PLATFORM/release/parity-evm$S3WIN target/$PLATFORM/release/ethstore$S3WIN target/$PLATFORM/release/ethkey$S3WIN parity$S3WIN.md5 parity-evm$S3WIN.md5 ethstore$S3WIN.md5 ethkey$S3WIN.md5 parity$S3WIN.sha256 parity-evm$S3WIN.sha256 ethstore$S3WIN.sha256 ethkey$S3WIN.sha256
|
zip -r parity.zip target/$PLATFORM/release/parity$S3WIN target/$PLATFORM/release/parity-evm$S3WIN target/$PLATFORM/release/ethstore$S3WIN target/$PLATFORM/release/ethkey$S3WIN parity$S3WIN.sha256 parity-evm$S3WIN.sha256 ethstore$S3WIN.sha256 ethkey$S3WIN.sha256
|
||||||
}
|
}
|
||||||
|
|
||||||
updater_push_release () {
|
updater_push_release () {
|
||||||
@ -336,11 +321,10 @@ case $BUILD_PLATFORM in
|
|||||||
snapcraft push "parity_"$VER"_amd64.snap"
|
snapcraft push "parity_"$VER"_amd64.snap"
|
||||||
snapcraft status parity
|
snapcraft status parity
|
||||||
snapcraft logout
|
snapcraft logout
|
||||||
$MD5_BIN "parity_"$VER"_amd64.snap" > "parity_"$VER"_amd64.snap.md5"
|
|
||||||
$SHA256_BIN "parity_"$VER"_amd64.snap" > "parity_"$VER"_amd64.snap.sha256"
|
$SHA256_BIN "parity_"$VER"_amd64.snap" > "parity_"$VER"_amd64.snap.sha256"
|
||||||
echo "add artifacts to archive"
|
echo "add artifacts to archive"
|
||||||
rm -rf parity.zip
|
rm -rf parity.zip
|
||||||
zip -r parity.zip "parity_"$VER"_amd64.snap" "parity_"$VER"_amd64.snap.md5" "parity_"$VER"_amd64.snap.sha256"
|
zip -r parity.zip "parity_"$VER"_amd64.snap" "parity_"$VER"_amd64.snap.sha256"
|
||||||
;;
|
;;
|
||||||
x86_64-pc-windows-msvc)
|
x86_64-pc-windows-msvc)
|
||||||
set_env_win
|
set_env_win
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "parity-version"
|
name = "parity-version"
|
||||||
# NOTE: this value is used for Parity version string (via env CARGO_PKG_VERSION)
|
# NOTE: this value is used for Parity version string (via env CARGO_PKG_VERSION)
|
||||||
version = "1.10.8"
|
version = "1.10.9"
|
||||||
authors = ["Parity Technologies <admin@parity.io>"]
|
authors = ["Parity Technologies <admin@parity.io>"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user