From d4c2fae2fb85e6064296a2467dc8ac28f431f3ee Mon Sep 17 00:00:00 2001 From: warptangent Date: Thu, 24 Dec 2015 15:01:00 -0800 Subject: [PATCH] BlockchainDB: Remove txs in reverse order Data should be removed in the reverse order it was added. Not doing so breaks assumptions and can cause problems in other DB implementations. This matches the order of tx removal in blockchain_storage::purge_block_data_from_blockchain. --- src/blockchain_db/blockchain_db.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/blockchain_db/blockchain_db.cpp b/src/blockchain_db/blockchain_db.cpp index 32e89e06..4fa8cce2 100644 --- a/src/blockchain_db/blockchain_db.cpp +++ b/src/blockchain_db/blockchain_db.cpp @@ -26,6 +26,8 @@ // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#include + #include "blockchain_db.h" #include "cryptonote_core/cryptonote_format_utils.h" #include "profile_tools.h" @@ -133,13 +135,13 @@ void BlockchainDB::pop_block(block& blk, std::vector& txs) blk = get_top_block(); remove_block(); - - remove_transaction(get_transaction_hash(blk.miner_tx)); - for (const auto& h : blk.tx_hashes) + + for (const auto& h : boost::adaptors::reverse(blk.tx_hashes)) { txs.push_back(get_tx(h)); remove_transaction(h); } + remove_transaction(get_transaction_hash(blk.miner_tx)); } bool BlockchainDB::is_open() const