Merge pull request #234 from braydonf/sendtxevent

Bindings: Send transaction emit "tx" events.
This commit is contained in:
Chris Kleeschulte 2015-09-16 10:35:10 -04:00
commit 576d1712e4
2 changed files with 46 additions and 0 deletions

View File

@ -291,6 +291,24 @@ describe('Daemon Binding Functionality', function() {
}).should.throw('\x10: mandatory-script-verify-flag-failed (Operation not valid with the current stack size)');
});
it('will emit "tx" events', function(done) {
var tx = bitcore.Transaction();
tx.from(utxos[2]);
tx.change(privateKey.toAddress());
tx.to(destKey.toAddress(), utxos[2].amount * 1e8 - 1000);
tx.sign(bitcore.PrivateKey.fromWIF(utxos[2].privateKeyWIF));
var serialized = tx.serialize();
bitcoind.on('tx', function(result) {
result.buffer.toString('hex').should.equal(serialized);
result.hash.should.equal(tx.hash);
result.mempool.should.equal(true);
done();
});
bitcoind.sendTransaction(serialized);
});
});
describe('fee estimation', function() {

View File

@ -96,6 +96,7 @@ init(Handle<Object>);
static std::vector<CDataStream> txmon_messages;
static uv_async_t txmon_async;
static Eternal<Function> txmon_callback;
static bool txmon_callback_available;
static volatile bool shutdown_complete = false;
static char *g_data_dir = NULL;
@ -219,6 +220,7 @@ NAN_METHOD(StartTxMon) {
Local<Function> callback = Local<Function>::Cast(args[0]);
Eternal<Function> cb(isolate, callback);
txmon_callback = cb;
txmon_callback_available = true;
CNodeSignals& nodeSignals = GetNodeSignals();
nodeSignals.ProcessMessages.connect(&scan_messages, boost::signals2::at_front);
@ -1499,6 +1501,32 @@ NAN_METHOD(SendTransaction) {
// Relay the transaction connect peers
RelayTransaction(tx);
// Notify any listeners about the transaction
if(txmon_callback_available) {
Local<Array> results = Array::New(isolate);
Local<Object> obj = NanNew<Object>();
CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
ssTx << tx;
std::string stx = ssTx.str();
Local<Value> txBuffer = node::Buffer::New(isolate, stx.c_str(), stx.size());
obj->Set(NanNew<String>("buffer"), txBuffer);
obj->Set(NanNew<String>("hash"), NanNew<String>(hashTx.GetHex()));
obj->Set(NanNew<String>("mempool"), NanNew<Boolean>(true));
results->Set(0, obj);
const unsigned argc = 1;
Local<Value> argv[argc] = {
Local<Value>::New(isolate, results)
};
Local<Function> cb = txmon_callback.Get(isolate);
cb->Call(isolate->GetCurrentContext()->Global(), argc, argv);
}
NanReturnValue(Local<Value>::New(isolate, NanNew<String>(hashTx.GetHex())));
}