diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2015-08-11 11:09:09 +0100 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2015-08-11 11:11:17 +0100 |
commit | e63b85496790b458ac8b49d9d26c9de75b84859c (patch) | |
tree | 1f636f1a59c16163b591a7555c988e10dabd31a7 | |
parent | Add a is_key_image_spent daemon command and RPC call (diff) | |
download | monero-e63b85496790b458ac8b49d9d26c9de75b84859c.tar.xz |
blockchain_db: match tx addition semantics to original code
The original code removed key images from a tx from the blockchain
when an non to-key nor gen input was found in that tx. Additionally,
the remainder of the tx data was added to the blockchain only after
the double spend check passed.
-rw-r--r-- | src/blockchain_db/blockchain_db.cpp | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/blockchain_db/blockchain_db.cpp b/src/blockchain_db/blockchain_db.cpp index 41fee5dc7..9d865d4de 100644 --- a/src/blockchain_db/blockchain_db.cpp +++ b/src/blockchain_db/blockchain_db.cpp @@ -56,6 +56,30 @@ void BlockchainDB::add_transaction(const crypto::hash& blk_hash, const transacti tx_hash = *tx_hash_ptr; } + for (const txin_v& tx_input : tx.vin) + { + if (tx_input.type() == typeid(txin_to_key)) + { + add_spent_key(boost::get<txin_to_key>(tx_input).k_image); + } + else if (tx_input.type() == typeid(txin_gen)) + { + /* nothing to do here */ + } + else + { + LOG_PRINT_L1("Unsupported input type, removing key images and aborting transaction addition"); + for (const txin_v& tx_input : tx.vin) + { + if (tx_input.type() == typeid(txin_to_key)) + { + remove_spent_key(boost::get<txin_to_key>(tx_input).k_image); + } + } + return; + } + } + add_transaction_data(blk_hash, tx, tx_hash); // iterate tx.vout using indices instead of C++11 foreach syntax because @@ -64,14 +88,6 @@ void BlockchainDB::add_transaction(const crypto::hash& blk_hash, const transacti { add_output(tx_hash, tx.vout[i], i, tx.unlock_time); } - - for (const txin_v& tx_input : tx.vin) - { - if (tx_input.type() == typeid(txin_to_key)) - { - add_spent_key(boost::get<txin_to_key>(tx_input).k_image); - } - } } uint64_t BlockchainDB::add_block( const block& blk |