diff --git a/core/src/core/block.rs b/core/src/core/block.rs index 7d773a601..c6b63fe52 100644 --- a/core/src/core/block.rs +++ b/core/src/core/block.rs @@ -145,13 +145,18 @@ impl ProofOfWork { }; let nonce = reader.read_u64()?; let proof = Proof::read(reader)?; - Ok(ProofOfWork { total_difficulty, scaling_difficulty, nonce, proof}) + Ok(ProofOfWork { + total_difficulty, + scaling_difficulty, + nonce, + proof, + }) } /// Write implementation, can't define as trait impl as we need a version fn write(&self, ver: u16, writer: &mut W) -> Result<(), ser::Error> { if writer.serialization_mode() != ser::SerializationMode::Hash { - self.write_pre_pow(ver, writer)?; + self.write_pre_pow(ver, true, writer)?; } self.proof.write(writer)?; @@ -159,7 +164,12 @@ impl ProofOfWork { } /// Write the pre-hash portion of the header - pub fn write_pre_pow(&self, ver: u16, writer: &mut W) -> Result<(), ser::Error> { + pub fn write_pre_pow( + &self, + ver: u16, + include_nonce: bool, + writer: &mut W, + ) -> Result<(), ser::Error> { if ver > 1 { ser_multiwrite!( writer, @@ -167,7 +177,9 @@ impl ProofOfWork { [write_u64, self.scaling_difficulty] ); } - writer.write_u64(self.nonce)?; + if include_nonce { + writer.write_u64(self.nonce)?; + } Ok(()) } @@ -356,7 +368,9 @@ impl BlockHeader { pub fn pre_pow_hash(&self) -> Hash { let mut hasher = HashWriter::default(); self.write_pre_pow(&mut hasher).unwrap(); - self.pow.write_pre_pow(self.version, &mut hasher).unwrap(); + self.pow + .write_pre_pow(self.version, true, &mut hasher) + .unwrap(); let mut ret = [0; 32]; hasher.finalize(&mut ret); Hash(ret) diff --git a/servers/src/mining/stratumserver.rs b/servers/src/mining/stratumserver.rs index fbb850942..66fc1c182 100644 --- a/servers/src/mining/stratumserver.rs +++ b/servers/src/mining/stratumserver.rs @@ -34,7 +34,7 @@ use core::{global, pow, ser}; use keychain; use mining::mine_block; use pool; -use util::{LOGGER, self}; +use util::{self, LOGGER}; // ---------------------------------------- // http://www.jsonrpc.org/specification @@ -270,6 +270,9 @@ impl StratumServer { { let mut writer = ser::BinWriter::new(&mut header_buf); bh.write_pre_pow(&mut writer).unwrap(); + bh.pow + .write_pre_pow(bh.version, false, &mut writer) + .unwrap(); } let pre_pow = util::to_hex(header_buf); let job_template = JobTemplate {