Fixing clippy warnings
This commit is contained in:
parent
5b6e47c56f
commit
2c4700f4c1
@ -24,6 +24,7 @@ pub type LogBloom = H2048;
|
|||||||
/// Constant 2048-bit datum for 0. Often used as a default.
|
/// Constant 2048-bit datum for 0. Often used as a default.
|
||||||
pub static ZERO_LOGBLOOM: LogBloom = H2048([0x00; 256]);
|
pub static ZERO_LOGBLOOM: LogBloom = H2048([0x00; 256]);
|
||||||
|
|
||||||
|
#[allow(enum_variant_names)]
|
||||||
/// Semantic boolean for when a seal/signature is included.
|
/// Semantic boolean for when a seal/signature is included.
|
||||||
pub enum Seal {
|
pub enum Seal {
|
||||||
/// The seal/signature is included.
|
/// The seal/signature is included.
|
||||||
|
@ -87,6 +87,7 @@ struct QueueSignal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl QueueSignal {
|
impl QueueSignal {
|
||||||
|
#[allow(bool_comparison)]
|
||||||
fn set(&self) {
|
fn set(&self) {
|
||||||
if self.signalled.compare_and_swap(false, true, AtomicOrdering::Relaxed) == false {
|
if self.signalled.compare_and_swap(false, true, AtomicOrdering::Relaxed) == false {
|
||||||
self.message_channel.send(UserMessage(SyncMessage::BlockVerified)).expect("Error sending BlockVerified message");
|
self.message_channel.send(UserMessage(SyncMessage::BlockVerified)).expect("Error sending BlockVerified message");
|
||||||
|
@ -212,7 +212,7 @@ impl Memory for Vec<u8> {
|
|||||||
fn write(&mut self, offset: U256, value: U256) {
|
fn write(&mut self, offset: U256, value: U256) {
|
||||||
let off = offset.low_u64() as usize;
|
let off = offset.low_u64() as usize;
|
||||||
let mut val = value;
|
let mut val = value;
|
||||||
|
|
||||||
let end = off + 32;
|
let end = off + 32;
|
||||||
for pos in 0..32 {
|
for pos in 0..32 {
|
||||||
self[end - pos - 1] = val.low_u64() as u8;
|
self[end - pos - 1] = val.low_u64() as u8;
|
||||||
@ -229,7 +229,7 @@ impl Memory for Vec<u8> {
|
|||||||
fn resize(&mut self, new_size: usize) {
|
fn resize(&mut self, new_size: usize) {
|
||||||
self.resize(new_size, 0);
|
self.resize(new_size, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn expand(&mut self, size: usize) {
|
fn expand(&mut self, size: usize) {
|
||||||
if size > self.len() {
|
if size > self.len() {
|
||||||
Memory::resize(self, size)
|
Memory::resize(self, size)
|
||||||
@ -258,6 +258,7 @@ impl<'a> CodeReader<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(enum_variant_names)]
|
||||||
enum InstructionCost {
|
enum InstructionCost {
|
||||||
Gas(U256),
|
Gas(U256),
|
||||||
GasMem(U256, U256),
|
GasMem(U256, U256),
|
||||||
@ -282,7 +283,7 @@ impl evm::Evm for Interpreter {
|
|||||||
let code = ¶ms.code.as_ref().unwrap();
|
let code = ¶ms.code.as_ref().unwrap();
|
||||||
let valid_jump_destinations = self.find_jump_destinations(&code);
|
let valid_jump_destinations = self.find_jump_destinations(&code);
|
||||||
|
|
||||||
let mut current_gas = params.gas.clone();
|
let mut current_gas = params.gas;
|
||||||
let mut stack = VecStack::with_capacity(ext.schedule().stack_limit, U256::zero());
|
let mut stack = VecStack::with_capacity(ext.schedule().stack_limit, U256::zero());
|
||||||
let mut mem = vec![];
|
let mut mem = vec![];
|
||||||
let mut reader = CodeReader {
|
let mut reader = CodeReader {
|
||||||
@ -331,7 +332,7 @@ impl evm::Evm for Interpreter {
|
|||||||
let pos = try!(self.verify_jump(position, &valid_jump_destinations));
|
let pos = try!(self.verify_jump(position, &valid_jump_destinations));
|
||||||
reader.position = pos;
|
reader.position = pos;
|
||||||
},
|
},
|
||||||
InstructionResult::StopExecutionWithGasLeft(gas_left) => {
|
InstructionResult::StopExecutionWithGasLeft(gas_left) => {
|
||||||
current_gas = gas_left;
|
current_gas = gas_left;
|
||||||
reader.position = code.len();
|
reader.position = code.len();
|
||||||
},
|
},
|
||||||
@ -380,10 +381,9 @@ impl Interpreter {
|
|||||||
|
|
||||||
let gas = if self.is_zero(&val) && !self.is_zero(newval) {
|
let gas = if self.is_zero(&val) && !self.is_zero(newval) {
|
||||||
schedule.sstore_set_gas
|
schedule.sstore_set_gas
|
||||||
} else if !self.is_zero(&val) && self.is_zero(newval) {
|
|
||||||
// Refund is added when actually executing sstore
|
|
||||||
schedule.sstore_reset_gas
|
|
||||||
} else {
|
} else {
|
||||||
|
// Refund for below case is added when actually executing sstore
|
||||||
|
// !self.is_zero(&val) && self.is_zero(newval)
|
||||||
schedule.sstore_reset_gas
|
schedule.sstore_reset_gas
|
||||||
};
|
};
|
||||||
InstructionCost::Gas(U256::from(gas))
|
InstructionCost::Gas(U256::from(gas))
|
||||||
@ -406,10 +406,7 @@ impl Interpreter {
|
|||||||
let gas = U256::from(schedule.sha3_gas) + (U256::from(schedule.sha3_word_gas) * words);
|
let gas = U256::from(schedule.sha3_gas) + (U256::from(schedule.sha3_word_gas) * words);
|
||||||
InstructionCost::GasMem(gas, try!(self.mem_needed(stack.peek(0), stack.peek(1))))
|
InstructionCost::GasMem(gas, try!(self.mem_needed(stack.peek(0), stack.peek(1))))
|
||||||
},
|
},
|
||||||
instructions::CALLDATACOPY => {
|
instructions::CALLDATACOPY | instructions::CODECOPY => {
|
||||||
InstructionCost::GasMemCopy(default_gas, try!(self.mem_needed(stack.peek(0), stack.peek(2))), stack.peek(2).clone())
|
|
||||||
},
|
|
||||||
instructions::CODECOPY => {
|
|
||||||
InstructionCost::GasMemCopy(default_gas, try!(self.mem_needed(stack.peek(0), stack.peek(2))), stack.peek(2).clone())
|
InstructionCost::GasMemCopy(default_gas, try!(self.mem_needed(stack.peek(0), stack.peek(2))), stack.peek(2).clone())
|
||||||
},
|
},
|
||||||
instructions::EXTCODECOPY => {
|
instructions::EXTCODECOPY => {
|
||||||
@ -432,7 +429,7 @@ impl Interpreter {
|
|||||||
try!(self.mem_needed(stack.peek(5), stack.peek(6))),
|
try!(self.mem_needed(stack.peek(5), stack.peek(6))),
|
||||||
try!(self.mem_needed(stack.peek(3), stack.peek(4)))
|
try!(self.mem_needed(stack.peek(3), stack.peek(4)))
|
||||||
);
|
);
|
||||||
|
|
||||||
let address = u256_to_address(stack.peek(1));
|
let address = u256_to_address(stack.peek(1));
|
||||||
|
|
||||||
if instruction == instructions::CALL && !ext.exists(&address) {
|
if instruction == instructions::CALL && !ext.exists(&address) {
|
||||||
@ -529,8 +526,8 @@ impl Interpreter {
|
|||||||
params: &ActionParams,
|
params: &ActionParams,
|
||||||
ext: &mut evm::Ext,
|
ext: &mut evm::Ext,
|
||||||
instruction: Instruction,
|
instruction: Instruction,
|
||||||
code: &mut CodeReader,
|
code: &mut CodeReader,
|
||||||
mem: &mut Memory,
|
mem: &mut Memory,
|
||||||
stack: &mut Stack<U256>
|
stack: &mut Stack<U256>
|
||||||
) -> Result<InstructionResult, evm::Error> {
|
) -> Result<InstructionResult, evm::Error> {
|
||||||
match instruction {
|
match instruction {
|
||||||
@ -559,7 +556,7 @@ impl Interpreter {
|
|||||||
|
|
||||||
let contract_code = mem.read_slice(init_off, init_size);
|
let contract_code = mem.read_slice(init_off, init_size);
|
||||||
let can_create = ext.balance(¶ms.address) >= endowment && ext.depth() < ext.schedule().max_depth;
|
let can_create = ext.balance(¶ms.address) >= endowment && ext.depth() < ext.schedule().max_depth;
|
||||||
|
|
||||||
if !can_create {
|
if !can_create {
|
||||||
stack.push(U256::zero());
|
stack.push(U256::zero());
|
||||||
return Ok(InstructionResult::Ok);
|
return Ok(InstructionResult::Ok);
|
||||||
@ -638,7 +635,7 @@ impl Interpreter {
|
|||||||
Ok(InstructionResult::Ok)
|
Ok(InstructionResult::Ok)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
instructions::RETURN => {
|
instructions::RETURN => {
|
||||||
let init_off = stack.pop_back();
|
let init_off = stack.pop_back();
|
||||||
let init_size = stack.pop_back();
|
let init_size = stack.pop_back();
|
||||||
@ -832,20 +829,20 @@ impl Interpreter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify_instructions_requirements(&self,
|
fn verify_instructions_requirements(&self,
|
||||||
info: &instructions::InstructionInfo,
|
info: &instructions::InstructionInfo,
|
||||||
stack_limit: usize,
|
stack_limit: usize,
|
||||||
stack: &Stack<U256>) -> Result<(), evm::Error> {
|
stack: &Stack<U256>) -> Result<(), evm::Error> {
|
||||||
if !stack.has(info.args) {
|
if !stack.has(info.args) {
|
||||||
Err(evm::Error::StackUnderflow {
|
Err(evm::Error::StackUnderflow {
|
||||||
instruction: info.name,
|
instruction: info.name,
|
||||||
wanted: info.args,
|
wanted: info.args,
|
||||||
on_stack: stack.size()
|
on_stack: stack.size()
|
||||||
})
|
})
|
||||||
} else if stack.size() - info.args + info.ret > stack_limit {
|
} else if stack.size() - info.args + info.ret > stack_limit {
|
||||||
Err(evm::Error::OutOfStack {
|
Err(evm::Error::OutOfStack {
|
||||||
instruction: info.name,
|
instruction: info.name,
|
||||||
wanted: info.ret - info.args,
|
wanted: info.ret - info.args,
|
||||||
limit: stack_limit
|
limit: stack_limit
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
@ -919,7 +916,7 @@ impl Interpreter {
|
|||||||
stack.push(if !self.is_zero(&b) {
|
stack.push(if !self.is_zero(&b) {
|
||||||
a.overflowing_div(b).0
|
a.overflowing_div(b).0
|
||||||
} else {
|
} else {
|
||||||
U256::zero()
|
U256::zero()
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
instructions::MOD => {
|
instructions::MOD => {
|
||||||
@ -978,9 +975,9 @@ impl Interpreter {
|
|||||||
let (a, neg_a) = get_and_reset_sign(stack.pop_back());
|
let (a, neg_a) = get_and_reset_sign(stack.pop_back());
|
||||||
let (b, neg_b) = get_and_reset_sign(stack.pop_back());
|
let (b, neg_b) = get_and_reset_sign(stack.pop_back());
|
||||||
|
|
||||||
let is_positive_lt = a < b && (neg_a | neg_b) == false;
|
let is_positive_lt = a < b && !(neg_a | neg_b);
|
||||||
let is_negative_lt = a > b && (neg_a & neg_b) == true;
|
let is_negative_lt = a > b && (neg_a & neg_b);
|
||||||
let has_different_signs = neg_a == true && neg_b == false;
|
let has_different_signs = neg_a && !neg_b;
|
||||||
|
|
||||||
stack.push(self.bool_to_u256(is_positive_lt | is_negative_lt | has_different_signs));
|
stack.push(self.bool_to_u256(is_positive_lt | is_negative_lt | has_different_signs));
|
||||||
},
|
},
|
||||||
@ -993,9 +990,9 @@ impl Interpreter {
|
|||||||
let (a, neg_a) = get_and_reset_sign(stack.pop_back());
|
let (a, neg_a) = get_and_reset_sign(stack.pop_back());
|
||||||
let (b, neg_b) = get_and_reset_sign(stack.pop_back());
|
let (b, neg_b) = get_and_reset_sign(stack.pop_back());
|
||||||
|
|
||||||
let is_positive_gt = a > b && (neg_a | neg_b) == false;
|
let is_positive_gt = a > b && !(neg_a | neg_b);
|
||||||
let is_negative_gt = a < b && (neg_a & neg_b) == true;
|
let is_negative_gt = a < b && (neg_a & neg_b);
|
||||||
let has_different_signs = neg_a == false && neg_b == true;
|
let has_different_signs = !neg_a && neg_b;
|
||||||
|
|
||||||
stack.push(self.bool_to_u256(is_positive_gt | is_negative_gt | has_different_signs));
|
stack.push(self.bool_to_u256(is_positive_gt | is_negative_gt | has_different_signs));
|
||||||
},
|
},
|
||||||
@ -1175,7 +1172,7 @@ mod tests {
|
|||||||
let schedule = evm::Schedule::default();
|
let schedule = evm::Schedule::default();
|
||||||
let current_mem_size = 0;
|
let current_mem_size = 0;
|
||||||
let mem_size = U256::from(5);
|
let mem_size = U256::from(5);
|
||||||
|
|
||||||
// when
|
// when
|
||||||
let (mem_cost, mem_size) = interpreter.mem_gas_cost(&schedule, current_mem_size, &mem_size).unwrap();
|
let (mem_cost, mem_size) = interpreter.mem_gas_cost(&schedule, current_mem_size, &mem_size).unwrap();
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ struct FakeLogEntry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(PartialEq, Eq, Hash, Debug)]
|
#[derive(PartialEq, Eq, Hash, Debug)]
|
||||||
|
#[allow(enum_variant_names)] // Common prefix is C ;)
|
||||||
enum FakeCallType {
|
enum FakeCallType {
|
||||||
CALL, CREATE
|
CALL, CREATE
|
||||||
}
|
}
|
||||||
@ -59,7 +60,7 @@ struct FakeExt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FakeExt {
|
impl FakeExt {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
FakeExt::default()
|
FakeExt::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -104,13 +105,13 @@ impl Ext for FakeExt {
|
|||||||
ContractCreateResult::Failed
|
ContractCreateResult::Failed
|
||||||
}
|
}
|
||||||
|
|
||||||
fn call(&mut self,
|
fn call(&mut self,
|
||||||
gas: &U256,
|
gas: &U256,
|
||||||
sender_address: &Address,
|
sender_address: &Address,
|
||||||
receive_address: &Address,
|
receive_address: &Address,
|
||||||
value: Option<U256>,
|
value: Option<U256>,
|
||||||
data: &[u8],
|
data: &[u8],
|
||||||
code_address: &Address,
|
code_address: &Address,
|
||||||
_output: &mut [u8]) -> MessageCallResult {
|
_output: &mut [u8]) -> MessageCallResult {
|
||||||
|
|
||||||
self.calls.insert(FakeCall {
|
self.calls.insert(FakeCall {
|
||||||
@ -176,7 +177,7 @@ fn test_stack_underflow() {
|
|||||||
let vm : Box<evm::Evm> = Box::new(super::interpreter::Interpreter);
|
let vm : Box<evm::Evm> = Box::new(super::interpreter::Interpreter);
|
||||||
vm.exec(params, &mut ext).unwrap_err()
|
vm.exec(params, &mut ext).unwrap_err()
|
||||||
};
|
};
|
||||||
|
|
||||||
match err {
|
match err {
|
||||||
evm::Error::StackUnderflow {wanted, on_stack, ..} => {
|
evm::Error::StackUnderflow {wanted, on_stack, ..} => {
|
||||||
assert_eq!(wanted, 2);
|
assert_eq!(wanted, 2);
|
||||||
@ -353,7 +354,7 @@ evm_test!{test_log_sender: test_log_sender_jit, test_log_sender_int}
|
|||||||
fn test_log_sender(factory: super::Factory) {
|
fn test_log_sender(factory: super::Factory) {
|
||||||
// 60 ff - push ff
|
// 60 ff - push ff
|
||||||
// 60 00 - push 00
|
// 60 00 - push 00
|
||||||
// 53 - mstore
|
// 53 - mstore
|
||||||
// 33 - sender
|
// 33 - sender
|
||||||
// 60 20 - push 20
|
// 60 20 - push 20
|
||||||
// 60 00 - push 0
|
// 60 00 - push 0
|
||||||
@ -449,7 +450,7 @@ fn test_author(factory: super::Factory) {
|
|||||||
|
|
||||||
evm_test!{test_timestamp: test_timestamp_jit, test_timestamp_int}
|
evm_test!{test_timestamp: test_timestamp_jit, test_timestamp_int}
|
||||||
fn test_timestamp(factory: super::Factory) {
|
fn test_timestamp(factory: super::Factory) {
|
||||||
let timestamp = 0x1234;
|
let timestamp = 0x1234;
|
||||||
let code = "42600055".from_hex().unwrap();
|
let code = "42600055".from_hex().unwrap();
|
||||||
|
|
||||||
let mut params = ActionParams::default();
|
let mut params = ActionParams::default();
|
||||||
@ -469,7 +470,7 @@ fn test_timestamp(factory: super::Factory) {
|
|||||||
|
|
||||||
evm_test!{test_number: test_number_jit, test_number_int}
|
evm_test!{test_number: test_number_jit, test_number_int}
|
||||||
fn test_number(factory: super::Factory) {
|
fn test_number(factory: super::Factory) {
|
||||||
let number = 0x1234;
|
let number = 0x1234;
|
||||||
let code = "43600055".from_hex().unwrap();
|
let code = "43600055".from_hex().unwrap();
|
||||||
|
|
||||||
let mut params = ActionParams::default();
|
let mut params = ActionParams::default();
|
||||||
|
@ -363,7 +363,7 @@ mod tests {
|
|||||||
&Address::new(),
|
&Address::new(),
|
||||||
&Address::new(),
|
&Address::new(),
|
||||||
Some(U256::from_str("0000000000000000000000000000000000000000000000000000000000150000").unwrap()),
|
Some(U256::from_str("0000000000000000000000000000000000000000000000000000000000150000").unwrap()),
|
||||||
&vec![],
|
&[],
|
||||||
&Address::new(),
|
&Address::new(),
|
||||||
&mut output);
|
&mut output);
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,15 @@
|
|||||||
#![feature(cell_extras)]
|
#![feature(cell_extras)]
|
||||||
#![feature(augmented_assignments)]
|
#![feature(augmented_assignments)]
|
||||||
#![feature(plugin)]
|
#![feature(plugin)]
|
||||||
|
// Clippy
|
||||||
#![plugin(clippy)]
|
#![plugin(clippy)]
|
||||||
#![allow(needless_range_loop, match_bool)]
|
// TODO [todr] not really sure
|
||||||
|
#![allow(needless_range_loop)]
|
||||||
|
// Shorter than if-else
|
||||||
|
#![allow(match_bool)]
|
||||||
|
// Keeps consistency (all lines with `.clone()`) and helpful when changing ref to non-ref.
|
||||||
|
#![allow(clone_on_copy)]
|
||||||
|
|
||||||
|
|
||||||
//! Ethcore library
|
//! Ethcore library
|
||||||
//!
|
//!
|
||||||
@ -54,7 +61,7 @@
|
|||||||
//! cd parity
|
//! cd parity
|
||||||
//! cargo build --release
|
//! cargo build --release
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
//! - OSX:
|
//! - OSX:
|
||||||
//!
|
//!
|
||||||
//! ```bash
|
//! ```bash
|
||||||
@ -124,8 +131,8 @@ mod executive;
|
|||||||
mod externalities;
|
mod externalities;
|
||||||
mod verification;
|
mod verification;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[cfg(feature="json-tests")]
|
#[cfg(feature="json-tests")]
|
||||||
mod json_tests;
|
mod json_tests;
|
||||||
|
@ -165,7 +165,7 @@ impl Configuration {
|
|||||||
}
|
}
|
||||||
Some(ref a) => {
|
Some(ref a) => {
|
||||||
public_address = SocketAddr::from_str(a.as_ref()).expect("Invalid listen/public address given with --address");
|
public_address = SocketAddr::from_str(a.as_ref()).expect("Invalid listen/public address given with --address");
|
||||||
listen_address = public_address.clone();
|
listen_address = public_address;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -55,6 +55,7 @@ impl Visitor for BlockNumberVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Into<BlockId> for BlockNumber {
|
impl Into<BlockId> for BlockNumber {
|
||||||
|
#[allow(match_same_arms)]
|
||||||
fn into(self) -> BlockId {
|
fn into(self) -> BlockId {
|
||||||
match self {
|
match self {
|
||||||
BlockNumber::Num(n) => BlockId::Number(n),
|
BlockNumber::Num(n) => BlockId::Number(n),
|
||||||
|
@ -14,17 +14,17 @@
|
|||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
///
|
///
|
||||||
/// BlockChain synchronization strategy.
|
/// BlockChain synchronization strategy.
|
||||||
/// Syncs to peers and keeps up to date.
|
/// Syncs to peers and keeps up to date.
|
||||||
/// This implementation uses ethereum protocol v63
|
/// This implementation uses ethereum protocol v63
|
||||||
///
|
///
|
||||||
/// Syncing strategy.
|
/// Syncing strategy.
|
||||||
///
|
///
|
||||||
/// 1. A peer arrives with a total difficulty better than ours
|
/// 1. A peer arrives with a total difficulty better than ours
|
||||||
/// 2. Find a common best block between our an peer chain.
|
/// 2. Find a common best block between our an peer chain.
|
||||||
/// Start with out best block and request headers from peer backwards until a common block is found
|
/// Start with out best block and request headers from peer backwards until a common block is found
|
||||||
/// 3. Download headers and block bodies from peers in parallel.
|
/// 3. Download headers and block bodies from peers in parallel.
|
||||||
/// As soon as a set of the blocks is fully downloaded at the head of the queue it is fed to the blockchain
|
/// As soon as a set of the blocks is fully downloaded at the head of the queue it is fed to the blockchain
|
||||||
/// 4. Maintain sync by handling NewBlocks/NewHashes messages
|
/// 4. Maintain sync by handling NewBlocks/NewHashes messages
|
||||||
///
|
///
|
||||||
@ -240,6 +240,8 @@ impl ChainSync {
|
|||||||
self.peers.clear();
|
self.peers.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[allow(for_kv_map)] // Because it's not possible to get `values_mut()`
|
||||||
/// Rest sync. Clear all downloaded data but keep the queue
|
/// Rest sync. Clear all downloaded data but keep the queue
|
||||||
fn reset(&mut self) {
|
fn reset(&mut self) {
|
||||||
self.downloading_headers.clear();
|
self.downloading_headers.clear();
|
||||||
@ -1023,7 +1025,7 @@ impl ChainSync {
|
|||||||
GET_NODE_DATA_PACKET => self.return_rlp(io, &rlp,
|
GET_NODE_DATA_PACKET => self.return_rlp(io, &rlp,
|
||||||
ChainSync::return_node_data,
|
ChainSync::return_node_data,
|
||||||
|e| format!("Error sending nodes: {:?}", e)),
|
|e| format!("Error sending nodes: {:?}", e)),
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
debug!(target: "sync", "Unknown packet {}", packet_id);
|
debug!(target: "sync", "Unknown packet {}", packet_id);
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -1061,7 +1063,7 @@ impl ChainSync {
|
|||||||
for block_hash in route.blocks {
|
for block_hash in route.blocks {
|
||||||
let mut hash_rlp = RlpStream::new_list(2);
|
let mut hash_rlp = RlpStream::new_list(2);
|
||||||
let difficulty = chain.block_total_difficulty(BlockId::Hash(block_hash.clone())).expect("Mallformed block without a difficulty on the chain!");
|
let difficulty = chain.block_total_difficulty(BlockId::Hash(block_hash.clone())).expect("Mallformed block without a difficulty on the chain!");
|
||||||
|
|
||||||
hash_rlp.append(&block_hash);
|
hash_rlp.append(&block_hash);
|
||||||
hash_rlp.append(&difficulty);
|
hash_rlp.append(&difficulty);
|
||||||
rlp_stream.append_raw(&hash_rlp.out(), 1);
|
rlp_stream.append_raw(&hash_rlp.out(), 1);
|
||||||
|
@ -16,8 +16,11 @@
|
|||||||
|
|
||||||
#![warn(missing_docs)]
|
#![warn(missing_docs)]
|
||||||
#![feature(plugin)]
|
#![feature(plugin)]
|
||||||
#![plugin(clippy)]
|
|
||||||
#![feature(augmented_assignments)]
|
#![feature(augmented_assignments)]
|
||||||
|
#![plugin(clippy)]
|
||||||
|
// Keeps consistency (all lines with `.clone()`) and helpful when changing ref to non-ref.
|
||||||
|
#![allow(clone_on_copy)]
|
||||||
|
|
||||||
//! Blockchain sync module
|
//! Blockchain sync module
|
||||||
//! Implements ethereum protocol version 63 as specified here:
|
//! Implements ethereum protocol version 63 as specified here:
|
||||||
//! https://github.com/ethereum/wiki/wiki/Ethereum-Wire-Protocol
|
//! https://github.com/ethereum/wiki/wiki/Ethereum-Wire-Protocol
|
||||||
|
@ -170,8 +170,7 @@ impl<K, V> RangeCollection<K, V> for Vec<(K, Vec<V>)> where K: Ord + PartialEq +
|
|||||||
|
|
||||||
// todo: fix warning
|
// todo: fix warning
|
||||||
let lower = match self.binary_search_by(|&(k, _)| k.cmp(&key).reverse()) {
|
let lower = match self.binary_search_by(|&(k, _)| k.cmp(&key).reverse()) {
|
||||||
Ok(index) => index,
|
Ok(index) | Err(index) => index
|
||||||
Err(index) => index,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut to_remove: Option<usize> = None;
|
let mut to_remove: Option<usize> = None;
|
||||||
|
@ -19,9 +19,17 @@
|
|||||||
#![feature(augmented_assignments)]
|
#![feature(augmented_assignments)]
|
||||||
#![feature(associated_consts)]
|
#![feature(associated_consts)]
|
||||||
#![feature(plugin)]
|
#![feature(plugin)]
|
||||||
#![plugin(clippy)]
|
|
||||||
#![allow(needless_range_loop, match_bool)]
|
|
||||||
#![feature(catch_panic)]
|
#![feature(catch_panic)]
|
||||||
|
// Clippy settings
|
||||||
|
#![plugin(clippy)]
|
||||||
|
// TODO [todr] not really sure
|
||||||
|
#![allow(needless_range_loop)]
|
||||||
|
// Shorter than if-else
|
||||||
|
#![allow(match_bool)]
|
||||||
|
// We use that to be more explicit about handled cases
|
||||||
|
#![allow(match_same_arms)]
|
||||||
|
// Keeps consistency (all lines with `.clone()`) and helpful when changing ref to non-ref.
|
||||||
|
#![allow(clone_on_copy)]
|
||||||
|
|
||||||
//! Ethcore-util library
|
//! Ethcore-util library
|
||||||
//!
|
//!
|
||||||
|
@ -104,7 +104,7 @@ impl<F> OnPanicListener for F
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn convert_to_string(t: &Box<Any + Send>) -> Option<String> {
|
fn convert_to_string(t: &Box<Any + Send>) -> Option<String> {
|
||||||
let as_str = t.downcast_ref::<&'static str>().map(|t| t.clone().to_owned());
|
let as_str = t.downcast_ref::<&'static str>().cloned().map(|t| t.to_owned());
|
||||||
let as_string = t.downcast_ref::<String>().cloned();
|
let as_string = t.downcast_ref::<String>().cloned();
|
||||||
|
|
||||||
as_str.or(as_string)
|
as_str.or(as_string)
|
||||||
|
Loading…
Reference in New Issue
Block a user