fix dissonance between height and index.
This commit is contained in:
parent
fbe9aad581
commit
dd2abe4b59
|
@ -429,9 +429,9 @@ Bitcoin.prototype.getAddrTransactions = function(address, callback) {
|
||||||
return bitcoin.db.get(address, function(err, records) {
|
return bitcoin.db.get(address, function(err, records) {
|
||||||
var options = {
|
var options = {
|
||||||
address: address,
|
address: address,
|
||||||
blockindex: (records || []).reduce(function(out, record) {
|
blockheight: (records || []).reduce(function(out, record) {
|
||||||
return record.blockindex > out
|
return record.blockheight > out
|
||||||
? record.blockindex
|
? record.blockheight
|
||||||
: out;
|
: out;
|
||||||
}, -1)
|
}, -1)
|
||||||
};
|
};
|
||||||
|
@ -442,7 +442,7 @@ Bitcoin.prototype.getAddrTransactions = function(address, callback) {
|
||||||
return bitcoin.db.set(address, [{
|
return bitcoin.db.set(address, [{
|
||||||
txid: null,
|
txid: null,
|
||||||
blockhash: null,
|
blockhash: null,
|
||||||
blockindex: null
|
blockheight: null
|
||||||
}], function() {
|
}], function() {
|
||||||
return callback(null, bitcoin.addr({
|
return callback(null, bitcoin.addr({
|
||||||
address: addr.address,
|
address: addr.address,
|
||||||
|
@ -458,7 +458,7 @@ Bitcoin.prototype.getAddrTransactions = function(address, callback) {
|
||||||
set.push({
|
set.push({
|
||||||
txid: tx.txid,
|
txid: tx.txid,
|
||||||
blockhash: tx.blockhash,
|
blockhash: tx.blockhash,
|
||||||
blockindex: tx.blockindex
|
blockheight: tx.blockheight
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return bitcoin.db.set(address, set, function() {
|
return bitcoin.db.set(address, set, function() {
|
||||||
|
|
|
@ -499,7 +499,7 @@ struct async_addrtx_data {
|
||||||
std::string err_msg;
|
std::string err_msg;
|
||||||
std::string addr;
|
std::string addr;
|
||||||
ctx_list *ctxs;
|
ctx_list *ctxs;
|
||||||
int64_t blockindex;
|
int64_t blockheight;
|
||||||
Persistent<Function> callback;
|
Persistent<Function> callback;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -589,7 +589,7 @@ struct async_rescan_data {
|
||||||
|
|
||||||
#if USE_LDB_ADDR
|
#if USE_LDB_ADDR
|
||||||
static ctx_list *
|
static ctx_list *
|
||||||
read_addr(const std::string addr, const int64_t blockindex);
|
read_addr(const std::string addr, const int64_t blockheight);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
|
@ -1906,7 +1906,7 @@ NAN_METHOD(GetAddrTransactions) {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string addr = "";
|
std::string addr = "";
|
||||||
int64_t blockindex = -1;
|
int64_t blockheight = -1;
|
||||||
|
|
||||||
if (args[0]->IsString()) {
|
if (args[0]->IsString()) {
|
||||||
String::Utf8Value addr_(args[0]->ToString());
|
String::Utf8Value addr_(args[0]->ToString());
|
||||||
|
@ -1921,11 +1921,11 @@ NAN_METHOD(GetAddrTransactions) {
|
||||||
String::Utf8Value s_(options->Get(NanNew<String>("addr"))->ToString());
|
String::Utf8Value s_(options->Get(NanNew<String>("addr"))->ToString());
|
||||||
addr = std::string(*s_);
|
addr = std::string(*s_);
|
||||||
}
|
}
|
||||||
if (options->Get(NanNew<String>("index"))->IsNumber()) {
|
if (options->Get(NanNew<String>("height"))->IsNumber()) {
|
||||||
blockindex = options->Get(NanNew<String>("index"))->IntegerValue();
|
blockheight = options->Get(NanNew<String>("height"))->IntegerValue();
|
||||||
}
|
}
|
||||||
if (options->Get(NanNew<String>("blockindex"))->IsNumber()) {
|
if (options->Get(NanNew<String>("blockheight"))->IsNumber()) {
|
||||||
blockindex = options->Get(NanNew<String>("blockindex"))->IntegerValue();
|
blockheight = options->Get(NanNew<String>("blockheight"))->IntegerValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1938,7 +1938,7 @@ NAN_METHOD(GetAddrTransactions) {
|
||||||
data->err_msg = std::string("");
|
data->err_msg = std::string("");
|
||||||
data->addr = addr;
|
data->addr = addr;
|
||||||
data->ctxs = NULL;
|
data->ctxs = NULL;
|
||||||
data->blockindex = blockindex;
|
data->blockheight = blockheight;
|
||||||
data->callback = Persistent<Function>::New(callback);
|
data->callback = Persistent<Function>::New(callback);
|
||||||
|
|
||||||
uv_work_t *req = new uv_work_t();
|
uv_work_t *req = new uv_work_t();
|
||||||
|
@ -1973,8 +1973,8 @@ async_get_addrtx(uv_work_t *req) {
|
||||||
|
|
||||||
int64_t i = 0;
|
int64_t i = 0;
|
||||||
|
|
||||||
if (data->blockindex != -1) {
|
if (data->blockheight != -1) {
|
||||||
i = data->blockindex;
|
i = data->blockheight;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t height = chainActive.Height();
|
int64_t height = chainActive.Height();
|
||||||
|
@ -2036,7 +2036,7 @@ done:
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
#else
|
#else
|
||||||
ctx_list *ctxs = read_addr(data->addr, data->blockindex);
|
ctx_list *ctxs = read_addr(data->addr, data->blockheight);
|
||||||
if (!ctxs->err_msg.empty()) {
|
if (!ctxs->err_msg.empty()) {
|
||||||
data->err_msg = ctxs->err_msg;
|
data->err_msg = ctxs->err_msg;
|
||||||
return;
|
return;
|
||||||
|
@ -5901,8 +5901,11 @@ ctx_to_jstx(const CTransaction& ctx, uint256 block_hash, Local<Object> jstx) {
|
||||||
CBlockIndex* pindex = mapBlockIndex[block_hash];
|
CBlockIndex* pindex = mapBlockIndex[block_hash];
|
||||||
jstx->Set(NanNew<String>("confirmations"),
|
jstx->Set(NanNew<String>("confirmations"),
|
||||||
NanNew<Number>(pindex->nHeight));
|
NanNew<Number>(pindex->nHeight));
|
||||||
|
// XXX Not really index:
|
||||||
jstx->Set(NanNew<String>("blockindex"),
|
jstx->Set(NanNew<String>("blockindex"),
|
||||||
NanNew<Number>(pindex->nHeight));
|
NanNew<Number>(pindex->nHeight));
|
||||||
|
jstx->Set(NanNew<String>("blockheight"),
|
||||||
|
NanNew<Number>(pindex->nHeight));
|
||||||
jstx->Set(NanNew<String>("blocktime"),
|
jstx->Set(NanNew<String>("blocktime"),
|
||||||
NanNew<Number>((int64_t)pindex->GetBlockTime())->ToInteger());
|
NanNew<Number>((int64_t)pindex->GetBlockTime())->ToInteger());
|
||||||
jstx->Set(NanNew<String>("time"),
|
jstx->Set(NanNew<String>("time"),
|
||||||
|
@ -5911,7 +5914,9 @@ ctx_to_jstx(const CTransaction& ctx, uint256 block_hash, Local<Object> jstx) {
|
||||||
NanNew<Number>((int64_t)pindex->GetBlockTime())->ToInteger());
|
NanNew<Number>((int64_t)pindex->GetBlockTime())->ToInteger());
|
||||||
} else {
|
} else {
|
||||||
jstx->Set(NanNew<String>("confirmations"), NanNew<Number>(0));
|
jstx->Set(NanNew<String>("confirmations"), NanNew<Number>(0));
|
||||||
|
// XXX Not really index:
|
||||||
jstx->Set(NanNew<String>("blockindex"), NanNew<Number>(-1));
|
jstx->Set(NanNew<String>("blockindex"), NanNew<Number>(-1));
|
||||||
|
jstx->Set(NanNew<String>("blockheight"), NanNew<Number>(-1));
|
||||||
jstx->Set(NanNew<String>("blocktime"), NanNew<Number>(0));
|
jstx->Set(NanNew<String>("blocktime"), NanNew<Number>(0));
|
||||||
jstx->Set(NanNew<String>("time"), NanNew<Number>(0));
|
jstx->Set(NanNew<String>("time"), NanNew<Number>(0));
|
||||||
jstx->Set(NanNew<String>("timereceived"), NanNew<Number>(0));
|
jstx->Set(NanNew<String>("timereceived"), NanNew<Number>(0));
|
||||||
|
@ -5936,7 +5941,9 @@ ctx_to_jstx(const CTransaction& ctx, uint256 block_hash, Local<Object> jstx) {
|
||||||
jstx->Set(NanNew<String>("confirmations"), NanNew<Number>(-1));
|
jstx->Set(NanNew<String>("confirmations"), NanNew<Number>(-1));
|
||||||
jstx->Set(NanNew<String>("generated"), NanNew<Boolean>(false));
|
jstx->Set(NanNew<String>("generated"), NanNew<Boolean>(false));
|
||||||
jstx->Set(NanNew<String>("blockhash"), NanNew<String>(uint256(0).GetHex()));
|
jstx->Set(NanNew<String>("blockhash"), NanNew<String>(uint256(0).GetHex()));
|
||||||
|
// XXX Not really index:
|
||||||
jstx->Set(NanNew<String>("blockindex"), NanNew<Number>(-1));
|
jstx->Set(NanNew<String>("blockindex"), NanNew<Number>(-1));
|
||||||
|
jstx->Set(NanNew<String>("blockheight"), NanNew<Number>(-1));
|
||||||
jstx->Set(NanNew<String>("blocktime"), NanNew<Number>(0));
|
jstx->Set(NanNew<String>("blocktime"), NanNew<Number>(0));
|
||||||
jstx->Set(NanNew<String>("walletconflicts"), NanNew<Array>());
|
jstx->Set(NanNew<String>("walletconflicts"), NanNew<Array>());
|
||||||
jstx->Set(NanNew<String>("time"), NanNew<Number>(0));
|
jstx->Set(NanNew<String>("time"), NanNew<Number>(0));
|
||||||
|
@ -6068,20 +6075,16 @@ jstx_to_ctx(const Local<Object> jstx, CTransaction& ctx_) {
|
||||||
|
|
||||||
#if USE_LDB_ADDR
|
#if USE_LDB_ADDR
|
||||||
static ctx_list *
|
static ctx_list *
|
||||||
read_addr(const std::string addr, const int64_t blockindex) {
|
read_addr(const std::string addr, const int64_t blockheight) {
|
||||||
ctx_list *head = new ctx_list();
|
ctx_list *head = new ctx_list();
|
||||||
ctx_list *cur = NULL;
|
ctx_list *cur = NULL;
|
||||||
|
|
||||||
// XXX Do something with this:
|
|
||||||
// blockindex
|
|
||||||
|
|
||||||
head->err_msg = std::string("");
|
head->err_msg = std::string("");
|
||||||
|
|
||||||
CScript expectedScriptSig = GetScriptForDestination(CBitcoinAddress(addr).Get());
|
CScript expectedScriptSig = GetScriptForDestination(CBitcoinAddress(addr).Get());
|
||||||
|
|
||||||
leveldb::Iterator* pcursor = pblocktree->pdb->NewIterator(pblocktree->iteroptions);
|
leveldb::Iterator* pcursor = pblocktree->pdb->NewIterator(pblocktree->iteroptions);
|
||||||
|
|
||||||
// Seek to blockindex:
|
|
||||||
pcursor->SeekToFirst();
|
pcursor->SeekToFirst();
|
||||||
|
|
||||||
while (pcursor->Valid()) {
|
while (pcursor->Valid()) {
|
||||||
|
@ -6143,14 +6146,14 @@ read_addr(const std::string addr, const int64_t blockindex) {
|
||||||
CDiskBlockIndex index;
|
CDiskBlockIndex index;
|
||||||
ssValue >> index;
|
ssValue >> index;
|
||||||
|
|
||||||
|
//if (blockheight != -1 && index.nHeight < blockheight) {
|
||||||
|
// goto next;
|
||||||
|
//}
|
||||||
|
|
||||||
CDiskBlockPos blockPos;
|
CDiskBlockPos blockPos;
|
||||||
blockPos.nFile = index.nFile;
|
blockPos.nFile = index.nFile;
|
||||||
blockPos.nPos = index.nDataPos;
|
blockPos.nPos = index.nDataPos;
|
||||||
|
|
||||||
if (index.nHeight < blockindex) {
|
|
||||||
goto next;
|
|
||||||
}
|
|
||||||
|
|
||||||
CBlock cblock;
|
CBlock cblock;
|
||||||
|
|
||||||
if (!ReadBlockFromDisk(cblock, blockPos)) {
|
if (!ReadBlockFromDisk(cblock, blockPos)) {
|
||||||
|
|
Loading…
Reference in New Issue