From e65f6e26c3ef841d95995dbb43605488635e6ebb Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sun, 9 Jul 2017 13:06:03 -0700 Subject: [PATCH] chain: remove isCoinbase calls. --- lib/blockchain/chain.js | 10 ++++++---- lib/blockchain/chaindb.js | 9 +++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/blockchain/chain.js b/lib/blockchain/chain.js index 6f564a7c..3f273405 100644 --- a/lib/blockchain/chain.js +++ b/lib/blockchain/chain.js @@ -553,9 +553,11 @@ Chain.prototype.verifyInputs = async function verifyInputs(block, prev, state) { return view; // Check all transactions - for (let tx of block.txs) { + for (let i = 0; i < block.txs.length; i++) { + let tx = block.txs[i]; + // Ensure tx is not double spending an output. - if (!tx.isCoinbase()) { + if (i > 0) { if (!(await view.spendInputs(this.db, tx))) { assert(!historical, 'BUG: Spent inputs in historical data!'); throw new VerifyError(block, @@ -573,7 +575,7 @@ Chain.prototype.verifyInputs = async function verifyInputs(block, prev, state) { } // Verify sequence locks. - if (!tx.isCoinbase() && tx.version >= 2) { + if (i > 0 && tx.version >= 2) { let valid = await this.verifyLocks(prev, tx, view, state.lockFlags); if (!valid) { @@ -595,7 +597,7 @@ Chain.prototype.verifyInputs = async function verifyInputs(block, prev, state) { } // Contextual sanity checks. - if (!tx.isCoinbase()) { + if (i > 0) { let [fee, reason, score] = tx.checkInputs(view, height); if (fee === -1) { diff --git a/lib/blockchain/chaindb.js b/lib/blockchain/chaindb.js index beec2e93..ec1e5962 100644 --- a/lib/blockchain/chaindb.js +++ b/lib/blockchain/chaindb.js @@ -1230,7 +1230,8 @@ ChainDB.prototype.scan = async function scan(start, filter, iter) { 'Scanning block %s (%d).', entry.rhash(), entry.height); - for (let tx of block.txs) { + for (let i = 0; i < block.txs.length; i++) { + let tx = block.txs[i]; let found = false; for (let i = 0; i < tx.outputs.length; i++) { @@ -1252,7 +1253,7 @@ ChainDB.prototype.scan = async function scan(start, filter, iter) { continue; } - if (tx.isCoinbase()) + if (i === 0) continue; for (let {prevout} of tx.inputs) { @@ -1701,7 +1702,7 @@ ChainDB.prototype.connectBlock = async function connectBlock(entry, block, view) for (let i = 0; i < block.txs.length; i++) { let tx = block.txs[i]; - if (!tx.isCoinbase()) { + if (i > 0) { for (let input of tx.inputs) this.pending.spend(view.getOutput(input)); } @@ -1752,7 +1753,7 @@ ChainDB.prototype.disconnectBlock = async function disconnectBlock(entry, block) for (let i = block.txs.length - 1; i >= 0; i--) { let tx = block.txs[i]; - if (!tx.isCoinbase()) { + if (i > 0) { await view.ensureInputs(this, tx); for (let j = tx.inputs.length - 1; j >= 0; j--) {