first pass at GetTx.
This commit is contained in:
parent
e88f535815
commit
da860fc705
@ -870,6 +870,124 @@ async_get_block_after(uv_work_t *req) {
|
|||||||
delete req;
|
delete req;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/**
|
||||||
|
* GetTx(hash, callback)
|
||||||
|
* bitcoind.getTx(hash, callback)
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ~/bitcoin/src/rpcwallet.cpp
|
||||||
|
// void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDepth, bool fLong, Array& ret)
|
||||||
|
|
||||||
|
NAN_METHOD(GetTx) {
|
||||||
|
NanScope();
|
||||||
|
|
||||||
|
if (args.Length() < 2
|
||||||
|
|| !args[0]->IsString()
|
||||||
|
|| !args[1]->IsFunction()) {
|
||||||
|
return NanThrowError(
|
||||||
|
"Usage: bitcoindjs.getTx(hash, callback)");
|
||||||
|
}
|
||||||
|
|
||||||
|
String::Utf8Value hash(args[0]->ToString());
|
||||||
|
Local<Function> callback = Local<Function>::Cast(args[1]);
|
||||||
|
|
||||||
|
Persistent<Function> cb;
|
||||||
|
cb = Persistent<Function>::New(callback);
|
||||||
|
|
||||||
|
const CWalletTx& wtx = pwalletMain->mapWallet[hash];
|
||||||
|
|
||||||
|
int64_t nFee;
|
||||||
|
string strSentAccount;
|
||||||
|
list<pair<CTxDestination, int64_t> > listReceived;
|
||||||
|
list<pair<CTxDestination, int64_t> > listSent;
|
||||||
|
|
||||||
|
wtx.GetAmounts(listReceived, listSent, nFee, strSentAccount);
|
||||||
|
|
||||||
|
// Sent
|
||||||
|
if (!listSent.empty() || nFee != 0) {
|
||||||
|
BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64_t)& s, listSent) {
|
||||||
|
Object entry;
|
||||||
|
entry.push_back(Pair("account", strSentAccount));
|
||||||
|
MaybePushAddress(entry, s.first);
|
||||||
|
entry.push_back(Pair("category", "send"));
|
||||||
|
entry.push_back(Pair("amount", ValueFromAmount(-s.second)));
|
||||||
|
entry.push_back(Pair("fee", ValueFromAmount(-nFee)));
|
||||||
|
if (fLong)
|
||||||
|
WalletTxToJSON(wtx, entry);
|
||||||
|
ret.push_back(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Received
|
||||||
|
if (listReceived.size() > 0 && wtx.GetDepthInMainChain() >= nMinDepth) {
|
||||||
|
BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64_t)& r, listReceived) {
|
||||||
|
string account;
|
||||||
|
if (pwalletMain->mapAddressBook.count(r.first)) {
|
||||||
|
account = pwalletMain->mapAddressBook[r.first].name;
|
||||||
|
}
|
||||||
|
Object entry;
|
||||||
|
entry.push_back(Pair("account", account));
|
||||||
|
MaybePushAddress(entry, r.first);
|
||||||
|
if (wtx.IsCoinBase()) {
|
||||||
|
if (wtx.GetDepthInMainChain() < 1) {
|
||||||
|
entry.push_back(Pair("category", "orphan"));
|
||||||
|
} else if (wtx.GetBlocksToMaturity() > 0) {
|
||||||
|
entry.push_back(Pair("category", "immature"));
|
||||||
|
} else {
|
||||||
|
entry.push_back(Pair("category", "generate"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
entry.push_back(Pair("category", "receive"));
|
||||||
|
}
|
||||||
|
entry.push_back(Pair("amount", ValueFromAmount(r.second)));
|
||||||
|
if (fLong) {
|
||||||
|
WalletTxToJSON(wtx, entry);
|
||||||
|
}
|
||||||
|
ret.push_back(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const unsigned argc = 2;
|
||||||
|
Local<Value> argv[argc] = {
|
||||||
|
Local<Value>::New(Null()),
|
||||||
|
Local<Value>::New(obj)
|
||||||
|
};
|
||||||
|
TryCatch try_catch;
|
||||||
|
cb->Call(Context::GetCurrent()->Global(), argc, argv);
|
||||||
|
if (try_catch.HasCaught()) {
|
||||||
|
node::FatalException(try_catch);
|
||||||
|
}
|
||||||
|
|
||||||
|
cb.Dispose();
|
||||||
|
|
||||||
|
NanReturnValue(Undefined());
|
||||||
|
}
|
||||||
|
|
||||||
|
void WalletTxToJSON(const CWalletTx& wtx, Object& entry) {
|
||||||
|
int confirms = wtx.GetDepthInMainChain();
|
||||||
|
entry.push_back(Pair("confirmations", confirms));
|
||||||
|
if (wtx.IsCoinBase())
|
||||||
|
entry.push_back(Pair("generated", true));
|
||||||
|
if (confirms > 0)
|
||||||
|
{
|
||||||
|
entry.push_back(Pair("blockhash", wtx.hashBlock.GetHex()));
|
||||||
|
entry.push_back(Pair("blockindex", wtx.nIndex));
|
||||||
|
entry.push_back(Pair("blocktime", (boost::int64_t)(mapBlockIndex[wtx.hashBlock]->nTime)));
|
||||||
|
}
|
||||||
|
uint256 hash = wtx.GetHash();
|
||||||
|
entry.push_back(Pair("txid", hash.GetHex()));
|
||||||
|
Array conflicts;
|
||||||
|
BOOST_FOREACH(const uint256& conflict, wtx.GetConflicts())
|
||||||
|
conflicts.push_back(conflict.GetHex());
|
||||||
|
entry.push_back(Pair("walletconflicts", conflicts));
|
||||||
|
entry.push_back(Pair("time", (boost::int64_t)wtx.GetTxTime()));
|
||||||
|
entry.push_back(Pair("timereceived", (boost::int64_t)wtx.nTimeReceived));
|
||||||
|
BOOST_FOREACH(const PAIRTYPE(string,string)& item, wtx.mapValue)
|
||||||
|
entry.push_back(Pair(item.first, item.second));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Init
|
* Init
|
||||||
*/
|
*/
|
||||||
@ -882,6 +1000,9 @@ init(Handle<Object> target) {
|
|||||||
NODE_SET_METHOD(target, "stopping", IsStopping);
|
NODE_SET_METHOD(target, "stopping", IsStopping);
|
||||||
NODE_SET_METHOD(target, "stopped", IsStopped);
|
NODE_SET_METHOD(target, "stopped", IsStopped);
|
||||||
NODE_SET_METHOD(target, "getBlock", GetBlock);
|
NODE_SET_METHOD(target, "getBlock", GetBlock);
|
||||||
|
#if 0
|
||||||
|
NODE_SET_METHOD(target, "getTx", GetTx);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
NODE_MODULE(bitcoindjs, init)
|
NODE_MODULE(bitcoindjs, init)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user