fix standalone p2p
This commit is contained in:
parent
9edf1afcb9
commit
94edb188d0
|
@ -118,9 +118,10 @@ exports.list = function(req, res) {
|
||||||
length: allblocks.length,
|
length: allblocks.length,
|
||||||
pagination: {
|
pagination: {
|
||||||
next: next,
|
next: next,
|
||||||
prev: prev,
|
prev: prev,
|
||||||
current: dateStr,
|
currentTs: lte-1,
|
||||||
isToday: isToday
|
current: dateStr,
|
||||||
|
isToday: isToday
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -62,21 +62,23 @@ function spec() {
|
||||||
db.fromAddr(self.addrStr, function(err,txOut){
|
db.fromAddr(self.addrStr, function(err,txOut){
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
txOut.forEach(function(txItem){
|
txOut.forEach(function(txItem){
|
||||||
var v = txItem.value_sat;
|
|
||||||
|
|
||||||
self.totalReceivedSat += v;
|
if (txItem.isConfirmed) {
|
||||||
self.transactions.push(txItem.txid);
|
var v = txItem.value_sat;
|
||||||
if (! txItem.spendTxId) {
|
self.totalReceivedSat += v;
|
||||||
// unspent
|
self.transactions.push(txItem.txid);
|
||||||
self.balanceSat += v;
|
if (! txItem.spendTxId || !txItem.spendIsConfirmed) {
|
||||||
self.txApperances +=1;
|
// unspent
|
||||||
}
|
self.balanceSat += v;
|
||||||
else {
|
self.txApperances +=1;
|
||||||
// spent
|
}
|
||||||
self.totalSentSat += v;
|
else {
|
||||||
self.transactions.push(txItem.spendTxId);
|
// spent
|
||||||
self.txApperances +=2;
|
self.totalSentSat += v;
|
||||||
}
|
self.transactions.push(txItem.spendTxId);
|
||||||
|
self.txApperances +=2;
|
||||||
|
}
|
||||||
|
};
|
||||||
});
|
});
|
||||||
return cb();
|
return cb();
|
||||||
});
|
});
|
||||||
|
|
|
@ -7,8 +7,8 @@ txindex=1
|
||||||
#rpcallowip=192.168.1.*
|
#rpcallowip=192.168.1.*
|
||||||
#rpcallowip='192.168.1.*'
|
#rpcallowip='192.168.1.*'
|
||||||
#rpcallowip=127.0.0.1
|
#rpcallowip=127.0.0.1
|
||||||
|
#rpcallowip=*
|
||||||
|
|
||||||
rpcallowip=*
|
port=18333
|
||||||
|
|
||||||
rpcport=18332
|
rpcport=18332
|
||||||
testnet=3
|
testnet=3
|
||||||
|
|
|
@ -85,7 +85,6 @@ function spec() {
|
||||||
this.sync.storeBlock({
|
this.sync.storeBlock({
|
||||||
'hash': blockHash,
|
'hash': blockHash,
|
||||||
'tx': tx_hashes,
|
'tx': tx_hashes,
|
||||||
// TODO NEXT BLOCK / PREV BLOCK?
|
|
||||||
},
|
},
|
||||||
function(err) {
|
function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
|
@ -125,8 +125,7 @@ console.log('[Sync.js.109] WARN: Reach reog depth limit'); //TODO
|
||||||
Sync.prototype.storeTxs = function(txs, cb) {
|
Sync.prototype.storeTxs = function(txs, cb) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
// TODO
|
self.txDb.createFromArray(txs, null, function(err, inserted_txs, updated_addrs) {
|
||||||
self.txDb.createFromTxs(txs, function(err, inserted_txs, updated_addrs) {
|
|
||||||
if (err) return cb(err);
|
if (err) return cb(err);
|
||||||
|
|
||||||
self._handleBroadcast(null, inserted_txs, updated_addrs);
|
self._handleBroadcast(null, inserted_txs, updated_addrs);
|
||||||
|
|
|
@ -185,12 +185,30 @@ function spec(b) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TransactionDb.prototype.fillConfirmations = function(o, cb) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
self.isConfirmed(o.txid, function(err,is) {
|
||||||
|
if (err) return cb(err);
|
||||||
|
|
||||||
|
o.isConfirmed = is;
|
||||||
|
if (!o.spendTxId) return cb();
|
||||||
|
|
||||||
|
self.isConfirmed(o.spendTxId, function(err,is) {
|
||||||
|
if (err) return cb(err);
|
||||||
|
|
||||||
|
o.spendIsConfirmed = is;
|
||||||
|
return cb();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
TransactionDb.prototype.fromAddr = function(addr, cb) {
|
TransactionDb.prototype.fromAddr = function(addr, cb) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
var k = ADDR_ROOT + addr;
|
var k = ADDR_ROOT + addr;
|
||||||
var ret=[];
|
var ret=[];
|
||||||
|
|
||||||
//
|
|
||||||
db.createReadStream({start: k, end: k + '~'})
|
db.createReadStream({start: k, end: k + '~'})
|
||||||
.on('data', function (data) {
|
.on('data', function (data) {
|
||||||
var k = data.key.split('-');
|
var k = data.key.split('-');
|
||||||
|
@ -221,7 +239,11 @@ function spec(b) {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
function(err) {
|
function(err) {
|
||||||
return cb(err,ret);
|
async.each(ret, function(o, e_c){
|
||||||
|
self.fillConfirmations(o,e_c);
|
||||||
|
},function(err) {
|
||||||
|
return cb(err,ret);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -368,6 +390,45 @@ function spec(b) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
TransactionDb.prototype.deleteConfirmation = function(txId, blockHash, c) {
|
||||||
|
if (!blockHash) return c();
|
||||||
|
|
||||||
|
db.put(ROOT + txId + '-' + blockHash, 0, function(err) {
|
||||||
|
return c(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
TransactionDb.prototype.addConfirmation = function(txId, blockHash, c) {
|
||||||
|
if (!blockHash) return c();
|
||||||
|
|
||||||
|
db.put(ROOT + txId + '-' + blockHash, 1, function(err) {
|
||||||
|
return c(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// This slowdown addr balance calculation 100%
|
||||||
|
TransactionDb.prototype.isConfirmed = function(txId, c) {
|
||||||
|
var k = ROOT + txId;
|
||||||
|
var ret = false;
|
||||||
|
|
||||||
|
db.createReadStream({start: k, end: k + '~'})
|
||||||
|
.on('data', function (data) {
|
||||||
|
if (data.value === '1') ret = true;
|
||||||
|
})
|
||||||
|
.on('error', function (err) {
|
||||||
|
return c(err);
|
||||||
|
})
|
||||||
|
.on('end', function (err) {
|
||||||
|
|
||||||
|
return c(err,ret);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// txs can be a [hashes] or [txObjects]
|
||||||
TransactionDb.prototype.createFromArray = function(txs, blockHash, next) {
|
TransactionDb.prototype.createFromArray = function(txs, blockHash, next) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
@ -388,21 +449,23 @@ function spec(b) {
|
||||||
if (!inInfo) return each_cb(err);
|
if (!inInfo) return each_cb(err);
|
||||||
|
|
||||||
self.add(inInfo, function(err) {
|
self.add(inInfo, function(err) {
|
||||||
if (err || !blockHash) return each_cb(err);
|
if (err) return each_cb(err);
|
||||||
|
|
||||||
db.put(ROOT + t + '-' + blockHash, 1, function(err) {
|
// This could mean that the TX was mined since we first received.
|
||||||
return each_cb(err);
|
if (blockHash && inInfo.blockhash !== blockHash)
|
||||||
});
|
console.log('WARN in tx %s: different blockHashses: %s vs %s',
|
||||||
|
t, blockHash, inInfo.blockhash);
|
||||||
|
insertedTxs.push(t);
|
||||||
|
|
||||||
|
return self.addConfirmation(t,inInfo.blockhash, each_cb);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.add(t, function(err) {
|
self.add(t, function(err) {
|
||||||
if (err) return each_cb(err);
|
if (err || !blockHash) return each_cb(err);
|
||||||
|
|
||||||
db.put(ROOT + t.txid + '-' + blockHash, 1, function(err) {
|
return self.addConfirmation(t,blockHash, each_cb);
|
||||||
return each_cb(err);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -412,7 +475,6 @@ function spec(b) {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// txs can be a [hashes] or [txObjects]
|
|
||||||
TransactionDb.prototype.createFromBlock = function(b, next) {
|
TransactionDb.prototype.createFromBlock = function(b, next) {
|
||||||
var self = this;
|
var self = this;
|
||||||
if (!b || !b.tx) return next();
|
if (!b || !b.tx) return next();
|
||||||
|
|
|
@ -16,6 +16,14 @@ angular.module('insight.blocks').controller('BlocksController',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$scope.humanSince = function(time) {
|
||||||
|
var m = moment.unix(time).startOf('day');
|
||||||
|
var b = moment().startOf('day');
|
||||||
|
return m.max().from(b);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
$scope.list = function() {
|
$scope.list = function() {
|
||||||
$scope.loading = true;
|
$scope.loading = true;
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,15 @@
|
||||||
<h3>Blocks <br> mined on:</h3>
|
<h3>Blocks <br> mined on:</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="lead text-center m20v">{{pagination.current}}</p>
|
<p class="lead text-center m20v">{{pagination.current}} UTC</p>
|
||||||
|
<p class="lead text-center m20v" data-ng-show="loading"> </p>
|
||||||
|
<p class="text-center m20v" data-ng-show="pagination.isToday && !loading">Today</p>
|
||||||
|
<p class="text-center m20v" data-ng-show="!pagination.isToday && !loading">{{humanSince(pagination.currentTs)}}
|
||||||
|
<p class="text-center m20v" data-ng-show="loading"> </p>
|
||||||
|
|
||||||
<div class="m50v text-center">
|
<div class="m50v text-center">
|
||||||
<a class="btn btn-primary" href="/blocks-date/{{pagination.prev}}"><small>← {{pagination.prev}}</small></a>
|
<a class="btn btn-primary" href="/blocks-date/{{pagination.prev}}"><small>← {{pagination.prev}}</small></a>
|
||||||
<a class="btn btn-primary" href="/blocks-date/{{pagination.next}}" data-ng-disabled="pagination.isToday"><small>{{pagination.next}} →</small></a>
|
<a class="btn btn-primary" href="/blocks-date/{{pagination.next}}" data-ng-show="!pagination.isToday"><small>{{pagination.next}} →</small></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-md-9 col-md-offset-3">
|
<div class="col-xs-12 col-md-9 col-md-offset-3">
|
||||||
|
|
|
@ -37,8 +37,9 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"addr": "mgqvRGJMwR9JU5VhJ3x9uX9MTkzTsmmDgQ",
|
"addr": "mgqvRGJMwR9JU5VhJ3x9uX9MTkzTsmmDgQ",
|
||||||
"txApperances": 27,
|
"txApperances": 28,
|
||||||
"balance": 5.1
|
"balance": 0,
|
||||||
|
"totalReceived": 54.81284116
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"addr": "mzW2hdZN2um7WBvTDerdahKqRgj3md9C29",
|
"addr": "mzW2hdZN2um7WBvTDerdahKqRgj3md9C29",
|
||||||
|
|
|
@ -14,7 +14,12 @@ program
|
||||||
.parse(process.argv);
|
.parse(process.argv);
|
||||||
|
|
||||||
var ps = new PeerSync();
|
var ps = new PeerSync();
|
||||||
ps.init(program);
|
ps.init(program, function(err){
|
||||||
ps.run();
|
if (err) {
|
||||||
|
console.log(err);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
ps.run();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue