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 /src | |
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.
Diffstat (limited to 'src')
-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 |