aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Winget <tewinget@gmail.com>2015-10-07 22:28:43 -0400
committerThomas Winget <tewinget@gmail.com>2016-03-24 03:39:52 -0400
commit8ac329df0294f16efbc48a2785eda165878d3511 (patch)
tree6529e23da88cf72f22a7380af1db9fd02dd66f41 /src
parentMove checkpoint functions into checkpoints class (diff)
downloadmonero-8ac329df0294f16efbc48a2785eda165878d3511.tar.xz
doxygen documentation for difficulty functions
Diffstat (limited to 'src')
-rw-r--r--src/cryptonote_core/difficulty.cpp6
-rw-r--r--src/cryptonote_core/difficulty.h12
2 files changed, 16 insertions, 2 deletions
diff --git a/src/cryptonote_core/difficulty.cpp b/src/cryptonote_core/difficulty.cpp
index 236e84481..54da77392 100644
--- a/src/cryptonote_core/difficulty.cpp
+++ b/src/cryptonote_core/difficulty.cpp
@@ -116,8 +116,8 @@ namespace cryptonote {
return !carry;
}
- difficulty_type next_difficulty(vector<uint64_t> timestamps, vector<difficulty_type> cumulative_difficulties, size_t target_seconds) {
- //cutoff DIFFICULTY_LAG
+ difficulty_type next_difficulty(std::vector<std::uint64_t> timestamps, std::vector<difficulty_type> cumulative_difficulties, size_t target_seconds) {
+
if(timestamps.size() > DIFFICULTY_WINDOW)
{
timestamps.resize(DIFFICULTY_WINDOW);
@@ -151,6 +151,8 @@ namespace cryptonote {
assert(total_work > 0);
uint64_t low, high;
mul(total_work, target_seconds, low, high);
+ // blockchain errors "difficulty overhead" if this function returns zero.
+ // TODO: consider throwing an exception instead
if (high != 0 || low + time_span - 1 < low) {
return 0;
}
diff --git a/src/cryptonote_core/difficulty.h b/src/cryptonote_core/difficulty.h
index d49c2f3b8..910f97035 100644
--- a/src/cryptonote_core/difficulty.h
+++ b/src/cryptonote_core/difficulty.h
@@ -39,6 +39,18 @@ namespace cryptonote
{
typedef std::uint64_t difficulty_type;
+ /**
+ * @brief checks if a hash fits the given difficulty
+ *
+ * The hash passes if (hash * difficulty) < 2^192.
+ * Phrased differently, if (hash * difficulty) fits without overflow into
+ * the least significant 192 bits of the 256 bit multiplication result.
+ *
+ * @param hash the hash to check
+ * @param difficulty the difficulty to check against
+ *
+ * @return true if valid, else false
+ */
bool check_hash(const crypto::hash &hash, difficulty_type difficulty);
difficulty_type next_difficulty(std::vector<std::uint64_t> timestamps, std::vector<difficulty_type> cumulative_difficulties, size_t target_seconds);
}