Skip to content

Commit

Permalink
Log DVM hashes pre and post consolidation
Browse files Browse the repository at this point in the history
  • Loading branch information
Bushstar committed Nov 4, 2024
1 parent da85392 commit 639bb43
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 46 deletions.
48 changes: 48 additions & 0 deletions src/dfi/masternodes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1435,3 +1435,51 @@ void CalcMissingRewardTempFix(CCustomCSView &mnview, const uint32_t targetHeight
}
}
}

std::pair<std::string, std::string> GetDVMDBHashes(CCustomCSView &view) {
auto db = view.GetStorage().GetStorageLevelDB()->GetDB();

// Create a CDBIterator
auto pcursor = db->NewIterator(leveldb::ReadOptions());

// Create SHA256 hashers
CSHA256 hasher;
CSHA256 hasherNoUndo;

// Seek to the beginning of the database
pcursor->SeekToFirst();

// Iterate over all key-value pairs
while (pcursor->Valid()) {
// Get the key and value slices
auto keySlice = pcursor->GetKey();
auto valueSlice = pcursor->GetValue();

const auto key = std::string(keySlice.data(), keySlice.size());
if (!key.empty() && key[0] != 'u') {
hasherNoUndo.Write((const unsigned char *)keySlice.data(), keySlice.size());
hasherNoUndo.Write((const unsigned char *)valueSlice.data(), valueSlice.size());
}

hasher.Write((const unsigned char *)keySlice.data(), keySlice.size());
hasher.Write((const unsigned char *)valueSlice.data(), valueSlice.size());

// Move to the next key-value pair
pcursor->Next();
}

// Delete iterator
delete pcursor;

// Finalize the hashes
unsigned char hash[CSHA256::OUTPUT_SIZE];
unsigned char hashNoUndo[CSHA256::OUTPUT_SIZE];
hasher.Finalize(hash);
hasher.Finalize(hashNoUndo);

// Convert hashes to hex string
const auto hashHex = HexStr(hash, hash + CSHA256::OUTPUT_SIZE);
const auto hashHexNoUndo = HexStr(hashNoUndo, hashNoUndo + CSHA256::OUTPUT_SIZE);

return {hashHex, hashHexNoUndo};
}
2 changes: 2 additions & 0 deletions src/dfi/masternodes.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ CAmount GetProposalCreationFee(int height, const CCustomCSView &view, const CCre
// Missing call fixed in: https://github.com/DeFiCh/ain/pull/1766
void CalcMissingRewardTempFix(CCustomCSView &mnview, const uint32_t targetHeight, const CWallet &wallet);

std::pair<std::string, std::string> GetDVMDBHashes(CCustomCSView &view);

enum class UpdateMasternodeType : uint8_t {
None = 0x00,
OwnerAddress = 0x01,
Expand Down
47 changes: 1 addition & 46 deletions src/dfi/rpc_accounts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3694,52 +3694,7 @@ UniValue logdbhashes(const JSONRPCRequest &request) {
pcustomcsview->Flush();
pcustomcsDB->Flush();

// Get the CDBWrapper instance from CCustomCSView
auto db = pcustomcsview->GetStorage().GetStorageLevelDB()->GetDB();

// Create a CDBIterator
auto pcursor = db->NewIterator(leveldb::ReadOptions());

// Create SHA256 hashers
CSHA256 hasher;
CSHA256 hasherNoUndo;

// Seek to the beginning of the database
pcursor->SeekToFirst();

// Iterate over all key-value pairs
while (pcursor->Valid()) {
// Get the key and value slices
auto keySlice = pcursor->GetKey();
auto valueSlice = pcursor->GetValue();

const auto key = std::string(keySlice.data(), keySlice.size());
if (!key.empty() && key[0] == 'u') {
hasher.Write((const unsigned char *)keySlice.data(), keySlice.size());
hasher.Write((const unsigned char *)valueSlice.data(), valueSlice.size());
} else {
hasher.Write((const unsigned char *)keySlice.data(), keySlice.size());
hasher.Write((const unsigned char *)valueSlice.data(), valueSlice.size());
hasherNoUndo.Write((const unsigned char *)keySlice.data(), keySlice.size());
hasherNoUndo.Write((const unsigned char *)valueSlice.data(), valueSlice.size());
}

// Move to the next key-value pair
pcursor->Next();
}

// Delete iterator
delete pcursor;

// Finalize the hashes
unsigned char hash[CSHA256::OUTPUT_SIZE];
unsigned char hashNoUndo[CSHA256::OUTPUT_SIZE];
hasher.Finalize(hash);
hasher.Finalize(hashNoUndo);

// Convert hashes to hex string
const auto hashHex = HexStr(hash, hash + CSHA256::OUTPUT_SIZE);
const auto hashHexNoUndo = HexStr(hashNoUndo, hashNoUndo + CSHA256::OUTPUT_SIZE);
auto [hashHex, hashHexNoUndo] = GetDVMDBHashes(*pcustomcsview);

// Get the current block height
const auto height = ::ChainActive().Height();
Expand Down
10 changes: 10 additions & 0 deletions src/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2268,6 +2268,11 @@ bool AppInitMain(InitInterfaces& interfaces)
}
}

{
auto [hashHex, hashHexNoUndo] = GetDVMDBHashes(*pcustomcsview);
LogPrintf("Pre-consolidate rewards for DVM hash: %s hash-no-undo: %s\n", hashHex, hashHexNoUndo);
}

if (fullRewardConsolidation) {
LogPrintf("Consolidate rewards for all addresses..\n");

Expand Down Expand Up @@ -2301,6 +2306,11 @@ bool AppInitMain(InitInterfaces& interfaces)
ConsolidateRewards(*pcustomcsview, ::ChainActive().Height(), ownersToConsolidate, true, skipStatic);
}
pcustomcsview->Flush();

{
auto [hashHex, hashHexNoUndo] = GetDVMDBHashes(*pcustomcsview);
LogPrintf("Post-consolidate rewards for DVM hash: %s hash-no-undo: %s\n", hashHex, hashHexNoUndo);
}
}

// ********************************************************* Step 12: import blocks
Expand Down

0 comments on commit 639bb43

Please sign in to comment.