mirror of
https://git.wownero.com/wownero/onion-wownero-blockchain-explorer.git
synced 2024-08-15 00:33:12 +00:00
mylmdb.h updated
This commit is contained in:
parent
d6c2e8fc49
commit
d4871afa91
1 changed files with 47 additions and 14 deletions
59
src/mylmdb.h
59
src/mylmdb.h
|
@ -26,13 +26,23 @@ namespace xmreg
|
||||||
*/
|
*/
|
||||||
struct output_info
|
struct output_info
|
||||||
{
|
{
|
||||||
|
crypto::public_key out_pub_key;
|
||||||
crypto::hash tx_hash;
|
crypto::hash tx_hash;
|
||||||
crypto::public_key tx_pub_key;
|
crypto::public_key tx_pub_key;
|
||||||
uint64_t amount;
|
uint64_t amount;
|
||||||
uint64_t index_in_tx;
|
uint64_t index_in_tx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& os, const output_info& out_info)
|
||||||
|
{
|
||||||
|
os << ", out_pub_key: " << out_info.out_pub_key
|
||||||
|
<< ", tx_hash: " << out_info.tx_hash
|
||||||
|
<< ", tx_pub_key: " << out_info.tx_pub_key
|
||||||
|
<< ", amount: " << XMR_AMOUNT(out_info.amount)
|
||||||
|
<< ", index_in_tx: " << out_info.index_in_tx;
|
||||||
|
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
class MyLMDB
|
class MyLMDB
|
||||||
{
|
{
|
||||||
|
@ -131,7 +141,7 @@ namespace xmreg
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
write_output_public_keys(const transaction& tx)
|
write_output_public_keys(const transaction& tx, const block& blk)
|
||||||
{
|
{
|
||||||
crypto::hash tx_hash = get_transaction_hash(tx);
|
crypto::hash tx_hash = get_transaction_hash(tx);
|
||||||
|
|
||||||
|
@ -154,7 +164,8 @@ namespace xmreg
|
||||||
wtxn = lmdb::txn::begin(m_env);
|
wtxn = lmdb::txn::begin(m_env);
|
||||||
wdbi1 = lmdb::dbi::open(wtxn, "output_public_keys", flags);
|
wdbi1 = lmdb::dbi::open(wtxn, "output_public_keys", flags);
|
||||||
wdbi2 = lmdb::dbi::open(wtxn, "output_amounts", flags);
|
wdbi2 = lmdb::dbi::open(wtxn, "output_amounts", flags);
|
||||||
wdbi3 = lmdb::dbi::open(wtxn, "output_info", flags);
|
wdbi3 = lmdb::dbi::open(wtxn, "output_info",
|
||||||
|
flags | MDB_INTEGERKEY | MDB_INTEGERDUP);
|
||||||
}
|
}
|
||||||
catch (lmdb::error& e )
|
catch (lmdb::error& e )
|
||||||
{
|
{
|
||||||
|
@ -164,7 +175,10 @@ namespace xmreg
|
||||||
|
|
||||||
for (auto& output: outputs)
|
for (auto& output: outputs)
|
||||||
{
|
{
|
||||||
string public_key_str = pod_to_hex(std::get<0>(output).key);
|
|
||||||
|
public_key out_pub_key = std::get<0>(output).key;
|
||||||
|
|
||||||
|
string public_key_str = pod_to_hex(out_pub_key);
|
||||||
|
|
||||||
lmdb::val public_key_val {public_key_str};
|
lmdb::val public_key_val {public_key_str};
|
||||||
lmdb::val tx_hash_val {tx_hash_str};
|
lmdb::val tx_hash_val {tx_hash_str};
|
||||||
|
@ -175,15 +189,18 @@ namespace xmreg
|
||||||
|
|
||||||
uint64_t index_in_tx = std::get<2>(output);
|
uint64_t index_in_tx = std::get<2>(output);
|
||||||
|
|
||||||
|
output_info out_info {out_pub_key, tx_hash, tx_pub_key, amount, index_in_tx};
|
||||||
|
|
||||||
output_info out_info {tx_hash, tx_pub_key, amount, index_in_tx};
|
uint64_t out_timestamp = blk.timestamp;
|
||||||
|
|
||||||
|
lmdb::val out_timestamp_val {static_cast<void*>(&out_timestamp),
|
||||||
lmdb::val out_info_val {static_cast<void*>(&out_info), sizeof(out_info)};
|
sizeof(out_timestamp)};
|
||||||
|
lmdb::val out_info_val {static_cast<void*>(&out_info),
|
||||||
|
sizeof(out_info)};
|
||||||
|
|
||||||
wdbi1.put(wtxn, public_key_val, tx_hash_val);
|
wdbi1.put(wtxn, public_key_val, tx_hash_val);
|
||||||
wdbi2.put(wtxn, public_key_val, amount_val);
|
wdbi2.put(wtxn, public_key_val, amount_val);
|
||||||
wdbi3.put(wtxn, public_key_val, out_info_val);
|
wdbi3.put(wtxn, out_timestamp_val, out_info_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -411,8 +428,8 @@ namespace xmreg
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
get_output_info(const string& key,
|
get_output_info(uint64_t key_timestamp,
|
||||||
output_info& out_info,
|
vector<output_info>& out_infos,
|
||||||
const string& db_name = "output_info")
|
const string& db_name = "output_info")
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -424,16 +441,32 @@ namespace xmreg
|
||||||
lmdb::txn rtxn = lmdb::txn::begin(m_env, nullptr, MDB_RDONLY);
|
lmdb::txn rtxn = lmdb::txn::begin(m_env, nullptr, MDB_RDONLY);
|
||||||
lmdb::dbi rdbi = lmdb::dbi::open(rtxn, db_name.c_str(), flags);
|
lmdb::dbi rdbi = lmdb::dbi::open(rtxn, db_name.c_str(), flags);
|
||||||
|
|
||||||
lmdb::val key_to_find{key};
|
lmdb::val key_to_find{static_cast<void*>(&key_timestamp),
|
||||||
|
sizeof(key_timestamp)};
|
||||||
lmdb::val info_val;
|
lmdb::val info_val;
|
||||||
|
|
||||||
if(!rdbi.get(rtxn, key_to_find, info_val))
|
|
||||||
|
|
||||||
|
lmdb::cursor cr = lmdb::cursor::open(rtxn, rdbi);
|
||||||
|
|
||||||
|
|
||||||
|
// set cursor the the first item
|
||||||
|
if (cr.get(key_to_find, info_val, MDB_SET))
|
||||||
|
{
|
||||||
|
out_infos.push_back(*(info_val.data<output_info>()));
|
||||||
|
|
||||||
|
// process other values for the same key
|
||||||
|
while (cr.get(key_to_find, info_val, MDB_NEXT_DUP))
|
||||||
|
{
|
||||||
|
//cout << key_val_to_str(key_to_find, tx_hash_val) << endl;
|
||||||
|
out_infos.push_back(*(info_val.data<output_info>()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
out_info = *(info_val.data<output_info>());
|
|
||||||
|
|
||||||
rtxn.abort();
|
rtxn.abort();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue