Skip to content

Commit

Permalink
StateManager64 returns proofHashCounter, currently hardcoded
Browse files Browse the repository at this point in the history
  • Loading branch information
fractasy committed Sep 21, 2023
1 parent fbc6333 commit 4ead23d
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 7 deletions.
47 changes: 42 additions & 5 deletions src/hashdb64/state_manager_64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,10 @@ zkresult StateManager64::setStateRoot(const string &batchUUID, uint64_t tx, cons
return ZKR_SUCCESS;
}

zkresult StateManager64::write (const string &batchUUID, uint64_t tx, const string &key, const mpz_class &value, const Persistence persistence)
zkresult StateManager64::write (const string &batchUUID, uint64_t tx, const string &key, const mpz_class &value, const Persistence persistence, uint64_t &level)
{
level = 128;

#ifdef LOG_TIME_STATISTICS_STATE_MANAGER
struct timeval t;
gettimeofday(&t, NULL);
Expand Down Expand Up @@ -257,8 +259,10 @@ zkresult StateManager64::write (const string &batchUUID, uint64_t tx, const stri
return ZKR_SUCCESS;
}

zkresult StateManager64::read(const string &batchUUID, const string &key, mpz_class &value, DatabaseMap *dbReadLog)
zkresult StateManager64::read(const string &batchUUID, const string &key, mpz_class &value, uint64_t &level, DatabaseMap *dbReadLog)
{
level = 128;

struct timeval t;
gettimeofday(&t, NULL);

Expand Down Expand Up @@ -1041,11 +1045,28 @@ zkresult StateManager64::set (const string &batchUUID, uint64_t tx, Database64 &

// Write the key-value pair
string hashString = fea2string(fr, key);
zkr = stateManager64.write(batchUUID, tx, hashString, value, persistence);
uint64_t level;
uint64_t stateManagerLevel;
uint64_t databaseLevel;
zkr = stateManager64.write(batchUUID, tx, hashString, value, persistence, stateManagerLevel);
if (zkr != ZKR_SUCCESS)
{
zklog.error("StateManager64::set() failed calling stateManager.write() key=" + hashString + " result=" + to_string(zkr) + "=" + zkresult2string(zkr));
}
else
{
zkresult dbzkr = db.readLevel(key, databaseLevel);
if (dbzkr != ZKR_SUCCESS)
{
zklog.error("StateManager64::set() failed calling db.readLevel() key=" + hashString + " result=" + to_string(dbzkr) + "=" + zkresult2string(dbzkr));
level = 128;
}
else
{
level = zkmax(stateManagerLevel, databaseLevel);
}

}

// Get a new state root
Goldilocks::Element newRoot[4]; // TODO: Get a new state root
Expand All @@ -1059,6 +1080,7 @@ zkresult StateManager64::set (const string &batchUUID, uint64_t tx, Database64 &
result.newRoot[1] = newRoot[1];
result.newRoot[2] = newRoot[2];
result.newRoot[3] = newRoot[3];
result.proofHashCounter = level + 2;
}
else
{
Expand All @@ -1076,14 +1098,28 @@ zkresult StateManager64::get (const string &batchUUID, Database64 &db, const Gol

bool bUseStateManager = db.config.stateManager && (batchUUID.size() > 0);

// Read the content of db for entry r: siblings[level] = db.read(r)
string keyString = fea2string(fr, key);
mpz_class value;
zkresult zkr = ZKR_UNSPECIFIED;
uint64_t level = 0;
if (bUseStateManager)
{
zkr = stateManager64.read(batchUUID, keyString, value, dbReadLog);
uint64_t stateManagerLevel;
uint64_t databaseLevel;
zkr = stateManager64.read(batchUUID, keyString, value, stateManagerLevel, dbReadLog);
if (zkr == ZKR_SUCCESS)
{
zkresult dbzkr = db.readLevel(key, databaseLevel);
if (dbzkr != ZKR_SUCCESS)
{
zklog.error("StateManager64::get() failed calling db.readLevel() result=" + zkresult2string(dbzkr));
level = 128;
}
else
{
level = zkmax(stateManagerLevel, databaseLevel);
}
}
}
if (zkr != ZKR_SUCCESS)
{
Expand All @@ -1096,6 +1132,7 @@ zkresult StateManager64::get (const string &batchUUID, Database64 &db, const Gol
}

result.value = value;
result.proofHashCounter = level + 2;

return ZKR_SUCCESS;
}
4 changes: 2 additions & 2 deletions src/hashdb64/state_manager_64.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ class StateManager64
{
return setStateRoot(batchUUID, tx, stateRoot, false, persistence);
}
zkresult write (const string &batchUUID, uint64_t tx, const string &_key, const mpz_class &value, const Persistence persistence);
zkresult read (const string &batchUUID, const string &_key, mpz_class &value, DatabaseMap *dbReadLog);
zkresult write (const string &batchUUID, uint64_t tx, const string &_key, const mpz_class &value, const Persistence persistence, uint64_t &level);
zkresult read (const string &batchUUID, const string &_key, mpz_class &value, uint64_t &level, DatabaseMap *dbReadLog);
zkresult semiFlush (const string &batchUUID, const string &newStateRoot, const Persistence persistence);
zkresult purge (const string &batchUUID, const string &_newStateRoot, const Persistence _persistence, Database64 &db);
zkresult consolidateState (const string &newStateRoot, const Persistence _persistence, string & consolidatedStateRoot, Database64 &db, uint64_t &flushId, uint64_t &lastSentFlushId);
Expand Down

0 comments on commit 4ead23d

Please sign in to comment.