diff --git a/app/controllers/socket.js b/app/controllers/socket.js index 3be31a5..8f6d254 100644 --- a/app/controllers/socket.js +++ b/app/controllers/socket.js @@ -10,9 +10,6 @@ module.exports.init = function(app, io_ext) { ios.sockets.on('connection', function(socket) { socket.on('subscribe', function(topic) { socket.join(topic); - if (topic !== 'inv') { - module.exports.broadcast_address_tx(topic, 'hello world'); - } }); }); }; diff --git a/app/models/Transaction.js b/app/models/Transaction.js index fbb3f35..f432123 100644 --- a/app/models/Transaction.js +++ b/app/models/Transaction.js @@ -4,17 +4,18 @@ * Module dependencies. */ -var mongoose = require('mongoose'), - Schema = mongoose.Schema, - async = require('async'), - RpcClient = require('bitcore/RpcClient').class(), - Transaction = require('bitcore/Transaction').class(), - Address = require('bitcore/Address').class(), - BitcoreBlock= require('bitcore/Block').class(), - networks = require('bitcore/networks'), - util = require('bitcore/util/util'), - bignum = require('bignum'), - config = require('../../config/config'), +var mongoose = require('mongoose'), + Schema = mongoose.Schema, + async = require('async'), + RpcClient = require('bitcore/RpcClient').class(), + Transaction = require('bitcore/Transaction').class(), + Address = require('bitcore/Address').class(), + BitcoreBlock = require('bitcore/Block').class(), + networks = require('bitcore/networks'), + util = require('bitcore/util/util'), + bignum = require('bignum'), + config = require('../../config/config'), + sockets = require('../controllers/socket.js'), TransactionItem = require('./TransactionItem'); var CONCURRENCY = 5; @@ -94,8 +95,14 @@ TransactionSchema.statics.createFromArray = function(txs, time, next) { async.forEachLimit(txs, CONCURRENCY, function(txid, cb) { - that.explodeTransactionItems( txid, time, function(err) { + that.explodeTransactionItems( txid, time, function(err, addrs) { if (err) return next(err); + if (addrs) { + async.each(addrs, function(addr){ + sockets.broadcast_address_tx(addr, {'txid': txid}); + }); + + } that.create({txid: txid, time: time}, function(err, new_tx) { if (err && ! err.toString().match(/E11000/)) return cb(err); @@ -112,7 +119,7 @@ TransactionSchema.statics.createFromArray = function(txs, time, next) { TransactionSchema.statics.explodeTransactionItems = function(txid, time, cb) { - + var addrs = []; this.queryInfo(txid, function(err, info) { if (err || !info) return cb(err); @@ -124,7 +131,6 @@ TransactionSchema.statics.explodeTransactionItems = function(txid, time, cb) { async.forEachLimit(info.vin, CONCURRENCY, function(i, next_in) { if (i.addr && i.value) { -//console.log("Creating IN %s %d", i.addr, i.valueSat); TransactionItem.create({ txid : txid, value_sat : -1 * i.valueSat, @@ -132,6 +138,9 @@ TransactionSchema.statics.explodeTransactionItems = function(txid, time, cb) { index : i.n, ts : time, }, next_in); + if (addrs.indexOf(i.addr) === -1) { + addrs.push(i.addr); + } } else { if ( !i.coinbase ) { @@ -148,7 +157,6 @@ TransactionSchema.statics.explodeTransactionItems = function(txid, time, cb) { * TODO Support multisigs */ if (o.value && o.scriptPubKey && o.scriptPubKey.addresses && o.scriptPubKey.addresses[0]) { -//console.log("Creating OUT %s %d", o.scriptPubKey.addresses[0], o.valueSat); TransactionItem.create({ txid : txid, value_sat : o.valueSat, @@ -164,7 +172,7 @@ TransactionSchema.statics.explodeTransactionItems = function(txid, time, cb) { }, function (err) { if (err && ! err.toString().match(/E11000/)) return cb(err); - return cb(); + return cb(null, addrs); }); }); }); diff --git a/public/js/controllers/address.js b/public/js/controllers/address.js index afc5c91..c66351e 100644 --- a/public/js/controllers/address.js +++ b/public/js/controllers/address.js @@ -20,9 +20,6 @@ angular.module('insight.address').controller('AddressController', socket.on('connect', function() { socket.emit('subscribe', $routeParams.addrStr); }); - socket.on('tx', function(data) { - console.log('Incoming message:', data); - }); $scope.params = $routeParams; }]); diff --git a/public/js/controllers/transactions.js b/public/js/controllers/transactions.js index 665929a..9408862 100644 --- a/public/js/controllers/transactions.js +++ b/public/js/controllers/transactions.js @@ -1,13 +1,28 @@ 'use strict'; -angular.module('insight.transactions').controller('transactionsController', ['$scope', '$routeParams', '$location', 'Global', 'Transaction', 'TransactionsByBlock', 'TransactionsByAddress', function ($scope, $routeParams, $location, Global, Transaction, TransactionsByBlock, TransactionsByAddress) { +angular.module('insight.transactions').controller('transactionsController', + ['$scope', + '$routeParams', + '$location', + 'Global', + 'Transaction', + 'TransactionsByBlock', + 'TransactionsByAddress', + 'socket', + function ($scope, $routeParams, $location, Global, Transaction, TransactionsByBlock, TransactionsByAddress, socket) { $scope.global = Global; - $scope.findOne = function() { + + $scope.findThis = function() { + $scope.findTx($routeParams.txId); + }; + + $scope.findTx = function(txid) { Transaction.get({ - txId: $routeParams.txId + txId: txid }, function(tx) { $scope.tx = tx; + $scope.txs.push(tx); }); }; @@ -26,6 +41,12 @@ angular.module('insight.transactions').controller('transactionsController', ['$s $scope.txs = txs; }); }; + socket.on('tx', function(tx) { + console.log('Incoming message for new transaction!', tx); + $scope.findTx(tx.txid); + }); + + $scope.txs = []; }]); diff --git a/public/views/transaction.html b/public/views/transaction.html index 7ba4744..7ef3cd4 100644 --- a/public/views/transaction.html +++ b/public/views/transaction.html @@ -1,4 +1,4 @@ -
+