Merge pull request #234 from braydonf/sendtxevent
Bindings: Send transaction emit "tx" events.
This commit is contained in:
commit
576d1712e4
|
@ -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)');
|
}).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() {
|
describe('fee estimation', function() {
|
||||||
|
|
|
@ -96,6 +96,7 @@ init(Handle<Object>);
|
||||||
static std::vector<CDataStream> txmon_messages;
|
static std::vector<CDataStream> txmon_messages;
|
||||||
static uv_async_t txmon_async;
|
static uv_async_t txmon_async;
|
||||||
static Eternal<Function> txmon_callback;
|
static Eternal<Function> txmon_callback;
|
||||||
|
static bool txmon_callback_available;
|
||||||
|
|
||||||
static volatile bool shutdown_complete = false;
|
static volatile bool shutdown_complete = false;
|
||||||
static char *g_data_dir = NULL;
|
static char *g_data_dir = NULL;
|
||||||
|
@ -219,6 +220,7 @@ NAN_METHOD(StartTxMon) {
|
||||||
Local<Function> callback = Local<Function>::Cast(args[0]);
|
Local<Function> callback = Local<Function>::Cast(args[0]);
|
||||||
Eternal<Function> cb(isolate, callback);
|
Eternal<Function> cb(isolate, callback);
|
||||||
txmon_callback = cb;
|
txmon_callback = cb;
|
||||||
|
txmon_callback_available = true;
|
||||||
|
|
||||||
CNodeSignals& nodeSignals = GetNodeSignals();
|
CNodeSignals& nodeSignals = GetNodeSignals();
|
||||||
nodeSignals.ProcessMessages.connect(&scan_messages, boost::signals2::at_front);
|
nodeSignals.ProcessMessages.connect(&scan_messages, boost::signals2::at_front);
|
||||||
|
@ -1499,6 +1501,32 @@ NAN_METHOD(SendTransaction) {
|
||||||
// Relay the transaction connect peers
|
// Relay the transaction connect peers
|
||||||
RelayTransaction(tx);
|
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())));
|
NanReturnValue(Local<Value>::New(isolate, NanNew<String>(hashTx.GetHex())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue