parent
a4dd13de15
commit
65c711b278
|
@ -35,8 +35,8 @@ module.exports = function(grunt) {
|
|||
livereload: true,
|
||||
},
|
||||
},
|
||||
js2: {
|
||||
files: ['public/src/**/*.js'],
|
||||
assets: {
|
||||
files: ['public/src/**/*.js', 'public/**/*.css'],
|
||||
tasks: ['compile'],
|
||||
options: {
|
||||
livereload: true,
|
||||
|
|
|
@ -7,8 +7,6 @@ require('classtool');
|
|||
function spec() {
|
||||
var util = require('util');
|
||||
var RpcClient = require('bitcore/RpcClient').class();
|
||||
var bitutil = require('bitcore/util/util');
|
||||
var Address = require('bitcore/Address').class();
|
||||
var Script = require('bitcore/Script').class();
|
||||
var networks = require('bitcore/networks');
|
||||
var async = require('async');
|
||||
|
@ -219,42 +217,6 @@ function spec() {
|
|||
};
|
||||
|
||||
|
||||
// TODO. replace with
|
||||
// Script.prototype.getAddrStrs if that one get merged in bitcore
|
||||
HistoricSync.prototype.getAddrStr = function(s) {
|
||||
var self = this;
|
||||
|
||||
var addrStrs = [];
|
||||
var type = s.classify();
|
||||
var addr;
|
||||
|
||||
switch(type) {
|
||||
case Script.TX_PUBKEY:
|
||||
var chunk = s.captureOne();
|
||||
addr = new Address(self.network.addressPubkey, bitutil.sha256ripe160(chunk));
|
||||
addrStrs = [ addr.toString() ];
|
||||
break;
|
||||
case Script.TX_PUBKEYHASH:
|
||||
addr = new Address(self.network.addressPubkey, s.captureOne());
|
||||
addrStrs = [ addr.toString() ];
|
||||
break;
|
||||
case Script.TX_SCRIPTHASH:
|
||||
addr = new Address(self.network.addressScript, s.captureOne());
|
||||
addrStrs = [ addr.toString() ];
|
||||
break;
|
||||
case Script.TX_MULTISIG:
|
||||
var chunks = s.capture();
|
||||
chunks.forEach(function(chunk) {
|
||||
var a = new Address(self.network.addressPubkey, bitutil.sha256ripe160(chunk));
|
||||
addrStrs.push(a.toString());
|
||||
});
|
||||
break;
|
||||
case Script.TX_UNKNOWN:
|
||||
break;
|
||||
}
|
||||
|
||||
return addrStrs;
|
||||
};
|
||||
|
||||
HistoricSync.prototype.getBlockFromFile = function(cb) {
|
||||
var self = this;
|
||||
|
@ -285,7 +247,7 @@ function spec() {
|
|||
|
||||
|
||||
var s = new Script(o.s);
|
||||
var addrs = self.getAddrStr(s);
|
||||
var addrs = self.sync.getAddrStr(s);
|
||||
|
||||
// support only for p2pubkey p2pubkeyhash and p2sh
|
||||
if (addrs.length === 1) {
|
||||
|
|
|
@ -6,6 +6,7 @@ function spec() {
|
|||
var CoinConst = require('bitcore/const');
|
||||
var coinUtil = require('bitcore/util/util');
|
||||
var Sync = require('./Sync').class();
|
||||
var Script = require('bitcore/Script').class();
|
||||
var Peer = require('bitcore/Peer').class();
|
||||
var config = require('../config/config');
|
||||
var networks = require('bitcore/networks');
|
||||
|
@ -51,8 +52,23 @@ function spec() {
|
|||
};
|
||||
|
||||
PeerSync.prototype.handleTx = function(info) {
|
||||
var self =this;
|
||||
var tx = info.message.tx.getStandardizedObject();
|
||||
console.log('[p2p_sync] Handle tx: ' + tx.hash);
|
||||
tx.time = tx.time || Math.round(new Date().getTime() / 1000);
|
||||
|
||||
var to=0;
|
||||
info.message.tx.outs.forEach( function(o) {
|
||||
var s = new Script(o.s);
|
||||
var addrs = self.sync.getAddrStr(s);
|
||||
|
||||
// support only for p2pubkey p2pubkeyhash and p2sh
|
||||
if (addrs.length === 1) {
|
||||
tx.out[to].addrStr = addrs[0];
|
||||
tx.out[to].n = to;
|
||||
}
|
||||
to++;
|
||||
});
|
||||
|
||||
this.sync.storeTxs([tx], function(err) {
|
||||
if (err) {
|
||||
|
|
44
lib/Sync.js
44
lib/Sync.js
|
@ -6,7 +6,12 @@ require('classtool');
|
|||
function spec() {
|
||||
var sockets = require('../app/controllers/socket.js');
|
||||
var BlockDb = require('./BlockDb').class();
|
||||
var bitutil = require('bitcore/util/util');
|
||||
var Address = require('bitcore/Address').class();
|
||||
var TransactionDb = require('./TransactionDb').class();
|
||||
var config = require('../config/config');
|
||||
var networks = require('bitcore/networks');
|
||||
var Script = require('bitcore/Script').class();
|
||||
var async = require('async');
|
||||
|
||||
|
||||
|
@ -18,6 +23,7 @@ function spec() {
|
|||
self.opts = opts;
|
||||
this.bDb = new BlockDb(opts);
|
||||
this.txDb = new TransactionDb(opts);
|
||||
this.network = config.network === 'testnet' ? networks.testnet: networks.livenet;
|
||||
return cb();
|
||||
};
|
||||
|
||||
|
@ -276,6 +282,44 @@ function spec() {
|
|||
return cb(err);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// TODO. replace with
|
||||
// Script.prototype.getAddrStrs if that one get merged in bitcore
|
||||
Sync.prototype.getAddrStr = function(s) {
|
||||
var self = this;
|
||||
|
||||
var addrStrs = [];
|
||||
var type = s.classify();
|
||||
var addr;
|
||||
|
||||
switch(type) {
|
||||
case Script.TX_PUBKEY:
|
||||
var chunk = s.captureOne();
|
||||
addr = new Address(self.network.addressPubkey, bitutil.sha256ripe160(chunk));
|
||||
addrStrs = [ addr.toString() ];
|
||||
break;
|
||||
case Script.TX_PUBKEYHASH:
|
||||
addr = new Address(self.network.addressPubkey, s.captureOne());
|
||||
addrStrs = [ addr.toString() ];
|
||||
break;
|
||||
case Script.TX_SCRIPTHASH:
|
||||
addr = new Address(self.network.addressScript, s.captureOne());
|
||||
addrStrs = [ addr.toString() ];
|
||||
break;
|
||||
case Script.TX_MULTISIG:
|
||||
var chunks = s.capture();
|
||||
chunks.forEach(function(chunk) {
|
||||
var a = new Address(self.network.addressPubkey, bitutil.sha256ripe160(chunk));
|
||||
addrStrs.push(a.toString());
|
||||
});
|
||||
break;
|
||||
case Script.TX_UNKNOWN:
|
||||
break;
|
||||
}
|
||||
|
||||
return addrStrs;
|
||||
};
|
||||
return Sync;
|
||||
}
|
||||
module.defineClass(spec);
|
||||
|
|
|
@ -442,13 +442,7 @@ function spec(b) {
|
|||
.write(next_out);
|
||||
},
|
||||
function (err) {
|
||||
if (err) {
|
||||
if (!err.message.match(/E11000/)) {
|
||||
console.log('ERR at TX %s: %s', tx.txid, err);
|
||||
return cb(err);
|
||||
}
|
||||
}
|
||||
return p_c();
|
||||
return p_c(err);
|
||||
});
|
||||
},
|
||||
// Parse Outputs
|
||||
|
|
|
@ -557,3 +557,24 @@ h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
|
|||
width: 20%;
|
||||
}
|
||||
|
||||
@keyframes rotateThis {
|
||||
from { transform: scale( 1 ) rotate( 0deg ); }
|
||||
to { transform: scale( 1 ) rotate( 360deg ); }
|
||||
}
|
||||
|
||||
@-webkit-keyframes rotateThis {
|
||||
from { -webkit-transform: scale( 1 ) rotate( 0deg ); }
|
||||
to { -webkit-transform: scale( 1 ) rotate( 360deg ); }
|
||||
}
|
||||
|
||||
.icon-rotate {
|
||||
animation-name: rotateThis;
|
||||
animation-duration: 2s;
|
||||
animation-iteration-count: infinite;
|
||||
animation-timing-function: linear;
|
||||
-webkit-animation-name: rotateThis;
|
||||
-webkit-animation-duration: 2s;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
-webkit-animation-timing-function: linear;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,8 +42,31 @@
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>Last Block</h2>
|
||||
<table class="table" style="table-layout: fixed" data-ng-controller="StatusController" data-ng-init="getStatus('LastBlockHash')">
|
||||
<thead data-ng-include src="'/views/includes/infoStatus.html'"> </thead>
|
||||
<tr>
|
||||
<td>Last Block Hash (Bitcoind)</td>
|
||||
<td class="text-right ellipsis"><a href="/block/{{lastblockhash}}">{{lastblockhash}}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Current Blockchain Tip(Insight)</td>
|
||||
<td class="text-right ellipsis"><a href="/block/{{syncTipHash}}">{{syncTipHash}}</a></td>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<h2>Transaction Output Set Information</h2>
|
||||
<table class="table" style="table-layout: fixed" data-ng-controller="StatusController" data-ng-init="getStatus('TxOutSetInfo')">
|
||||
|
||||
<div data-ng-controller="StatusController">
|
||||
<button data-ng-click="txoutLoading=1;getStatus('TxOutSetInfo')" class="btn btn-default" data-ng-show="!txoutsetinfo.height">
|
||||
Show Transaction Output data
|
||||
<span data-ng-show="txoutLoading" class="glyphicon glyphicon-refresh icon-rotate"></span>
|
||||
</button >
|
||||
|
||||
<table class="table" data-ng-show="txoutsetinfo.height" style="table-layout: fixed" >
|
||||
<thead data-ng-include src="'/views/includes/infoStatus.html'"> </thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
|
@ -76,23 +99,12 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h2>Last Block</h2>
|
||||
<table class="table" style="table-layout: fixed" data-ng-controller="StatusController" data-ng-init="getStatus('LastBlockHash')">
|
||||
<thead data-ng-include src="'/views/includes/infoStatus.html'"> </thead>
|
||||
<tr>
|
||||
<td>Last Block Hash (Bitcoind)</td>
|
||||
<td class="text-right ellipsis"><a href="/block/{{lastblockhash}}">{{lastblockhash}}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Current Blockchain Tip(Insight)</td>
|
||||
<td class="text-right ellipsis"><a href="/block/{{syncTipHash}}">{{syncTipHash}}</a></td>
|
||||
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!-- END OF COL-8 -->
|
||||
|
||||
|
||||
|
||||
<div class="col-xs-12 col-md-4 col-gray">
|
||||
<h2>Bitcoin node information</h2>
|
||||
<table class="table" data-ng-controller="StatusController" data-ng-init="getStatus('Info')">
|
||||
|
@ -118,11 +130,7 @@
|
|||
<td>Connections to other nodes</td>
|
||||
<td class="text-right">{{info.connections}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Proxy setting</td>
|
||||
<td class="text-right">{{info.proxy}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<tr>
|
||||
<td>Mining Difficulty</td>
|
||||
<td class="text-right">{{info.difficulty}}</td>
|
||||
</tr>
|
||||
|
@ -131,16 +139,8 @@
|
|||
<td class="text-right">{{info.testnet}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Keypool Oldest Date</td>
|
||||
<td class="text-right">{{info.keypoololdest*1000 | date:'medium' }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Keypool Size</td>
|
||||
<td class="text-right">{{info.keypoolsize}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Default Transaction Fee (BTC)</td>
|
||||
<td class="text-right">{{info.paytxfee}}</td>
|
||||
<td>Proxy setting</td>
|
||||
<td class="text-right">{{info.proxy}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Info Errors</td>
|
||||
|
|
|
@ -35,8 +35,6 @@ async.series([
|
|||
function(cb) {
|
||||
|
||||
if (typeof program.smart === 'undefined' || parseInt(program.smart) ) {
|
||||
|
||||
console.log('[sync.js.38]'); //TODO
|
||||
historicSync.smartImport({
|
||||
destroy: program.destroy,
|
||||
},cb);
|
||||
|
|
Loading…
Reference in New Issue