From 1654923f122a1db861edd8b60a40d01986b58e62 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 5 Nov 2014 17:27:51 -0800 Subject: [PATCH] fixes. --- lib/bitcoind.js | 8 ++++++++ src/bitcoindjs.cc | 31 +++++++++++++++++++++++++++---- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/lib/bitcoind.js b/lib/bitcoind.js index 0d0d4721..ab156022 100644 --- a/lib/bitcoind.js +++ b/lib/bitcoind.js @@ -337,11 +337,19 @@ Bitcoin.prototype.getBlockHeight = function(height, callback) { }); }; +Bitcoin.prototype.getTransaction = Bitcoin.prototype.getTx = function(txHash, blockHash, callback) { if (!callback) { callback = blockHash; blockHash = ''; } + if (typeof blockHash === 'function') { + callback = blockHash; + blockHash = ''; + } + if (typeof blockHash !== 'string') { + blockHash = ''; + } return bitcoindjs.getTx(txHash, blockHash, function(err, tx) { if (err) return callback(err); return callback(null, bitcoin.tx(tx)); diff --git a/src/bitcoindjs.cc b/src/bitcoindjs.cc index b2d0bd3c..dd1cb32a 100644 --- a/src/bitcoindjs.cc +++ b/src/bitcoindjs.cc @@ -1068,9 +1068,6 @@ NAN_METHOD(GetTx) { String::Utf8Value blockHash_(args[1]->ToString()); Local callback = Local::Cast(args[2]); - Persistent cb; - cb = Persistent::New(callback); - std::string txHash = std::string(*txHash_); std::string blockHash = std::string(*blockHash_); @@ -1108,6 +1105,18 @@ async_get_tx(uv_work_t *req) { if (GetTransaction(hash, ctx, block_hash, true)) { data->ctx = ctx; } else { + if (data->blockHash != "0000000000000000000000000000000000000000000000000000000000000000") { + CBlock block; + CBlockIndex* pblockindex = mapBlockIndex[block_hash]; + if (ReadBlockFromDisk(block, pblockindex)) { + BOOST_FOREACH(const CTransaction &tx, block.vtx) { + if (tx.GetHash() == hash) { + data->ctx = tx; + return; + } + } + } + } data->err_msg = std::string("get_tx(): failed."); } } @@ -1873,7 +1882,7 @@ NAN_METHOD(GetAddrTransactions) { } String::Utf8Value addr_(args[0]->ToString()); - Local callback = Local::Cast(args[2]); + Local callback = Local::Cast(args[1]); Persistent cb; cb = Persistent::New(callback); @@ -5311,6 +5320,10 @@ ctx_to_jstx(const CTransaction& ctx, uint256 block_hash, Local jstx) { jstx->Set(NanNew("blockhash"), NanNew(cwtx.hashBlock.GetHex())); jstx->Set(NanNew("blockindex"), NanNew(cwtx.nIndex)); jstx->Set(NanNew("blocktime"), NanNew(mapBlockIndex[cwtx.hashBlock]->GetBlockTime())); + } else { + jstx->Set(NanNew("blockhash"), NanNew(uint256(0).GetHex())); + jstx->Set(NanNew("blockindex"), NanNew(-1)); + jstx->Set(NanNew("blocktime"), NanNew(0)); } Local conflicts = NanNew(); int co = 0; @@ -5320,6 +5333,16 @@ ctx_to_jstx(const CTransaction& ctx, uint256 block_hash, Local jstx) { jstx->Set(NanNew("walletconflicts"), conflicts); jstx->Set(NanNew("time"), NanNew(cwtx.GetTxTime())); jstx->Set(NanNew("timereceived"), NanNew((int64_t)cwtx.nTimeReceived)); + } else { + jstx->Set(NanNew("blockhash"), NanNew(uint256(0).GetHex())); + jstx->Set(NanNew("confirmations"), NanNew(-1)); + jstx->Set(NanNew("generated"), NanNew(false)); + jstx->Set(NanNew("blockhash"), NanNew(uint256(0).GetHex())); + jstx->Set(NanNew("blockindex"), NanNew(-1)); + jstx->Set(NanNew("blocktime"), NanNew(0)); + jstx->Set(NanNew("walletconflicts"), NanNew()); + jstx->Set(NanNew("time"), NanNew(0)); + jstx->Set(NanNew("timereceived"), NanNew(0)); } CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);