mirror of
https://github.com/SChernykh/p2pool.git
synced 2025-01-09 12:19:26 +00:00
Clear crypto derivation/key cache when a block is found
This commit is contained in:
parent
4fce76576f
commit
4bcaa41c8e
4 changed files with 18 additions and 2 deletions
|
@ -227,6 +227,14 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clear()
|
||||||
|
{
|
||||||
|
MutexLock lock(m);
|
||||||
|
|
||||||
|
derivations.clear();
|
||||||
|
public_keys.clear();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uv_mutex_t m;
|
uv_mutex_t m;
|
||||||
std::unordered_map<std::array<uint8_t, HASH_SIZE * 2>, hash> derivations;
|
std::unordered_map<std::array<uint8_t, HASH_SIZE * 2>, hash> derivations;
|
||||||
|
@ -245,4 +253,9 @@ bool derive_public_key(const hash& derivation, size_t output_index, const hash&
|
||||||
return cache.get_public_key(derivation, output_index, base, derived_key);
|
return cache.get_public_key(derivation, output_index, base, derived_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clear_crypto_cache()
|
||||||
|
{
|
||||||
|
cache.clear();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace p2pool
|
} // namespace p2pool
|
||||||
|
|
|
@ -23,5 +23,6 @@ void generate_keys(hash& pub, hash& sec);
|
||||||
bool check_keys(const hash& pub, const hash& sec);
|
bool check_keys(const hash& pub, const hash& sec);
|
||||||
bool generate_key_derivation(const hash& key1, const hash& key2, hash& derivation);
|
bool generate_key_derivation(const hash& key1, const hash& key2, hash& derivation);
|
||||||
bool derive_public_key(const hash& derivation, size_t output_index, const hash& base, hash& derived_key);
|
bool derive_public_key(const hash& derivation, size_t output_index, const hash& base, hash& derived_key);
|
||||||
|
void clear_crypto_cache();
|
||||||
|
|
||||||
} // namespace p2pool
|
} // namespace p2pool
|
||||||
|
|
|
@ -1055,6 +1055,8 @@ void p2pool::api_update_stats_mod()
|
||||||
|
|
||||||
void p2pool::api_update_block_found(const ChainMain* data)
|
void p2pool::api_update_block_found(const ChainMain* data)
|
||||||
{
|
{
|
||||||
|
clear_crypto_cache();
|
||||||
|
|
||||||
if (!m_api) {
|
if (!m_api) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,7 @@ namespace std {
|
||||||
template<>
|
template<>
|
||||||
struct hash<p2pool::hash>
|
struct hash<p2pool::hash>
|
||||||
{
|
{
|
||||||
FORCEINLINE size_t operator()(const p2pool::hash& value) const
|
FORCEINLINE size_t operator()(const p2pool::hash& value) const noexcept
|
||||||
{
|
{
|
||||||
uint64_t result = 0xcbf29ce484222325ull;
|
uint64_t result = 0xcbf29ce484222325ull;
|
||||||
for (size_t i = 0; i < p2pool::HASH_SIZE; ++i) {
|
for (size_t i = 0; i < p2pool::HASH_SIZE; ++i) {
|
||||||
|
@ -139,7 +139,7 @@ struct hash<p2pool::hash>
|
||||||
template<size_t N>
|
template<size_t N>
|
||||||
struct hash<std::array<uint8_t, N>>
|
struct hash<std::array<uint8_t, N>>
|
||||||
{
|
{
|
||||||
FORCEINLINE size_t operator()(const std::array<uint8_t, N>& value) const
|
FORCEINLINE size_t operator()(const std::array<uint8_t, N>& value) const noexcept
|
||||||
{
|
{
|
||||||
uint64_t result = 0xcbf29ce484222325ull;
|
uint64_t result = 0xcbf29ce484222325ull;
|
||||||
for (size_t i = 0; i < N; ++i) {
|
for (size_t i = 0; i < N; ++i) {
|
||||||
|
|
Loading…
Reference in a new issue