more prev_list plans - make the async gods pleased.

This commit is contained in:
Christopher Jeffrey 2014-11-06 13:24:38 -08:00
parent 28cbb06c14
commit 3a8ded71b3
1 changed files with 56 additions and 9 deletions

View File

@ -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<Function> 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<Object> jsblock = NanNew<Object>();
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<Object> jsprev = NanNew<Object>();
jsprev->Set(NanNew<String>("address"), NanNew<String>(cur->addr));
jsprev->Set(NanNew<String>("value"), NanNew<Number>(cur->val));
jsblock->tx->Get(i)->vin->Get(j)->Set(NanNew<String>("prev"), jsprev);
delete cur;
cur = next;
}
}
#endif
const unsigned argc = 2;
Local<Value> argv[argc] = {
Local<Value>::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<Object> jsprev = NanNew<Object>();
jsprev->Set(NanNew<String>("address"), NanNew<String>(cur->addr));
@ -2489,6 +2534,7 @@ NAN_METHOD(HookPackets) {
o->Set(NanNew<String>("fromHeight"), NanNew<Number>(pindex ? pindex->nHeight : -1));
o->Set(NanNew<String>("toHash"), NanNew<String>(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<String>("tx"), jstx);
} else if (strCommand == "block" && !fImporting && !fReindex) {
// XXX May be able to do prev_list asynchronously
CBlock block;
vRecv >> block;
Local<Object> jsblock = NanNew<Object>();