in chain/storage/leveldb.cpp [219:244]
std::pair<std::string, int> ResLevelDB::GetValueWithVersion(
const std::string& key, int version) {
std::string value_str = GetValue(key);
ValueHistory history;
if (!history.ParseFromString(value_str)) {
LOG(ERROR) << "old_value parse fail";
return std::make_pair("", 0);
}
if (history.value_size() == 0) {
return std::make_pair("", 0);
}
if (version > 0) {
for (int i = history.value_size() - 1; i >= 0; --i) {
if (history.value(i).version() == version) {
return std::make_pair(history.value(i).value(),
history.value(i).version());
}
if (history.value(i).version() < version) {
break;
}
}
}
int last_idx = history.value_size() - 1;
return std::make_pair(history.value(last_idx).value(),
history.value(last_idx).version());
}