diff options
| author | Gavin Andresen <[email protected]> | 2011-09-26 06:21:13 -0700 |
|---|---|---|
| committer | Gavin Andresen <[email protected]> | 2011-09-26 06:21:13 -0700 |
| commit | ee1d6e4ed0a931defc6f6273cc67a0a3e980940f (patch) | |
| tree | e2f38571215752c09136205620785521e2d93057 /src/main.cpp | |
| parent | Bump version to 0.4.1 (diff) | |
| parent | Skip verifying transaction signatures during initial block-chain download (diff) | |
| download | discoin-ee1d6e4ed0a931defc6f6273cc67a0a3e980940f.tar.xz discoin-ee1d6e4ed0a931defc6f6273cc67a0a3e980940f.zip | |
Merge pull request #492 from gavinandresen/fasterinitialdownload
Skip verifying transaction signatures during initial block-chain download
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/main.cpp b/src/main.cpp index 434c8e848..be6fc9c53 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -810,6 +810,9 @@ bool CTransaction::ConnectInputs(CTxDB& txdb, map<uint256, CTxIndex>& mapTestPoo CBlockIndex* pindexBlock, int64& nFees, bool fBlock, bool fMiner, int64 nMinFee) { // Take over previous transactions' spent pointers + // fBlock is true when this is called from AcceptBlock when a new best-block is added to the blockchain + // fMiner is true when called from the internal bitcoin miner + // ... both are false when called from CTransaction::AcceptToMemoryPool if (!IsCoinBase()) { int64 nValueIn = 0; @@ -863,9 +866,13 @@ bool CTransaction::ConnectInputs(CTxDB& txdb, map<uint256, CTxIndex>& mapTestPoo if (pindex->nBlockPos == txindex.pos.nBlockPos && pindex->nFile == txindex.pos.nFile) return DoS(10, error("ConnectInputs() : tried to spend coinbase at depth %d", pindexBlock->nHeight - pindex->nHeight)); - // Verify signature - if (!VerifySignature(txPrev, *this, i)) - return DoS(100,error("ConnectInputs() : %s VerifySignature failed", GetHash().ToString().substr(0,10).c_str())); + // Skip ECDSA signature verification when connecting blocks (fBlock=true) during initial download + // (before the last blockchain checkpoint). This is safe because block merkle hashes are + // still computed and checked, and any change will be caught at the next checkpoint. + if (!(fBlock && IsInitialBlockDownload())) + // Verify signature + if (!VerifySignature(txPrev, *this, i)) + return DoS(100,error("ConnectInputs() : %s VerifySignature failed", GetHash().ToString().substr(0,10).c_str())); // Check for conflicts (double-spend) // This doesn't trigger the DoS code on purpose; if it did, it would make it easier |