Fix block validation failure in Windows for Rust tool-chain nightly-2020-06-10
#2035
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Commit df95cee introduced a bug in Windows builds that resulted in certain blocks failing validation tests. The cause
was traced to inconsistent implementation of the
std::f64::powi
function in certain Rust toolchains, wherethe Tari Windows code would give a slightly different floating-point result than Linux. This affected the
missionSchedule::block_reward calculation, which caused block validation for certain block numbers to fail.
The solution was to use crate
num::pow
for the power calculation.(See related Rust issue: Implementation of std::f64::powi function gives inconsistent answers in multiple Rust tool-chains rust-lang/rust#73920)
Changed two other instances where
std::f64::powi
were used.Example,
results in
This closes #2022.
Motivation and Context
When using Rust toolchain
nightly-2020-06-10
all block validation tests should pass, otherwise a base node will not be able to sync to the blockchain.How Has This Been Tested?
Tested in Windows 10 and Linux Ubuntu 18.04.4 LTS .
Types of changes
Checklist:
development
branch.cargo-fmt --all
before pushing.