diff --git a/src/bitcoindjs.cc b/src/bitcoindjs.cc index eec809c6..b808ca81 100644 --- a/src/bitcoindjs.cc +++ b/src/bitcoindjs.cc @@ -432,6 +432,14 @@ static bool g_testnet = false; * Used for async functions and necessary linked lists at points. */ +#if 0 +typedef struct _prev_list { + std::string addr; + int64_t val; + struct _prev_list *next; +} prev_list; +#endif + /** * async_node_data * Where the uv async request data resides. @@ -456,6 +464,9 @@ struct async_block_data { int64_t height; CBlock cblock; CBlockIndex* cblock_index; +#if 0 + prev_list *inputs; +#endif Persistent callback; }; @@ -463,14 +474,6 @@ struct async_block_data { * async_tx_data */ -#if 0 -typedef struct _prev_list { - std::string addr; - int64_t val; - struct _prev_list *next; -} prev_list; -#endif - struct async_tx_data { std::string err_msg; std::string txHash; @@ -1014,6 +1017,30 @@ async_get_block(uv_work_t *req) { if (ReadBlockFromDisk(cblock, pblockindex)) { data->cblock = cblock; data->cblock_index = pblockindex; +#if 0 + BOOST_FOREACH(const CTransaction& ctx, cblock.vtx) { + BOOST_FOREACH(const CTxIn& txin, ctx.vin) { + CTransaction prev_tx; + if (GetTransaction(txin.prevout.hash, prev_tx, block_hash, true)) { + CTxDestination from; + CTxOut prev_out = prev_tx.vout[txin.prevout.n]; + ExtractDestination(prev_out.scriptPubKey, from); + CBitcoinAddress addrFrom(from); + std::string addr = addrFrom.ToString(); + int64_t val = (int64_t)prev_out.nValue; + prev_list *cur = new prev_list(); + cur->addr = addr; + cur->val = val; + if (data->inputs == NULL) { + data->inputs = cur; + } else { + data->inputs->next = cur; + data->inputs = cur; + } + } + } + } +#endif } else { data->err_msg = std::string("get_block(): failed."); } @@ -1040,6 +1067,24 @@ async_get_block_after(uv_work_t *req) { Local jsblock = NanNew(); cblock_to_jsblock(cblock, cblock_index, jsblock, false); +#if 0 + prev_list *head = data->inputs; + prev_list *cur = data->inputs; + prev_list *next; + for (int i = 0; i < jsblock->tx->ength(); i++) { + for (int j = 0; j < jstx->vin->Length(); j++) { + next = cur->next; + jsblock. + Local jsprev = NanNew(); + jsprev->Set(NanNew("address"), NanNew(cur->addr)); + jsprev->Set(NanNew("value"), NanNew(cur->val)); + jsblock->tx->Get(i)->vin->Get(j)->Set(NanNew("prev"), jsprev); + delete cur; + cur = next; + } + } +#endif + const unsigned argc = 2; Local argv[argc] = { Local::New(Null()), @@ -1191,7 +1236,7 @@ async_get_tx_after(uv_work_t *req) { prev_list *head = data->inputs; prev_list *cur = data->inputs; prev_list *next; - for (int i = 0; i < jstx.vin.Length(); i++) { + for (int i = 0; i < jstx->vin->Length(); i++) { next = cur->next; Local jsprev = NanNew(); jsprev->Set(NanNew("address"), NanNew(cur->addr)); @@ -2489,6 +2534,7 @@ NAN_METHOD(HookPackets) { o->Set(NanNew("fromHeight"), NanNew(pindex ? pindex->nHeight : -1)); o->Set(NanNew("toHash"), NanNew(hashStop.GetHex().c_str())); } else if (strCommand == "tx") { + // XXX May be able to do prev_list asynchronously // XXX Potentially check for "reject" in original code CTransaction tx; vRecv >> tx; @@ -2497,6 +2543,7 @@ NAN_METHOD(HookPackets) { // ctx_to_jstx(tx, 0, o); o->Set(NanNew("tx"), jstx); } else if (strCommand == "block" && !fImporting && !fReindex) { + // XXX May be able to do prev_list asynchronously CBlock block; vRecv >> block; Local jsblock = NanNew();