rpc: improve perf for getchaintips.
This commit is contained in:
parent
3854f04624
commit
ef8b205a38
@ -933,40 +933,24 @@ RPC.prototype._blockToJSON = co(function* _blockToJSON(entry, block, txDetails)
|
|||||||
});
|
});
|
||||||
|
|
||||||
RPC.prototype.getchaintips = co(function* getchaintips(args) {
|
RPC.prototype.getchaintips = co(function* getchaintips(args) {
|
||||||
var i, tips, orphans, prevs, result;
|
var i, hash, tips, result, entry, fork, main;
|
||||||
var orphan, entries, entry, main, fork;
|
|
||||||
|
|
||||||
if (args.help || args.length !== 0)
|
if (args.help || args.length !== 0)
|
||||||
throw new RPCError('getchaintips');
|
throw new RPCError('getchaintips');
|
||||||
|
|
||||||
tips = [];
|
tips = yield this.chain.db.getTips();
|
||||||
orphans = [];
|
|
||||||
prevs = {};
|
|
||||||
result = [];
|
result = [];
|
||||||
|
|
||||||
entries = yield this.chain.db.getEntries();
|
|
||||||
|
|
||||||
for (i = 0; i < entries.length; i++) {
|
|
||||||
entry = entries[i];
|
|
||||||
main = yield entry.isMainChain();
|
|
||||||
if (!main) {
|
|
||||||
orphans.push(entry);
|
|
||||||
prevs[entry.prevBlock] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < orphans.length; i++) {
|
|
||||||
orphan = orphans[i];
|
|
||||||
if (!prevs[orphan.hash])
|
|
||||||
tips.push(orphan);
|
|
||||||
}
|
|
||||||
|
|
||||||
tips.push(this.chain.tip);
|
|
||||||
|
|
||||||
for (i = 0; i < tips.length; i++) {
|
for (i = 0; i < tips.length; i++) {
|
||||||
entry = tips[i];
|
hash = tips[i];
|
||||||
|
entry = yield this.chain.db.get(hash);
|
||||||
|
|
||||||
|
if (!entry)
|
||||||
|
continue;
|
||||||
|
|
||||||
fork = yield this._findFork(entry);
|
fork = yield this._findFork(entry);
|
||||||
main = yield entry.isMainChain();
|
main = yield entry.isMainChain();
|
||||||
|
|
||||||
result.push({
|
result.push({
|
||||||
height: entry.height,
|
height: entry.height,
|
||||||
hash: entry.rhash,
|
hash: entry.rhash,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user