fix leveldb traversal.
This commit is contained in:
parent
fc0de11c50
commit
0da9c4dd44
@ -6167,6 +6167,7 @@ read_addr(const std::string addr) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
found:
|
found:
|
||||||
pcursor->Next();
|
pcursor->Next();
|
||||||
} catch (std::exception &e) {
|
} catch (std::exception &e) {
|
||||||
@ -6195,8 +6196,6 @@ error:
|
|||||||
|
|
||||||
static bool
|
static bool
|
||||||
get_block_by_tx(const std::string itxhash, CBlock& rcblock, CBlockIndex **rcblock_index) {
|
get_block_by_tx(const std::string itxhash, CBlock& rcblock, CBlockIndex **rcblock_index) {
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
leveldb::Iterator* pcursor = pblocktree->pdb->NewIterator(pblocktree->iteroptions);
|
leveldb::Iterator* pcursor = pblocktree->pdb->NewIterator(pblocktree->iteroptions);
|
||||||
|
|
||||||
pcursor->SeekToFirst();
|
pcursor->SeekToFirst();
|
||||||
@ -6211,13 +6210,6 @@ get_block_by_tx(const std::string itxhash, CBlock& rcblock, CBlockIndex **rcbloc
|
|||||||
char type;
|
char type;
|
||||||
ssKey >> type;
|
ssKey >> type;
|
||||||
|
|
||||||
// Blockchain Index Structure:
|
|
||||||
// http://bitcoin.stackexchange.com/questions/28168
|
|
||||||
|
|
||||||
// Transaction Structure:
|
|
||||||
// CDiskBlockPos.nFile - block file
|
|
||||||
// CDiskBlockPos.nPos - block pos
|
|
||||||
// CDiskTxPos.nTxOffset - offset from top of block
|
|
||||||
if (type == 't') {
|
if (type == 't') {
|
||||||
uint256 txhash;
|
uint256 txhash;
|
||||||
ssKey >> txhash;
|
ssKey >> txhash;
|
||||||
@ -6241,7 +6233,7 @@ get_block_by_tx(const std::string itxhash, CBlock& rcblock, CBlockIndex **rcbloc
|
|||||||
uint256 blockhash;
|
uint256 blockhash;
|
||||||
|
|
||||||
if (!pblocktree->ReadTxIndex(txhash, txPos)) {
|
if (!pblocktree->ReadTxIndex(txhash, txPos)) {
|
||||||
goto found;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
CAutoFile file(OpenBlockFile(txPos, true), SER_DISK, CLIENT_VERSION);
|
CAutoFile file(OpenBlockFile(txPos, true), SER_DISK, CLIENT_VERSION);
|
||||||
@ -6251,10 +6243,10 @@ get_block_by_tx(const std::string itxhash, CBlock& rcblock, CBlockIndex **rcbloc
|
|||||||
fseek(file.Get(), txPos.nTxOffset, SEEK_CUR);
|
fseek(file.Get(), txPos.nTxOffset, SEEK_CUR);
|
||||||
file >> ctx;
|
file >> ctx;
|
||||||
} catch (std::exception &e) {
|
} catch (std::exception &e) {
|
||||||
goto ret;
|
goto error;
|
||||||
}
|
}
|
||||||
if (ctx.GetHash() != txhash) {
|
if (ctx.GetHash() != txhash) {
|
||||||
goto ret;
|
goto error;
|
||||||
}
|
}
|
||||||
blockhash = header.GetHash();
|
blockhash = header.GetHash();
|
||||||
|
|
||||||
@ -6262,28 +6254,24 @@ get_block_by_tx(const std::string itxhash, CBlock& rcblock, CBlockIndex **rcbloc
|
|||||||
|
|
||||||
if (ReadBlockFromDisk(rcblock, pblockindex)) {
|
if (ReadBlockFromDisk(rcblock, pblockindex)) {
|
||||||
*rcblock_index = pblockindex;
|
*rcblock_index = pblockindex;
|
||||||
found = true;
|
delete pcursor;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
goto ret;
|
goto error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
found:
|
|
||||||
pcursor->Next();
|
pcursor->Next();
|
||||||
} catch (std::exception &e) {
|
} catch (std::exception &e) {
|
||||||
leveldb::Slice lastKey = pcursor->key();
|
|
||||||
std::string lastKeyHex = HexStr(lastKey.ToString());
|
|
||||||
head->err_msg = std::string(e.what()
|
|
||||||
+ std::string(" : Not found. Key: ")
|
|
||||||
+ lastKeyHex);
|
|
||||||
delete pcursor;
|
delete pcursor;
|
||||||
return found;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret:
|
error:
|
||||||
delete pcursor;
|
delete pcursor;
|
||||||
return found;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int64_t
|
static int64_t
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user