diff --git a/src/bitcoindjs.cc b/src/bitcoindjs.cc index f07d7a5b..a72a6c86 100644 --- a/src/bitcoindjs.cc +++ b/src/bitcoindjs.cc @@ -232,18 +232,16 @@ static void async_import_key_after(uv_work_t *req); static inline void -ctx_to_jstx(const CTransaction& tx, uint256 hashBlock, Local entry); +cblock_to_jsblock(const CBlock& cblock, const CBlockIndex* blockindex, Local jsblock); static inline void -cblock_to_jsblock(const CBlock& block, const CBlockIndex* blockindex, Local obj); - -#if 0 -static inline void -jsblock_to_cblock(Local jsblock, CBlock& cblock); +ctx_to_jstx(const CTransaction& ctx, uint256 hashBlock, Local jstx); static inline void -jstx_to_ctx(Local jstx, CTransaction& ctx); -#endif +jsblock_to_cblock(const Local jsblock, CBlock& cblock); + +static inline void +jstx_to_ctx(const Local jstx, CTransaction& ctx); static inline void hexblock_to_cblock(std::string block_hex, CBlock& cblock); @@ -2427,31 +2425,31 @@ async_import_key_after(uv_work_t *req) { */ static inline void -cblock_to_jsblock(const CBlock& block, const CBlockIndex* blockindex, Local obj) { - obj->Set(NanNew("hash"), NanNew(block.GetHash().GetHex().c_str())); - CMerkleTx txGen(block.vtx[0]); - txGen.SetMerkleBranch(&block); - obj->Set(NanNew("confirmations"), NanNew((int)txGen.GetDepthInMainChain())); - obj->Set(NanNew("size"), NanNew((int)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION))); - obj->Set(NanNew("height"), NanNew(blockindex->nHeight)); - obj->Set(NanNew("version"), NanNew(block.nVersion)); - obj->Set(NanNew("merkleroot"), NanNew(block.hashMerkleRoot.GetHex())); +cblock_to_jsblock(const CBlock& cblock, const CBlockIndex* blockindex, Local jsblock) { + jsblock->Set(NanNew("hash"), NanNew(cblock.GetHash().GetHex().c_str())); + CMerkleTx txGen(cblock.vtx[0]); + txGen.SetMerkleBranch(&cblock); + jsblock->Set(NanNew("confirmations"), NanNew((int)txGen.GetDepthInMainChain())); + jsblock->Set(NanNew("size"), NanNew((int)::GetSerializeSize(cblock, SER_NETWORK, PROTOCOL_VERSION))); + jsblock->Set(NanNew("height"), NanNew(blockindex->nHeight)); + jsblock->Set(NanNew("version"), NanNew(cblock.nVersion)); + jsblock->Set(NanNew("merkleroot"), NanNew(cblock.hashMerkleRoot.GetHex())); // Build merkle tree - if (block.vMerkleTree.empty()) { - block.BuildMerkleTree(); + if (cblock.vMerkleTree.empty()) { + cblock.BuildMerkleTree(); } Local merkle = NanNew(); int mi = 0; - BOOST_FOREACH(uint256& hash, block.vMerkleTree) { + BOOST_FOREACH(uint256& hash, cblock.vMerkleTree) { merkle->Set(mi, NanNew(hash.ToString())); mi++; } - obj->Set(NanNew("merkletree"), merkle); + jsblock->Set(NanNew("merkletree"), merkle); Local txs = NanNew(); int ti = 0; - BOOST_FOREACH(const CTransaction& tx, block.vtx) { + BOOST_FOREACH(const CTransaction& tx, cblock.vtx) { Local entry = NanNew(); CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); @@ -2524,7 +2522,7 @@ cblock_to_jsblock(const CBlock& block, const CBlockIndex* blockindex, LocalSet(NanNew("vout"), vout); { - const uint256 hashBlock = block.GetHash(); + const uint256 hashBlock = cblock.GetHash(); if (hashBlock != 0) { entry->Set(NanNew("blockhash"), NanNew(hashBlock.GetHex())); map::iterator mi = mapBlockIndex.find(hashBlock); @@ -2545,38 +2543,38 @@ cblock_to_jsblock(const CBlock& block, const CBlockIndex* blockindex, LocalSet(ti, entry); ti++; } - obj->Set(NanNew("tx"), txs); + jsblock->Set(NanNew("tx"), txs); - obj->Set(NanNew("time"), NanNew((boost::int64_t)block.GetBlockTime())); - obj->Set(NanNew("nonce"), NanNew((boost::uint64_t)block.nNonce)); - obj->Set(NanNew("bits"), NanNew(block.nBits)); - obj->Set(NanNew("difficulty"), NanNew(GetDifficulty(blockindex))); - obj->Set(NanNew("chainwork"), NanNew(blockindex->nChainWork.GetHex())); + jsblock->Set(NanNew("time"), NanNew((boost::int64_t)cblock.GetBlockTime())); + jsblock->Set(NanNew("nonce"), NanNew((boost::uint64_t)cblock.nNonce)); + jsblock->Set(NanNew("bits"), NanNew(cblock.nBits)); + jsblock->Set(NanNew("difficulty"), NanNew(GetDifficulty(blockindex))); + jsblock->Set(NanNew("chainwork"), NanNew(blockindex->nChainWork.GetHex())); if (blockindex->pprev) { - obj->Set(NanNew("previousblockhash"), NanNew(blockindex->pprev->GetBlockHash().GetHex())); + jsblock->Set(NanNew("previousblockhash"), NanNew(blockindex->pprev->GetBlockHash().GetHex())); } CBlockIndex *pnext = chainActive.Next(blockindex); if (pnext) { - obj->Set(NanNew("nextblockhash"), NanNew(pnext->GetBlockHash().GetHex())); + jsblock->Set(NanNew("nextblockhash"), NanNew(pnext->GetBlockHash().GetHex())); } } static inline void -ctx_to_jstx(const CTransaction& tx, uint256 hashBlock, Local entry) { +ctx_to_jstx(const CTransaction& ctx, uint256 hashBlock, Local jstx) { CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); - ssTx << tx; + ssTx << ctx; std::string strHex = HexStr(ssTx.begin(), ssTx.end()); - entry->Set(NanNew("hex"), NanNew(strHex)); + jstx->Set(NanNew("hex"), NanNew(strHex)); - entry->Set(NanNew("txid"), NanNew(tx.GetHash().GetHex())); - entry->Set(NanNew("version"), NanNew(tx.nVersion)); - entry->Set(NanNew("locktime"), NanNew(tx.nLockTime)); + jstx->Set(NanNew("txid"), NanNew(ctx.GetHash().GetHex())); + jstx->Set(NanNew("version"), NanNew(ctx.nVersion)); + jstx->Set(NanNew("locktime"), NanNew(ctx.nLockTime)); Local vin = NanNew(); int vi = 0; - BOOST_FOREACH(const CTxIn& txin, tx.vin) { + BOOST_FOREACH(const CTxIn& txin, ctx.vin) { Local in = NanNew(); - if (tx.IsCoinBase()) { + if (ctx.IsCoinBase()) { in->Set(NanNew("coinbase"), NanNew(HexStr(txin.scriptSig.begin(), txin.scriptSig.end()))); } else { in->Set(NanNew("txid"), NanNew(txin.prevout.hash.GetHex())); @@ -2590,11 +2588,11 @@ ctx_to_jstx(const CTransaction& tx, uint256 hashBlock, Local entry) { vin->Set(vi, in); vi++; } - entry->Set(NanNew("vin"), vin); + jstx->Set(NanNew("vin"), vin); Local vout = NanNew(); - for (unsigned int vo = 0; vo < tx.vout.size(); vo++) { - const CTxOut& txout = tx.vout[vo]; + for (unsigned int vo = 0; vo < ctx.vout.size(); vo++) { + const CTxOut& txout = ctx.vout[vo]; Local out = NanNew(); out->Set(NanNew("value"), NanNew(txout.nValue)); out->Set(NanNew("n"), NanNew((boost::int64_t)vo)); @@ -2630,20 +2628,20 @@ ctx_to_jstx(const CTransaction& tx, uint256 hashBlock, Local entry) { vout->Set(vo, out); } - entry->Set(NanNew("vout"), vout); + jstx->Set(NanNew("vout"), vout); if (hashBlock != 0) { - entry->Set(NanNew("blockhash"), NanNew(hashBlock.GetHex())); + jstx->Set(NanNew("blockhash"), NanNew(hashBlock.GetHex())); map::iterator mi = mapBlockIndex.find(hashBlock); if (mi != mapBlockIndex.end() && (*mi).second) { CBlockIndex* pindex = (*mi).second; if (chainActive.Contains(pindex)) { - entry->Set(NanNew("confirmations"), + jstx->Set(NanNew("confirmations"), NanNew(1 + chainActive.Height() - pindex->nHeight)); - entry->Set(NanNew("time"), NanNew((boost::int64_t)pindex->nTime)); - entry->Set(NanNew("blocktime"), NanNew((boost::int64_t)pindex->nTime)); + jstx->Set(NanNew("time"), NanNew((boost::int64_t)pindex->nTime)); + jstx->Set(NanNew("blocktime"), NanNew((boost::int64_t)pindex->nTime)); } else { - entry->Set(NanNew("confirmations"), NanNew(0)); + jstx->Set(NanNew("confirmations"), NanNew(0)); } } } @@ -2670,31 +2668,31 @@ hextx_to_ctx(std::string tx_hex, CTransaction& ctx) { } static inline void -jsblock_to_cblock(const Local obj, CBlock& block) { - block->nVersion = (int)obj->Get(NanNew("version"))->IntegerValue(); +jsblock_to_cblock(const Local jsblock, CBlock& cblock) { + cblock->nVersion = (int)jsblock->Get(NanNew("version"))->IntegerValue(); - String::AsciiValue mhash__(obj->Get(NanNew("merkleroot"))->ToString()); + String::AsciiValue mhash__(jsblock->Get(NanNew("merkleroot"))->ToString()); std::string mhash_ = *mhash__; if (mhash_[1] != 'x') mhash_ = "0x" + mhash_; uint256 mhash(mhash_); - block->hashMerkleRoot = mhash; - block->nTime = (unsigned int)obj->Get(NanNew("time"))->IntegerValue(); - block->nNonce = (unsigned int)obj->Get(NanNew("nonce"))->IntegerValue(); - block->nBits = (unsigned int)obj->Get(NanNew("bits"))->IntegerValue(); + cblock->hashMerkleRoot = mhash; + cblock->nTime = (unsigned int)jsblock->Get(NanNew("time"))->IntegerValue(); + cblock->nNonce = (unsigned int)jsblock->Get(NanNew("nonce"))->IntegerValue(); + cblock->nBits = (unsigned int)jsblock->Get(NanNew("bits"))->IntegerValue(); - if (obj->Get(NanNew("previousblockhash"))->IsString()) { - String::AsciiValue hash__(obj->Get(NanNew("previousblockhash"))->ToString()); + if (jsblock->Get(NanNew("previousblockhash"))->IsString()) { + String::AsciiValue hash__(jsblock->Get(NanNew("previousblockhash"))->ToString()); std::string hash_ = *hash__; if (hash_[1] != 'x') hash_ = "0x" + hash_; uint256 hash(hash_); - block->hashPrevBlock = hash; + cblock->hashPrevBlock = hash; } else { uint256 hash(std::string("0000000000000000000000000000000000000000000000000000000000000000")); - block->hashPrevBlock = hash; + cblock->hashPrevBlock = hash; } - Local txs = Local::Cast(obj->Get("tx")); + Local txs = Local::Cast(jsblock->Get("tx")); for (int ti = 0; ti < txs->Length(); ti++) { Local entry = Local::Cast(txs->Get(ti)); CTransaction tx; @@ -2711,10 +2709,10 @@ jsblock_to_cblock(const Local obj, CBlock& block) { std::string shash; if (in->Get(NanNew("coinbase"))->IsString()) { - String::AsciiValue shash_(obj->Get(NanNew("coinbase"))->ToString()); + String::AsciiValue shash_(jsblock->Get(NanNew("coinbase"))->ToString()); shash = *shash_; } else { - String::AsciiValue shash_(obj->Get(NanNew("scriptSig"))->ToString()); + String::AsciiValue shash_(jsblock->Get(NanNew("scriptSig"))->ToString()); shash = *shash_; } CScript scriptSig(shash); @@ -2752,26 +2750,26 @@ jsblock_to_cblock(const Local obj, CBlock& block) { tx.vout.push_back(txout); } - block->vtx.push_back(tx); + cblock->vtx.push_back(tx); } } static inline void -jstx_to_ctx(const Local entry, CTransaction& tx, uint256 hashBlock) { - tx->nVersion = entry->Get(NanNew("version"))->IntegerValue(); - tx->nLockTime = entry->Get(NanNew("locktime"))->IntegerValue(); +jstx_to_ctx(const Local jstx, CTransaction& ctx) { + ctx->nVersion = jstx->Get(NanNew("version"))->IntegerValue(); + ctx->nLockTime = jstx->Get(NanNew("locktime"))->IntegerValue(); - Local vin = Local::Cast(entry->Get("vin")); + Local vin = Local::Cast(jstx->Get("vin")); for (int vi = 0; vi < vin->Length(); vi++) { CTxIn txin; Local in = Local::Cast(vin->Get(vi)); std::string shash; if (in->Get(NanNew("coinbase"))->IsString()) { - String::AsciiValue shash_(obj->Get(NanNew("coinbase"))->ToString()); + String::AsciiValue shash_(jsblock->Get(NanNew("coinbase"))->ToString()); shash = *shash_; } else { - String::AsciiValue shash_(obj->Get(NanNew("scriptSig"))->ToString()); + String::AsciiValue shash_(jsblock->Get(NanNew("scriptSig"))->ToString()); shash = *shash_; } CScript scriptSig(shash); @@ -2788,10 +2786,10 @@ jstx_to_ctx(const Local entry, CTransaction& tx, uint256 hashBlock) { txin.prevout.n = (boost::int64_t)in->Get(NanNew("vout"))->IntegerValue(); txin.nSequence = (boost::int64_t)in->Get(NanNew("sequence"))->IntegerValue(); - tx->vin.push_bask(txin); + ctx->vin.push_bask(txin); } - Local vout = Local::Cast(entry->Get("vout")); + Local vout = Local::Cast(jstx->Get("vout")); for (unsigned int vo = 0; vo < vout->Length(); vo++) { CTxOut txout; Local out = Local::Cast(vout->Get(vo)); @@ -2807,7 +2805,7 @@ jstx_to_ctx(const Local entry, CTransaction& tx, uint256 hashBlock) { txout.scriptPubKey = scriptPubKey; - tx->vout.push_back(txout); + ctx->vout.push_back(txout); } }