From 53bffc378e375fbb349e21f2147f37ec8f778050 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 1 Oct 2014 12:44:19 -0700 Subject: [PATCH] more conversion work. --- src/bitcoindjs.cc | 131 +++++++++++++++++++++++++--------------------- 1 file changed, 72 insertions(+), 59 deletions(-) diff --git a/src/bitcoindjs.cc b/src/bitcoindjs.cc index f2c254c7..bb22e7f5 100644 --- a/src/bitcoindjs.cc +++ b/src/bitcoindjs.cc @@ -2234,36 +2234,44 @@ hextx_to_ctx(std::string tx_hex, CTransaction& ctx) { #if 0 static inline void jsblock_to_cblock(const Local obj, CBlock& block, CBlockIndex* blockindex) { - obj->Get(NanNew("confirmations"))->IntegerValue(); - obj->Get(NanNew("size"))->IntegerValue(); - obj->Get(NanNew("height"))->IntegerValue(); - obj->Get(NanNew("version"))->IntegerValue(); - obj->Get(NanNew("merkleroot"))->IntegerValue(); + block.GetHash().GetHex().c_str() = obj->Get(NanNew("hash"))->ToString(); + txGen.GetDepthInMainChain()= obj->Get(NanNew("confirmations"))->IntegerValue(); + (int)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION) = + obj->Get(NanNew("size"))->IntegerValue(); + blockindex->nHeight = obj->Get(NanNew("height"))->IntegerValue(); + block->nVersion = obj->Get(NanNew("version"))->IntegerValue(); + block->hashMerkleRoot = obj->Get(NanNew("merkleroot"))->ToString(); + block->vMerkleTree = obj->Get(NanNew("merkletree"))->ToString(); Local txs = obj->Get("tx"); for (int ti = 0; ti < txs.Length(); ti++) { Local entry = txs->Get(ti); CTransaction tx; - entry->Get(NanNew("hex")); - entry->Get(NanNew("txid")); - entry->Get(NanNew("version")); - entry->Get(NanNew("locktime")); + Local entry = NanNew(); + + CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); + ssTx << tx; + std::string strHex = HexStr(ssTx.begin(), ssTx.end()); + strHex = entry->Get(NanNew("hex"))->ToString(); + tx.GetHash().GetHex() = entry->Get(NanNew("txid"))->ToString(); + tx.nVersion = entry->Get(NanNew("version"))->IntegerValue(); + tx.nLockTime = entry->Get(NanNew("locktime"))->IntegerValue(); Local vin = entry->Get("vin"); for (int vi = 0; vi < vin.Length(); vi++) { CTxIn txin; Local in = vin->Get(vi); if (in->Get(NanNew("coinbase"))->IsString()) { - in->Get(NanNew("coinbase")); + HexStr(txin.scriptSig.begin(), txin.scriptSig.end()) = in->Get(NanNew("coinbase"))->ToString(); } else { - in->Get(NanNew("txid"), NanNew(txin.prevout.hash.GetHex())); - in->Get(NanNew("vout"), NanNew((boost::int64_t)txin.prevout.n)); - Local o = in->Get(NanNew("scriptSig"), o); - o->Get(NanNew("asm")); - o->Get(NanNew("hex")); + txin.prevout.hash.GetHex() = in->Get(NanNew("txid"))->ToString(); + (boost::int64_t)txin.prevout.n = in->Get(NanNew("vout"))->IntegerValue(); + Local o = in->Get(NanNew("scriptSig")); + txin.scriptSig.ToString() = o->Get(NanNew("asm"))->ToString(); + HexStr(txin.scriptSig.begin(), txin.scriptSig.end()) = o->Get(NanNew("hex"))->ToString(); } - in->Get(NanNew("sequence")); + (boost::int64_t)txin.nSequence = in->Get(NanNew("sequence"))->IntegerValue(); } Local vout = entry->Get("vout"); @@ -2271,8 +2279,8 @@ jsblock_to_cblock(const Local obj, CBlock& block, CBlockIndex* blockinde const CTxOut txout; Local out = vout->Get(vo); - out->Get(NanNew("value")); - out->Get(NanNew("n")); + txout.nValue = out->Get(NanNew("value"))->IntegerValue(); + (boost::int64_t)vo = out->Get(NanNew("n"))->IntegerValue(); Local o = out->Get(NanNew("scriptPubKey")); { @@ -2283,19 +2291,19 @@ jsblock_to_cblock(const Local obj, CBlock& block, CBlockIndex* blockinde txnouttype type; vector addresses; int nRequired; - out->Get(NanNew("asm")); + scriptPubKey.ToString() = out->Get(NanNew("asm"))->ToString(); if (fIncludeHex) { - out->Set(NanNew("hex")); + HexStr(scriptPubKey.begin(), scriptPubKey.end()) = out->Set(NanNew("hex"))->ToString(); } if (!ExtractDestinations(scriptPubKey, type, addresses, nRequired)) { - out->Set(NanNew("type")); + GetTxnOutputType(type) = out->Set(NanNew("type"))->ToString(); } else { - out->Set(NanNew("reqSigs")); - out->Set(NanNew("type")); + nRequired = out->Set(NanNew("reqSigs"))->IntegerValue(); + GetTxnOutputType(type) = out->Set(NanNew("type"))->ToString(); Local a = out->Get("addresses"); for (int ai = 0; ai < a.Length(); ai++) { CTxDestination addr; - a->Get(ai); + CBitcoinAddress(addr).ToString() = a->Get(ai)->ToString(); } } } @@ -2303,93 +2311,98 @@ jsblock_to_cblock(const Local obj, CBlock& block, CBlockIndex* blockinde if (entry->Get(NanNew("blockhash"))->IsString()) { const uint256 hashBlock; - entry->Get(NanNew("blockhash")); + hashBlock.GetHex() = entry->Get(NanNew("blockhash"))->ToString(); if (entry->Get(NanNew("time"))->IsNumber()) { - entry->Get(NanNew("confirmations")); - entry->Get(NanNew("time")); - entry->Get(NanNew("blocktime")); + 1 + chainActive.Height() - pindex->nHeight = entry->Get(NanNew("confirmations"))->IntegerValue(); + (boost::int64_t)pindex->nTime = entry->Get(NanNew("time"))->IntegerValue(); + (boost::int64_t)pindex->nTime = entry->Get(NanNew("blocktime"))->IntegerValue(); } else { - entry->Get(NanNew("confirmations")); + 0 = entry->Get(NanNew("confirmations"))->IntegerValue(); } } } - obj->Get(NanNew("time")); - obj->Get(NanNew("nonce")); - obj->Get(NanNew("bits")); - obj->Get(NanNew("difficulty")); - obj->Get(NanNew("chainwork")); + (boost::int64_t)block.GetBlockTime() = obj->Get(NanNew("time"))->IntegerValue(); + (boost::uint64_t)block.nNonce = obj->Get(NanNew("nonce"))->IntegerValue(); + block.nBits = obj->Get(NanNew("bits"))->IntegerValue(); + GetDifficulty(blockindex) = obj->Get(NanNew("difficulty"))->IntegerValue(); + blockindex->nChainWork.GetHex() = obj->Get(NanNew("chainwork"))->ToString(); if (obj->Get(NanNew("previousblockhash"))->IsString()) { - obj->Get(NanNew("previousblockhash")); + blockindex->pprev->GetBlockHash().GetHex() = obj->Get(NanNew("previousblockhash"))->ToString(); } if (obj->Get(NanNew("nextblockhash"))->IsString()) { CBlockIndex pnext; - obj->Get(NanNew("nextblockhash")); + CBlockIndex *pnext = chainActive.Next(blockindex); + pnext->GetBlockHash().GetHex() = obj->Get(NanNew("nextblockhash"))->ToString(); } } static inline void jstx_to_ctx(const Local entry, CTransaction& tx, uint256 hashBlock) { - entry->Get(NanNew("hex"), NanNew(strHex)); - entry->Get(NanNew("txid"), NanNew(tx.GetHash().GetHex())); - entry->Get(NanNew("version"), NanNew(tx.nVersion)); - entry->Get(NanNew("locktime"), NanNew(tx.nLockTime)); + CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); + ssTx << tx; + std::string strHex = HexStr(ssTx.begin(), ssTx.end()); + strHex = entry->Get(NanNew("hex"), NanNew(strHex))->ToString(); + tx.GetHash().GetHex() = entry->Get(NanNew("txid"))->ToString(); + tx.nVersion = entry->Get(NanNew("version"))->IntegerValue(); + tx.nLockTime = entry->Get(NanNew("locktime"))->IntegerValue(); Local vin = entry->Get("vin"); for (int vi = 0; vi < vin.Length(); vi++) { const CTxIn txin; Local in = vin->Get(vi); if (in->Get(NanNew("coinbase")->IsString()) { - in->Get(NanNew("coinbase")); + HexStr(txin.scriptSig.begin(), txin.scriptSig.end()) = in->Get(NanNew("coinbase"))->ToString(); } else { - in->Get(NanNew("txid"), NanNew(txin.prevout.hash.GetHex())); - in->Get(NanNew("vout"), NanNew((boost::int64_t)txin.prevout.n)); + txin.prevout.hash.GetHex() = in->Get(NanNew("txid"))->ToString(); + (boost::int64_t)txin.prevout.n = in->Get(NanNew("vout"))->IntegerValue(); Local o = in->Get(NanNew("scriptSig")); - o->Get(NanNew("asm"), NanNew(txin.scriptSig.ToString())); - o->Get(NanNew("hex"), NanNew(HexStr(txin.scriptSig.begin(), txin.scriptSig.end()))); + txin.scriptSig.ToString() = o->Get(NanNew("asm"))->ToString(); + HexStr(txin.scriptSig.begin(), txin.scriptSig.end()) = o->Get(NanNew("hex"))->ToString(); } - in->Get(NanNew("sequence"), NanNew((boost::int64_t)txin.nSequence)); + (boost::int64_t)txin.nSequence = in->Get(NanNew("sequence"))->IntegerValue(); } Local vout = entry->Get("vout"); for (unsigned int vo = 0; vo < vout.Length(); vo++) { CTxOut txout; Local out = vout->Get(vo); - out->Get(NanNew("value")); - out->Get(NanNew("n")); + txout.nValue = out->Get(NanNew("value"))->IntegerValue(); + (boost::int64_t)vo = out->Get(NanNew("n"))->IntegerValue(); Local o = out->Get(NanNew("scriptPubKey")); { CScript scriptPubKey; Local out = o; - out->Get(NanNew("asm")); + int nRequired; + scriptPubKey.ToString() = out->Get(NanNew("asm"))->ToString(); if (out->Get(NanNew("hex"))->IsString()) { - out->Get(NanNew("hex")); + HexStr(scriptPubKey.begin(), scriptPubKey.end()) = out->Get(NanNew("hex"))->ToString(); } if (out->Get(NanNew("type"))->IsString()) { - out->Get(NanNew("type")); + GetTxnOutputType(type) = out->Get(NanNew("type"))->ToString(); } else { - out->Get(NanNew("reqSigs")); - out->Get(NanNew("type")); + nRequired = out->Get(NanNew("reqSigs"))->IntegerValue(); + GetTxnOutputType(type) = out->Get(NanNew("type"))->ToString(); Local a = out->Get("addresses"); for (int ai = 0; ai < a.Length(); ai++) { CTxDestination addr; - a->get(ai); + CBitcoinAddress(addr).ToString() = a->get(ai)->ToString(); } } } } if (entry->Get(NanNew("blockhash"))->IsString()) { - entry->Get(NanNew("blockhash")); + hashBlock.GetHex() = entry->Get(NanNew("blockhash"))->ToString(); CBlockIndex pindex; if (entry->Get("time")->IsNumber()) { - entry->Get(NanNew("confirmations")); - entry->Get(NanNew("time")); - entry->Get(NanNew("blocktime")); + 1 + chainActive.Height() - pindex->nHeight = entry->Get(NanNew("confirmations"))->IntegerValue(); + (boost::int64_t)pindex->nTime = entry->Get(NanNew("time"))->IntegerValue(); + (boost::int64_t)pindex->nTime = entry->Get(NanNew("blocktime"))->IntegerValue(); } else { - entry->Get(NanNew("confirmations")); + 0 = entry->Get(NanNew("confirmations"))->IntegerValue(); } } }