aboutsummaryrefslogtreecommitdiff
path: root/main.cpp
diff options
context:
space:
mode:
authors_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>2010-09-19 21:20:34 +0000
committers_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>2010-09-19 21:20:34 +0000
commit172f006020965ae8763a0610845c051ed1e3b522 (patch)
treea2385e218aad8f99902e4994cdc180aa9cff09c2 /main.cpp
parentefae3da41d821b12d1481de8b8e0b2e105d36ae3 (diff)
only accept transactions sent by IP address if -allowreceivebyip is specified
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@156 1a98c847-1fd6-4fd8-948a-caf3550aa51b
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp38
1 files changed, 23 insertions, 15 deletions
diff --git a/main.cpp b/main.cpp
index 5b7829e883..d41801d9e9 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1374,9 +1374,13 @@ bool CBlock::CheckBlock() const
// that can be verified before saving an orphan block.
// Size limits
- if (vtx.empty() || vtx.size() > MAX_SIZE || ::GetSerializeSize(*this, SER_NETWORK) > MAX_SIZE)
+ if (vtx.empty() || vtx.size() > MAX_BLOCK_SIZE || ::GetSerializeSize(*this, SER_NETWORK) > MAX_BLOCK_SIZE)
return error("CheckBlock() : size limits failed");
+ // Check proof of work matches claimed amount
+ if (!CheckProofOfWork(GetHash(), nBits))
+ return error("CheckBlock() : proof of work failed");
+
// Check timestamp
if (GetBlockTime() > GetAdjustedTime() + 2 * 60 * 60)
return error("CheckBlock() : block timestamp too far in the future");
@@ -1393,9 +1397,9 @@ bool CBlock::CheckBlock() const
if (!tx.CheckTransaction())
return error("CheckBlock() : CheckTransaction failed");
- // Check proof of work matches claimed amount
- if (!CheckProofOfWork(GetHash(), nBits))
- return error("CheckBlock() : proof of work failed");
+ // Check that it's not full of nonstandard transactions
+ if (GetSigOpCount() > MAX_BLOCK_SIGOPS)
+ return error("CheckBlock() : too many nonstandard transactions");
// Check merkleroot
if (hashMerkleRoot != BuildMerkleTree())
@@ -1418,13 +1422,9 @@ bool CBlock::AcceptBlock()
CBlockIndex* pindexPrev = (*mi).second;
int nHeight = pindexPrev->nHeight+1;
- // Check size
- if (nHeight > 79400 && ::GetSerializeSize(*this, SER_NETWORK) > MAX_BLOCK_SIZE)
- return error("AcceptBlock() : over size limit");
-
- // Check that it's not full of nonstandard transactions
- if (nHeight > 79400 && GetSigOpCount() > MAX_BLOCK_SIGOPS)
- return error("AcceptBlock() : too many nonstandard transactions");
+ // Check proof of work
+ if (nBits != GetNextWorkRequired(pindexPrev))
+ return error("AcceptBlock() : incorrect proof of work");
// Check timestamp against prev
if (GetBlockTime() <= pindexPrev->GetMedianTimePast())
@@ -1435,10 +1435,6 @@ bool CBlock::AcceptBlock()
if (!tx.IsFinal(nHeight, GetBlockTime()))
return error("AcceptBlock() : contains a non-final transaction");
- // Check proof of work
- if (nBits != GetNextWorkRequired(pindexPrev))
- return error("AcceptBlock() : incorrect proof of work");
-
// Check that the block chain matches the known block chain up to a checkpoint
if ((nHeight == 11111 && hash != uint256("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d")) ||
(nHeight == 33333 && hash != uint256("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6")) ||
@@ -2415,6 +2411,12 @@ bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
CWalletTx order;
vRecv >> hashReply >> order;
+ if (!mapArgs.count("-allowreceivebyip") || mapArgs["-allowreceivebyip"] == "0")
+ {
+ pfrom->PushMessage("reply", hashReply, (int)2, string(""));
+ return true;
+ }
+
/// we have a chance to check the order here
// Keep giving the same key to the same ip until they use it
@@ -2435,6 +2437,12 @@ bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
vRecv >> hashReply >> wtxNew;
wtxNew.fFromMe = false;
+ if (!mapArgs.count("-allowreceivebyip") || mapArgs["-allowreceivebyip"] == "0")
+ {
+ pfrom->PushMessage("reply", hashReply, (int)2);
+ return true;
+ }
+
// Broadcast
if (!wtxNew.AcceptWalletTransaction())
{