aboutsummaryrefslogtreecommitdiff
path: root/src/cryptonote_core/checkpoints.cpp
diff options
context:
space:
mode:
authorAntonio Juarez <antonio.maria.juarez@live.com>2014-03-03 22:07:58 +0000
committerAntonio Juarez <antonio.maria.juarez@live.com>2014-03-03 22:07:58 +0000
commit296ae46ed8f8f6e5f986f978febad302e3df231a (patch)
tree1629164454a239308f33c9e12afb22e7f3cd8eeb /src/cryptonote_core/checkpoints.cpp
parentchanged name (diff)
downloadmonero-296ae46ed8f8f6e5f986f978febad302e3df231a.tar.xz
moved all stuff to github
Diffstat (limited to 'src/cryptonote_core/checkpoints.cpp')
-rw-r--r--src/cryptonote_core/checkpoints.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/cryptonote_core/checkpoints.cpp b/src/cryptonote_core/checkpoints.cpp
new file mode 100644
index 000000000..54c2f3a6d
--- /dev/null
+++ b/src/cryptonote_core/checkpoints.cpp
@@ -0,0 +1,48 @@
+// Copyright (c) 2012-2013 The Cryptonote developers
+// Distributed under the MIT/X11 software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include "include_base_utils.h"
+using namespace epee;
+
+#include "checkpoints.h"
+
+namespace cryptonote
+{
+ //---------------------------------------------------------------------------
+ checkpoints::checkpoints()
+ {
+ }
+ //---------------------------------------------------------------------------
+ bool checkpoints::add_checkpoint(uint64_t height, const std::string& hash_str)
+ {
+ crypto::hash h = null_hash;
+ bool r = epee::string_tools::parse_tpod_from_hex_string(hash_str, h);
+ CHECK_AND_ASSERT_MES(r, false, "WRONG HASH IN CHECKPOINTS!!!");
+ CHECK_AND_ASSERT_MES(0 == m_points.count(height), false, "WRONG HASH IN CHECKPOINTS!!!");
+ m_points[height] = h;
+ return true;
+ }
+ //---------------------------------------------------------------------------
+ bool checkpoints::is_in_checkpoint_zone(uint64_t height) const
+ {
+ return !m_points.empty() && (height <= (--m_points.end())->first);
+ }
+ //---------------------------------------------------------------------------
+ bool checkpoints::check_block(uint64_t height, const crypto::hash& h) const
+ {
+ auto it = m_points.find(height);
+ if(it == m_points.end())
+ return true;
+
+ if(it->second == h)
+ {
+ LOG_PRINT_GREEN("CHECKPOINT PASSED FOR HEIGHT " << height << " " << h, LOG_LEVEL_0);
+ return true;
+ }else
+ {
+ LOG_ERROR("CHECKPOINT FAILED FOR HEIGHT " << height << ". EXPECTED HASH: " << it->second << ", FETCHED HASH: " << h);
+ return false;
+ }
+ }
+}