aboutsummaryrefslogtreecommitdiff
path: root/src/blockchain_db
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2015-08-11 11:09:09 +0100
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2015-08-11 11:11:17 +0100
commite63b85496790b458ac8b49d9d26c9de75b84859c (patch)
tree1f636f1a59c16163b591a7555c988e10dabd31a7 /src/blockchain_db
parentAdd a is_key_image_spent daemon command and RPC call (diff)
downloadmonero-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/blockchain_db')
-rw-r--r--src/blockchain_db/blockchain_db.cpp32
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