a54dbaee blockchain_blackball: add --force-chain-reaction-pass flag (moneromooo-monero)
44439c32 record blackballs as amount/offset, and add export ability (moneromooo-monero)
4bce935b blockchain_blackball: more optimizations (moneromooo-monero)
b66ba783 blockchain_blackball: do not process duplicate blockchains parts (moneromooo-monero)
639a3c01 blockchain_blackball: make it clear secondary passes are not incremental (moneromooo-monero)
eb8a51be blockchain_blackball: detect spent outputs by partial ring reuse (moneromooo-monero)
d6d276c6 blockchain_blackball: fix chain reaction phase in incremental mode (moneromooo-monero)
2b2a681b blockchain_blackball: avoid false positives for different amounts (moneromooo-monero)
80e4fef3 blockchain_blackball: set transaction looping txn to read only (moneromooo-monero)
4801d6b5 blockchain_blackball: add stats (moneromooo-monero)
846190fd blockchain_blackball: support pre-v2 databases (moneromooo-monero)
daa6cc7d blockchain_blackball: use LMDB for the cache (moneromooo-monero)
50cb370d ringdb: allow blackballing many outputs at once (moneromooo-monero)
@ -382,49 +389,61 @@ bool ringdb::blackball_worker(const crypto::public_key &output, int op)
booltx_active=false;
boolret=true;
dbr=resize_env(env,filename.c_str(),32*2);// a pubkey, and some slack
THROW_WALLET_EXCEPTION_IF(outputs.size()>1&&op==BLACKBALL_QUERY,tools::error::wallet_internal_error,"Blackball query only makes sense for a single output");
dbr=resize_env(env,filename.c_str(),32*2*outputs.size());// a pubkey, and some slack
THROW_WALLET_EXCEPTION_IF(dbr,tools::error::wallet_internal_error,"Failed to set env map size: "+std::string(mdb_strerror(dbr)));
dbr=mdb_txn_begin(env,NULL,0,&txn);
THROW_WALLET_EXCEPTION_IF(dbr,tools::error::wallet_internal_error,"Failed to create LMDB transaction: "+std::string(mdb_strerror(dbr)));
THROW_WALLET_EXCEPTION_IF(dbr&&dbr!=MDB_NOTFOUND,tools::error::wallet_internal_error,"Failed to lookup in blackballs table: "+std::string(mdb_strerror(dbr)));
THROW_WALLET_EXCEPTION_IF(dbr&&dbr!=MDB_NOTFOUND,tools::error::wallet_internal_error,"Failed to lookup in blackballs table: "+std::string(mdb_strerror(dbr)));
THROW_WALLET_EXCEPTION_IF(dbr,tools::error::wallet_internal_error,"Failed to clear blackballs table: "+std::string(mdb_strerror(dbr)));
}
THROW_WALLET_EXCEPTION_IF(dbr,tools::error::wallet_internal_error,"Failed to query blackballs table: "+std::string(mdb_strerror(dbr)));
dbr=mdb_txn_commit(txn);
THROW_WALLET_EXCEPTION_IF(dbr,tools::error::wallet_internal_error,"Failed to commit txn blackballing output to database: "+std::string(mdb_strerror(dbr)));
@ -432,24 +451,32 @@ bool ringdb::blackball_worker(const crypto::public_key &output, int op)