ringdb: use the genesis block as a db name
This will avoid careless forkers polluting the shared database even if they make their own chain. They'll then automatically start using another subdb, and any key-reusing fork of those forks will reuse their subdbs.
This commit is contained in:
parent
b09e5181cc
commit
504428ab4a
|
@ -310,7 +310,9 @@ int main(int argc, char* argv[])
|
||||||
std::unordered_map<crypto::key_image, std::vector<uint64_t>> relative_rings;
|
std::unordered_map<crypto::key_image, std::vector<uint64_t>> relative_rings;
|
||||||
std::unordered_map<output_data, std::unordered_set<crypto::key_image>> outputs;
|
std::unordered_map<output_data, std::unordered_set<crypto::key_image>> outputs;
|
||||||
std::unordered_set<output_data> spent, newly_spent;
|
std::unordered_set<output_data> spent, newly_spent;
|
||||||
tools::ringdb ringdb(output_file_path.string());
|
|
||||||
|
cryptonote::block b = core_storage[0]->get_db().get_block_from_height(0);
|
||||||
|
tools::ringdb ringdb(output_file_path.string(), epee::string_tools::pod_to_hex(get_block_hash(b)));
|
||||||
|
|
||||||
for (size_t n = 0; n < inputs.size(); ++n)
|
for (size_t n = 0; n < inputs.size(); ++n)
|
||||||
{
|
{
|
||||||
|
|
|
@ -175,7 +175,7 @@ enum { BLACKBALL_BLACKBALL, BLACKBALL_UNBLACKBALL, BLACKBALL_QUERY, BLACKBALL_CL
|
||||||
namespace tools
|
namespace tools
|
||||||
{
|
{
|
||||||
|
|
||||||
ringdb::ringdb(std::string filename):
|
ringdb::ringdb(std::string filename, const std::string &genesis):
|
||||||
filename(filename)
|
filename(filename)
|
||||||
{
|
{
|
||||||
MDB_txn *txn;
|
MDB_txn *txn;
|
||||||
|
@ -198,11 +198,11 @@ ringdb::ringdb(std::string filename):
|
||||||
epee::misc_utils::auto_scope_leave_caller txn_dtor = epee::misc_utils::create_scope_leave_handler([&](){if (tx_active) mdb_txn_abort(txn);});
|
epee::misc_utils::auto_scope_leave_caller txn_dtor = epee::misc_utils::create_scope_leave_handler([&](){if (tx_active) mdb_txn_abort(txn);});
|
||||||
tx_active = true;
|
tx_active = true;
|
||||||
|
|
||||||
dbr = mdb_dbi_open(txn, "rings", MDB_CREATE, &dbi_rings);
|
dbr = mdb_dbi_open(txn, ("rings-" + genesis).c_str(), MDB_CREATE, &dbi_rings);
|
||||||
THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to open LMDB dbi: " + std::string(mdb_strerror(dbr)));
|
THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to open LMDB dbi: " + std::string(mdb_strerror(dbr)));
|
||||||
mdb_set_compare(txn, dbi_rings, compare_hash32);
|
mdb_set_compare(txn, dbi_rings, compare_hash32);
|
||||||
|
|
||||||
dbr = mdb_dbi_open(txn, "blackballs", MDB_CREATE | MDB_INTEGERKEY | MDB_DUPSORT | MDB_DUPFIXED, &dbi_blackballs);
|
dbr = mdb_dbi_open(txn, ("blackballs-" + genesis).c_str(), MDB_CREATE | MDB_INTEGERKEY | MDB_DUPSORT | MDB_DUPFIXED, &dbi_blackballs);
|
||||||
THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to open LMDB dbi: " + std::string(mdb_strerror(dbr)));
|
THROW_WALLET_EXCEPTION_IF(dbr, tools::error::wallet_internal_error, "Failed to open LMDB dbi: " + std::string(mdb_strerror(dbr)));
|
||||||
mdb_set_dupsort(txn, dbi_blackballs, compare_hash32);
|
mdb_set_dupsort(txn, dbi_blackballs, compare_hash32);
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace tools
|
||||||
class ringdb
|
class ringdb
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ringdb(std::string filename);
|
ringdb(std::string filename, const std::string &genesis);
|
||||||
~ringdb();
|
~ringdb();
|
||||||
|
|
||||||
bool add_rings(const crypto::chacha_key &chacha_key, const cryptonote::transaction_prefix &tx);
|
bool add_rings(const crypto::chacha_key &chacha_key, const cryptonote::transaction_prefix &tx);
|
||||||
|
|
|
@ -5454,8 +5454,10 @@ void wallet2::set_ring_database(const std::string &filename)
|
||||||
m_ring_database = filename;
|
m_ring_database = filename;
|
||||||
MINFO("ringdb path set to " << filename);
|
MINFO("ringdb path set to " << filename);
|
||||||
m_ringdb.reset();
|
m_ringdb.reset();
|
||||||
|
cryptonote::block b;
|
||||||
|
generate_genesis(b);
|
||||||
if (!m_ring_database.empty())
|
if (!m_ring_database.empty())
|
||||||
m_ringdb.reset(new tools::ringdb(m_ring_database));
|
m_ringdb.reset(new tools::ringdb(m_ring_database, epee::string_tools::pod_to_hex(get_block_hash(b))));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wallet2::add_rings(const crypto::chacha_key &key, const cryptonote::transaction_prefix &tx)
|
bool wallet2::add_rings(const crypto::chacha_key &key, const cryptonote::transaction_prefix &tx)
|
||||||
|
|
Loading…
Reference in New Issue