Skip to content

Instantly share code, notes, and snippets.

@PlasmaPower
Last active July 16, 2018 21:33
Show Gist options
  • Select an option

  • Save PlasmaPower/6b9128e0ca2af21fc06d164d2407d34a to your computer and use it in GitHub Desktop.

Select an option

Save PlasmaPower/6b9128e0ca2af21fc06d164d2407d34a to your computer and use it in GitHub Desktop.
diff --git a/rai/blockstore.cpp b/rai/blockstore.cpp
index 335edfe3..700cc648 100644
--- a/rai/blockstore.cpp
+++ b/rai/blockstore.cpp
@@ -560,7 +560,9 @@ void rai::block_store::upgrade_v11_to_v12 (MDB_txn * transaction_a)
{
std::vector<uint8_t> bytes ((uint8_t *)i->second.data (), (uint8_t *)i->second.data () + i->second.size ());
bytes.push_back (0); // version field
- mdb_cursor_put (i.cursor, i->first, rai::mdb_val (bytes.size (), bytes.data ()), MDB_CURRENT);
+ bytes.push_back (0); // version field
+ auto status (mdb_put (transaction_a, accounts, i->first, rai::mdb_val (bytes.size (), bytes.data ()), 0));
+ assert (status == 0);
}
else
{
@@ -573,7 +575,9 @@ void rai::block_store::upgrade_v11_to_v12 (MDB_txn * transaction_a)
{
std::vector<uint8_t> bytes ((uint8_t *)i->second.data (), (uint8_t *)i->second.data () + i->second.size ());
bytes.push_back (0); // min_version field
- mdb_cursor_put (i.cursor, i->first, rai::mdb_val (bytes.size (), bytes.data ()), MDB_CURRENT);
+ bytes.push_back (0); // min_version field
+ auto status (mdb_put (transaction_a, pending, i->first, rai::mdb_val (bytes.size (), bytes.data ()), 0));
+ assert (status == 0);
}
else
{
@@ -586,7 +590,9 @@ void rai::block_store::upgrade_v11_to_v12 (MDB_txn * transaction_a)
{
std::vector<uint8_t> bytes ((uint8_t *)i->second.data (), (uint8_t *)i->second.data () + i->second.size ());
bytes.insert (bytes.begin () + rai::state_block::size, 0); // version field
- mdb_cursor_put (i.cursor, i->first, rai::mdb_val (bytes.size (), bytes.data ()), MDB_CURRENT);
+ bytes.insert (bytes.begin () + rai::state_block::size, 0);
+ auto status (mdb_put (transaction_a, state_blocks, i->first, rai::mdb_val (bytes.size (), bytes.data ()), 0));
+ assert (status == 0);
}
else
{
@@ -609,7 +615,7 @@ rai::uint128_t rai::block_store::block_balance (MDB_txn * transaction_a, rai::bl
return visitor.balance;
}
-uint8_t rai::block_store::block_version (MDB_txn * transaction_a, rai::block_hash const & hash_a)
+uint16_t rai::block_store::block_version (MDB_txn * transaction_a, rai::block_hash const & hash_a)
{
rai::block_type type;
rai::mdb_val value;
@@ -618,8 +624,8 @@ uint8_t rai::block_store::block_version (MDB_txn * transaction_a, rai::block_has
uint8_t result (0);
if (status == 0)
{
- assert (value.size () > rai::state_block::size);
- result = *(reinterpret_cast<uint8_t const *> (value.data ()) + rai::state_block::size);
+ assert (value.size () >= rai::state_block::size + 2);
+ result = *(reinterpret_cast<uint16_t const *> (reinterpret_cast<uint8_t const *> (value.data ()) + rai::state_block::size));
}
return result;
}
@@ -666,7 +672,7 @@ void rai::block_store::block_put_raw (MDB_txn * transaction_a, MDB_dbi database_
assert (status2 == 0);
}
-void rai::block_store::block_put (MDB_txn * transaction_a, rai::block_hash const & hash_a, rai::block const & block_a, rai::block_hash const & successor_a, uint8_t version_a)
+void rai::block_store::block_put (MDB_txn * transaction_a, rai::block_hash const & hash_a, rai::block const & block_a, rai::block_hash const & successor_a, uint16_t version_a)
{
assert (successor_a.is_zero () || block_exists (transaction_a, successor_a));
if (block_a.type () != rai::block_type::state)
diff --git a/rai/blockstore.hpp b/rai/blockstore.hpp
index ab1025eb..313a8c6d 100644
--- a/rai/blockstore.hpp
+++ b/rai/blockstore.hpp
@@ -38,7 +38,7 @@ public:
MDB_dbi block_database (rai::block_type);
void block_put_raw (MDB_txn *, MDB_dbi, rai::block_hash const &, MDB_val);
- void block_put (MDB_txn *, rai::block_hash const &, rai::block const &, rai::block_hash const & = rai::block_hash (0), uint8_t version = 0);
+ void block_put (MDB_txn *, rai::block_hash const &, rai::block const &, rai::block_hash const & = rai::block_hash (0), uint16_t version = 0);
MDB_val block_get_raw (MDB_txn *, rai::block_hash const &, rai::block_type &);
rai::block_hash block_successor (MDB_txn *, rai::block_hash const &);
void block_successor_clear (MDB_txn *, rai::block_hash const &);
@@ -79,7 +79,7 @@ public:
rai::store_iterator block_info_begin (MDB_txn *);
rai::store_iterator block_info_end ();
rai::uint128_t block_balance (MDB_txn *, rai::block_hash const &);
- uint8_t block_version (MDB_txn *, rai::block_hash const &);
+ uint16_t block_version (MDB_txn *, rai::block_hash const &);
static size_t const block_info_max = 32;
rai::uint128_t representation_get (MDB_txn *, rai::account const &);
diff --git a/rai/common.cpp b/rai/common.cpp
index 891634d4..a0a1d122 100644
--- a/rai/common.cpp
+++ b/rai/common.cpp
@@ -302,7 +302,7 @@ rai::pending_info::pending_info (MDB_val const & val_a)
std::copy (reinterpret_cast<uint8_t const *> (val_a.mv_data), reinterpret_cast<uint8_t const *> (val_a.mv_data) + sizeof (*this), reinterpret_cast<uint8_t *> (this));
}
-rai::pending_info::pending_info (rai::account const & source_a, rai::amount const & amount_a, uint8_t min_version_a) :
+rai::pending_info::pending_info (rai::account const & source_a, rai::amount const & amount_a, uint16_t min_version_a) :
source (source_a),
amount (amount_a),
min_version (min_version_a)
diff --git a/rai/common.hpp b/rai/common.hpp
index 95f80311..68e089b6 100644
--- a/rai/common.hpp
+++ b/rai/common.hpp
@@ -130,7 +130,7 @@ public:
/** Seconds since posix epoch */
uint64_t modified;
uint64_t block_count;
- uint8_t version;
+ uint16_t version;
};
#pragma pack(pop)
@@ -143,14 +143,14 @@ class pending_info
public:
pending_info ();
pending_info (MDB_val const &);
- pending_info (rai::account const &, rai::amount const &, uint8_t);
+ pending_info (rai::account const &, rai::amount const &, uint16_t);
void serialize (rai::stream &) const;
bool deserialize (rai::stream &);
bool operator== (rai::pending_info const &) const;
rai::mdb_val val () const;
rai::account source;
rai::amount amount;
- uint8_t min_version;
+ uint16_t min_version;
};
#pragma pack(pop)
class pending_key
diff --git a/rai/ledger.cpp b/rai/ledger.cpp
index c657923d..c78d1e35 100644
--- a/rai/ledger.cpp
+++ b/rai/ledger.cpp
@@ -207,7 +207,7 @@ void ledger_processor::state_block_impl (rai::state_block const & block_a)
result.code = block_a.hashables.account.is_zero () ? rai::process_result::opened_burn_account : rai::process_result::progress; // Is this for the burn account? (Unambiguous)
if (result.code == rai::process_result::progress)
{
- uint8_t account_version (0);
+ uint16_t account_version (0);
rai::account_info info;
result.amount = block_a.hashables.balance;
auto is_send (false);
@@ -884,7 +884,7 @@ void rai::ledger::checksum_update (MDB_txn * transaction_a, rai::block_hash cons
store.checksum_put (transaction_a, 0, 0, value);
}
-void rai::ledger::change_latest (MDB_txn * transaction_a, rai::account const & account_a, rai::block_hash const & hash_a, rai::block_hash const & rep_block_a, rai::amount const & balance_a, uint64_t block_count_a, bool is_state, uint8_t version_a)
+void rai::ledger::change_latest (MDB_txn * transaction_a, rai::account const & account_a, rai::block_hash const & hash_a, rai::block_hash const & rep_block_a, rai::amount const & balance_a, uint64_t block_count_a, bool is_state, uint16_t version_a)
{
rai::account_info info;
auto exists (!store.account_get (transaction_a, account_a, info));
diff --git a/rai/ledger.hpp b/rai/ledger.hpp
index c549d100..eb7c6041 100644
--- a/rai/ledger.hpp
+++ b/rai/ledger.hpp
@@ -41,7 +41,7 @@ public:
rai::block_hash block_source (MDB_txn *, rai::block const &);
rai::process_return process (MDB_txn *, rai::block const &);
void rollback (MDB_txn *, rai::block_hash const &);
- void change_latest (MDB_txn *, rai::account const &, rai::block_hash const &, rai::account const &, rai::uint128_union const &, uint64_t, bool = false, uint8_t = 0);
+ void change_latest (MDB_txn *, rai::account const &, rai::block_hash const &, rai::account const &, rai::uint128_union const &, uint64_t, bool = false, uint16_t = 0);
void checksum_update (MDB_txn *, rai::block_hash const &);
rai::checksum checksum (MDB_txn *, rai::account const &, rai::account const &);
void dump_account_chain (rai::account const &);
diff --git a/rai/blockstore.cpp b/rai/blockstore.cpp
index 335edfe3..ecb79b68 100644
--- a/rai/blockstore.cpp
+++ b/rai/blockstore.cpp
@@ -560,7 +560,8 @@ void rai::block_store::upgrade_v11_to_v12 (MDB_txn * transaction_a)
{
std::vector<uint8_t> bytes ((uint8_t *)i->second.data (), (uint8_t *)i->second.data () + i->second.size ());
bytes.push_back (0); // version field
- mdb_cursor_put (i.cursor, i->first, rai::mdb_val (bytes.size (), bytes.data ()), MDB_CURRENT);
+ auto status (mdb_put (transaction_a, accounts, i->first, rai::mdb_val (bytes.size (), bytes.data ()), 0));
+ assert (status == 0);
}
else
{
@@ -573,7 +574,8 @@ void rai::block_store::upgrade_v11_to_v12 (MDB_txn * transaction_a)
{
std::vector<uint8_t> bytes ((uint8_t *)i->second.data (), (uint8_t *)i->second.data () + i->second.size ());
bytes.push_back (0); // min_version field
- mdb_cursor_put (i.cursor, i->first, rai::mdb_val (bytes.size (), bytes.data ()), MDB_CURRENT);
+ auto status (mdb_put (transaction_a, pending, i->first, rai::mdb_val (bytes.size (), bytes.data ()), 0));
+ assert (status == 0);
}
else
{
@@ -586,7 +588,9 @@ void rai::block_store::upgrade_v11_to_v12 (MDB_txn * transaction_a)
{
std::vector<uint8_t> bytes ((uint8_t *)i->second.data (), (uint8_t *)i->second.data () + i->second.size ());
bytes.insert (bytes.begin () + rai::state_block::size, 0); // version field
- mdb_cursor_put (i.cursor, i->first, rai::mdb_val (bytes.size (), bytes.data ()), MDB_CURRENT);
+ bytes.insert (bytes.begin () + rai::state_block::size, 0);
+ auto status (mdb_put (transaction_a, state_blocks, i->first, rai::mdb_val (bytes.size (), bytes.data ()), 0));
+ assert (status == 0);
}
else
{
@@ -609,7 +613,7 @@ rai::uint128_t rai::block_store::block_balance (MDB_txn * transaction_a, rai::bl
return visitor.balance;
}
-uint8_t rai::block_store::block_version (MDB_txn * transaction_a, rai::block_hash const & hash_a)
+uint16_t rai::block_store::block_version (MDB_txn * transaction_a, rai::block_hash const & hash_a)
{
rai::block_type type;
rai::mdb_val value;
@@ -618,8 +622,8 @@ uint8_t rai::block_store::block_version (MDB_txn * transaction_a, rai::block_has
uint8_t result (0);
if (status == 0)
{
- assert (value.size () > rai::state_block::size);
- result = *(reinterpret_cast<uint8_t const *> (value.data ()) + rai::state_block::size);
+ assert (value.size () >= rai::state_block::size + 2);
+ result = *(reinterpret_cast<uint16_t const *> (reinterpret_cast<uint8_t const *> (value.data ()) + rai::state_block::size));
}
return result;
}
@@ -666,7 +670,7 @@ void rai::block_store::block_put_raw (MDB_txn * transaction_a, MDB_dbi database_
assert (status2 == 0);
}
-void rai::block_store::block_put (MDB_txn * transaction_a, rai::block_hash const & hash_a, rai::block const & block_a, rai::block_hash const & successor_a, uint8_t version_a)
+void rai::block_store::block_put (MDB_txn * transaction_a, rai::block_hash const & hash_a, rai::block const & block_a, rai::block_hash const & successor_a, uint16_t version_a)
{
assert (successor_a.is_zero () || block_exists (transaction_a, successor_a));
if (block_a.type () != rai::block_type::state)
diff --git a/rai/blockstore.hpp b/rai/blockstore.hpp
index ab1025eb..313a8c6d 100644
--- a/rai/blockstore.hpp
+++ b/rai/blockstore.hpp
@@ -38,7 +38,7 @@ public:
MDB_dbi block_database (rai::block_type);
void block_put_raw (MDB_txn *, MDB_dbi, rai::block_hash const &, MDB_val);
- void block_put (MDB_txn *, rai::block_hash const &, rai::block const &, rai::block_hash const & = rai::block_hash (0), uint8_t version = 0);
+ void block_put (MDB_txn *, rai::block_hash const &, rai::block const &, rai::block_hash const & = rai::block_hash (0), uint16_t version = 0);
MDB_val block_get_raw (MDB_txn *, rai::block_hash const &, rai::block_type &);
rai::block_hash block_successor (MDB_txn *, rai::block_hash const &);
void block_successor_clear (MDB_txn *, rai::block_hash const &);
@@ -79,7 +79,7 @@ public:
rai::store_iterator block_info_begin (MDB_txn *);
rai::store_iterator block_info_end ();
rai::uint128_t block_balance (MDB_txn *, rai::block_hash const &);
- uint8_t block_version (MDB_txn *, rai::block_hash const &);
+ uint16_t block_version (MDB_txn *, rai::block_hash const &);
static size_t const block_info_max = 32;
rai::uint128_t representation_get (MDB_txn *, rai::account const &);
diff --git a/rai/common.cpp b/rai/common.cpp
index 891634d4..a0a1d122 100644
--- a/rai/common.cpp
+++ b/rai/common.cpp
@@ -302,7 +302,7 @@ rai::pending_info::pending_info (MDB_val const & val_a)
std::copy (reinterpret_cast<uint8_t const *> (val_a.mv_data), reinterpret_cast<uint8_t const *> (val_a.mv_data) + sizeof (*this), reinterpret_cast<uint8_t *> (this));
}
-rai::pending_info::pending_info (rai::account const & source_a, rai::amount const & amount_a, uint8_t min_version_a) :
+rai::pending_info::pending_info (rai::account const & source_a, rai::amount const & amount_a, uint16_t min_version_a) :
source (source_a),
amount (amount_a),
min_version (min_version_a)
diff --git a/rai/common.hpp b/rai/common.hpp
index 95f80311..68e089b6 100644
--- a/rai/common.hpp
+++ b/rai/common.hpp
@@ -130,7 +130,7 @@ public:
/** Seconds since posix epoch */
uint64_t modified;
uint64_t block_count;
- uint8_t version;
+ uint16_t version;
};
#pragma pack(pop)
@@ -143,14 +143,14 @@ class pending_info
public:
pending_info ();
pending_info (MDB_val const &);
- pending_info (rai::account const &, rai::amount const &, uint8_t);
+ pending_info (rai::account const &, rai::amount const &, uint16_t);
void serialize (rai::stream &) const;
bool deserialize (rai::stream &);
bool operator== (rai::pending_info const &) const;
rai::mdb_val val () const;
rai::account source;
rai::amount amount;
- uint8_t min_version;
+ uint16_t min_version;
};
#pragma pack(pop)
class pending_key
diff --git a/rai/ledger.cpp b/rai/ledger.cpp
index c657923d..c78d1e35 100644
--- a/rai/ledger.cpp
+++ b/rai/ledger.cpp
@@ -207,7 +207,7 @@ void ledger_processor::state_block_impl (rai::state_block const & block_a)
result.code = block_a.hashables.account.is_zero () ? rai::process_result::opened_burn_account : rai::process_result::progress; // Is this for the burn account? (Unambiguous)
if (result.code == rai::process_result::progress)
{
- uint8_t account_version (0);
+ uint16_t account_version (0);
rai::account_info info;
result.amount = block_a.hashables.balance;
auto is_send (false);
@@ -884,7 +884,7 @@ void rai::ledger::checksum_update (MDB_txn * transaction_a, rai::block_hash cons
store.checksum_put (transaction_a, 0, 0, value);
}
-void rai::ledger::change_latest (MDB_txn * transaction_a, rai::account const & account_a, rai::block_hash const & hash_a, rai::block_hash const & rep_block_a, rai::amount const & balance_a, uint64_t block_count_a, bool is_state, uint8_t version_a)
+void rai::ledger::change_latest (MDB_txn * transaction_a, rai::account const & account_a, rai::block_hash const & hash_a, rai::block_hash const & rep_block_a, rai::amount const & balance_a, uint64_t block_count_a, bool is_state, uint16_t version_a)
{
rai::account_info info;
auto exists (!store.account_get (transaction_a, account_a, info));
diff --git a/rai/ledger.hpp b/rai/ledger.hpp
index c549d100..eb7c6041 100644
--- a/rai/ledger.hpp
+++ b/rai/ledger.hpp
@@ -41,7 +41,7 @@ public:
rai::block_hash block_source (MDB_txn *, rai::block const &);
rai::process_return process (MDB_txn *, rai::block const &);
void rollback (MDB_txn *, rai::block_hash const &);
- void change_latest (MDB_txn *, rai::account const &, rai::block_hash const &, rai::account const &, rai::uint128_union const &, uint64_t, bool = false, uint8_t = 0);
+ void change_latest (MDB_txn *, rai::account const &, rai::block_hash const &, rai::account const &, rai::uint128_union const &, uint64_t, bool = false, uint16_t = 0);
void checksum_update (MDB_txn *, rai::block_hash const &);
rai::checksum checksum (MDB_txn *, rai::account const &, rai::account const &);
void dump_account_chain (rai::account const &);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment