add rescan blockchain.
This commit is contained in:
parent
e18bfdd2fb
commit
513a7ae746
|
@ -905,6 +905,10 @@ Wallet.prototype.isMine = function(options) {
|
||||||
return bitcoindjs.walletIsMine(options || {});
|
return bitcoindjs.walletIsMine(options || {});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Wallet.prototype.rescan = function(options, callback) {
|
||||||
|
return bitcoindjs.walletRescan(options || {}, callback);
|
||||||
|
};
|
||||||
|
|
||||||
Wallet = new Wallet;
|
Wallet = new Wallet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -295,6 +295,7 @@ NAN_METHOD(WalletImportWallet);
|
||||||
NAN_METHOD(WalletChangeLabel);
|
NAN_METHOD(WalletChangeLabel);
|
||||||
NAN_METHOD(WalletDeleteAccount);
|
NAN_METHOD(WalletDeleteAccount);
|
||||||
NAN_METHOD(WalletIsMine);
|
NAN_METHOD(WalletIsMine);
|
||||||
|
NAN_METHOD(WalletRescan);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Node.js Internal Function Templates
|
* Node.js Internal Function Templates
|
||||||
|
@ -582,6 +583,15 @@ struct async_dump_wallet_data {
|
||||||
Persistent<Function> callback;
|
Persistent<Function> callback;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* async_rescan_data
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct async_rescan_data {
|
||||||
|
std::string err_msg;
|
||||||
|
Persistent<Function> callback;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read Raw DB
|
* Read Raw DB
|
||||||
*/
|
*/
|
||||||
|
@ -5386,6 +5396,80 @@ NAN_METHOD(WalletIsMine) {
|
||||||
NanReturnValue(NanNew<Boolean>(is_mine));
|
NanReturnValue(NanNew<Boolean>(is_mine));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WalletRescan()
|
||||||
|
* bitcoindjs.walletRescan(options, callback)
|
||||||
|
* Rescan blockchain
|
||||||
|
*/
|
||||||
|
|
||||||
|
NAN_METHOD(WalletRescan) {
|
||||||
|
NanScope();
|
||||||
|
|
||||||
|
if (args.Length() < 2 || !args[0]->IsObject() || !args[1]->IsFunction()) {
|
||||||
|
return NanThrowError(
|
||||||
|
"Usage: bitcoindjs.walletRescan(options, callback)");
|
||||||
|
}
|
||||||
|
|
||||||
|
async_rescan_data *data = new async_rescan_data();
|
||||||
|
|
||||||
|
//Local<Object> options = Local<Object>::Cast(args[0]);
|
||||||
|
Local<Function> callback = Local<Function>::Cast(args[1]);
|
||||||
|
|
||||||
|
data->err_msg = std::string("");
|
||||||
|
data->callback = Persistent<Function>::New(callback);
|
||||||
|
|
||||||
|
uv_work_t *req = new uv_work_t();
|
||||||
|
req->data = data;
|
||||||
|
|
||||||
|
int status = uv_queue_work(uv_default_loop(),
|
||||||
|
req, async_rescan,
|
||||||
|
(uv_after_work_cb)async_rescan_after);
|
||||||
|
|
||||||
|
assert(status == 0);
|
||||||
|
|
||||||
|
NanReturnValue(Undefined());
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
async_rescan(uv_work_t *req) {
|
||||||
|
async_rescan_data* data = static_cast<async_rescan_data*>(req->data);
|
||||||
|
// This may take a long time, do it on the libuv thread pool:
|
||||||
|
pwalletMain->ScanForWalletTransactions(chainActive.Genesis(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
async_rescan_after(uv_work_t *req) {
|
||||||
|
NanScope();
|
||||||
|
async_rescan_data* data = static_cast<async_rescan_data*>(req->data);
|
||||||
|
|
||||||
|
if (data->err_msg != "") {
|
||||||
|
Local<Value> err = Exception::Error(NanNew<String>(data->err_msg));
|
||||||
|
const unsigned argc = 1;
|
||||||
|
Local<Value> argv[argc] = { err };
|
||||||
|
TryCatch try_catch;
|
||||||
|
data->callback->Call(Context::GetCurrent()->Global(), argc, argv);
|
||||||
|
if (try_catch.HasCaught()) {
|
||||||
|
node::FatalException(try_catch);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const unsigned argc = 2;
|
||||||
|
Local<Value> argv[argc] = {
|
||||||
|
Local<Value>::New(Null()),
|
||||||
|
Local<Value>::New(True())
|
||||||
|
};
|
||||||
|
TryCatch try_catch;
|
||||||
|
data->callback->Call(Context::GetCurrent()->Global(), argc, argv);
|
||||||
|
if (try_catch.HasCaught()) {
|
||||||
|
node::FatalException(try_catch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data->callback.Dispose();
|
||||||
|
|
||||||
|
delete data;
|
||||||
|
delete req;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Conversions
|
* Conversions
|
||||||
* cblock_to_jsblock(cblock, cblock_index, jsblock, is_new)
|
* cblock_to_jsblock(cblock, cblock_index, jsblock, is_new)
|
||||||
|
@ -6059,6 +6143,7 @@ init(Handle<Object> target) {
|
||||||
NODE_SET_METHOD(target, "walletChangeLabel", WalletChangeLabel);
|
NODE_SET_METHOD(target, "walletChangeLabel", WalletChangeLabel);
|
||||||
NODE_SET_METHOD(target, "walletDeleteAccount", WalletDeleteAccount);
|
NODE_SET_METHOD(target, "walletDeleteAccount", WalletDeleteAccount);
|
||||||
NODE_SET_METHOD(target, "walletIsMine", WalletIsMine);
|
NODE_SET_METHOD(target, "walletIsMine", WalletIsMine);
|
||||||
|
NODE_SET_METHOD(target, "walletRescan", WalletRescan);
|
||||||
}
|
}
|
||||||
|
|
||||||
NODE_MODULE(bitcoindjs, init)
|
NODE_MODULE(bitcoindjs, init)
|
||||||
|
|
Loading…
Reference in New Issue