Merge remote branch 'refs/remotes/svn/trunk' into svn

This commit is contained in:
Gavin Andresen 2010-12-08 20:06:44 -05:00
commit d12e53ea09
8 changed files with 57 additions and 18 deletions

View File

@ -572,7 +572,7 @@ bool CTransaction::AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs, bool* pfMi
return error("AcceptToMemoryPool() : not accepting nLockTime beyond 2038 yet"); return error("AcceptToMemoryPool() : not accepting nLockTime beyond 2038 yet");
// Rather not work on nonstandard transactions // Rather not work on nonstandard transactions
if (GetSigOpCount() > 2 || ::GetSerializeSize(*this, SER_NETWORK) < 100) if (!IsStandard() || GetSigOpCount() > 2 || ::GetSerializeSize(*this, SER_NETWORK) < 100)
return error("AcceptToMemoryPool() : nonstandard transaction"); return error("AcceptToMemoryPool() : nonstandard transaction");
// Do we already have it? // Do we already have it?
@ -2567,15 +2567,17 @@ bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
else if (strCommand == "checkorder") else if (strCommand == "checkorder")
{ {
uint256 hashReply; uint256 hashReply;
CWalletTx order; vRecv >> hashReply;
vRecv >> hashReply >> order;
if (!mapArgs.count("-allowreceivebyip") || mapArgs["-allowreceivebyip"] == "0") if (!GetBoolArg("-allowreceivebyip"))
{ {
pfrom->PushMessage("reply", hashReply, (int)2, string("")); pfrom->PushMessage("reply", hashReply, (int)2, string(""));
return true; return true;
} }
CWalletTx order;
vRecv >> order;
/// we have a chance to check the order here /// we have a chance to check the order here
// Keep giving the same key to the same ip until they use it // Keep giving the same key to the same ip until they use it
@ -2592,16 +2594,18 @@ bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
else if (strCommand == "submitorder") else if (strCommand == "submitorder")
{ {
uint256 hashReply; uint256 hashReply;
CWalletTx wtxNew; vRecv >> hashReply;
vRecv >> hashReply >> wtxNew;
wtxNew.fFromMe = false;
if (!mapArgs.count("-allowreceivebyip") || mapArgs["-allowreceivebyip"] == "0") if (!GetBoolArg("-allowreceivebyip"))
{ {
pfrom->PushMessage("reply", hashReply, (int)2); pfrom->PushMessage("reply", hashReply, (int)2);
return true; return true;
} }
CWalletTx wtxNew;
vRecv >> wtxNew;
wtxNew.fFromMe = false;
// Broadcast // Broadcast
if (!wtxNew.AcceptWalletTransaction()) if (!wtxNew.AcceptWalletTransaction())
{ {

11
main.h
View File

@ -499,6 +499,17 @@ public:
return n; return n;
} }
bool IsStandard() const
{
foreach(const CTxIn& txin, vin)
if (!txin.scriptSig.IsPushOnly())
return error("nonstandard txin: %s", txin.scriptSig.ToString().c_str());
foreach(const CTxOut& txout, vout)
if (!::IsStandard(txout.scriptPubKey))
return error("nonstandard txout: %s", txout.scriptPubKey.ToString().c_str());
return true;
}
bool IsMine() const bool IsMine() const
{ {
foreach(const CTxOut& txout, vout) foreach(const CTxOut& txout, vout)

View File

@ -997,7 +997,7 @@ bool Solver(const CScript& scriptPubKey, vector<pair<opcodetype, valtype> >& vSo
break; break;
if (opcode2 == OP_PUBKEY) if (opcode2 == OP_PUBKEY)
{ {
if (vch1.size() < 33) if (vch1.size() < 33 || vch1.size() > 120)
break; break;
vSolutionRet.push_back(make_pair(opcode2, vch1)); vSolutionRet.push_back(make_pair(opcode2, vch1));
} }
@ -1076,6 +1076,13 @@ bool Solver(const CScript& scriptPubKey, uint256 hash, int nHashType, CScript& s
} }
bool IsStandard(const CScript& scriptPubKey)
{
vector<pair<opcodetype, valtype> > vSolution;
return Solver(scriptPubKey, vSolution);
}
bool IsMine(const CScript& scriptPubKey) bool IsMine(const CScript& scriptPubKey)
{ {
CScript scriptSig; CScript scriptSig;

View File

@ -597,6 +597,23 @@ public:
} }
bool IsPushOnly() const
{
if (size() > 200)
return false;
const_iterator pc = begin();
while (pc < end())
{
opcodetype opcode;
if (!GetOp(pc, opcode))
return false;
if (opcode > OP_16)
return false;
}
return true;
}
uint160 GetBitcoinAddressHash160() const uint160 GetBitcoinAddressHash160() const
{ {
opcodetype opcode; opcodetype opcode;
@ -684,6 +701,7 @@ public:
uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType);
bool IsStandard(const CScript& scriptPubKey);
bool IsMine(const CScript& scriptPubKey); bool IsMine(const CScript& scriptPubKey);
bool ExtractPubKey(const CScript& scriptPubKey, bool fMineOnly, vector<unsigned char>& vchPubKeyRet); bool ExtractPubKey(const CScript& scriptPubKey, bool fMineOnly, vector<unsigned char>& vchPubKeyRet);
bool ExtractHash160(const CScript& scriptPubKey, uint160& hash160Ret); bool ExtractHash160(const CScript& scriptPubKey, uint160& hash160Ret);

View File

@ -25,7 +25,7 @@ class CDataStream;
class CAutoFile; class CAutoFile;
static const unsigned int MAX_SIZE = 0x02000000; static const unsigned int MAX_SIZE = 0x02000000;
static const int VERSION = 31704; static const int VERSION = 31800;
static const char* pszSubVer = ""; static const char* pszSubVer = "";

View File

@ -7,7 +7,7 @@ RequestExecutionLevel highest
# General Symbol Definitions # General Symbol Definitions
!define REGKEY "SOFTWARE\$(^Name)" !define REGKEY "SOFTWARE\$(^Name)"
!define VERSION 0.3.17 !define VERSION 0.3.18
!define COMPANY "Bitcoin project" !define COMPANY "Bitcoin project"
!define URL http://www.bitcoin.org/ !define URL http://www.bitcoin.org/
@ -42,12 +42,12 @@ Var StartMenuGroup
!insertmacro MUI_LANGUAGE English !insertmacro MUI_LANGUAGE English
# Installer attributes # Installer attributes
OutFile bitcoin-0.3.17-win32-setup.exe OutFile bitcoin-0.3.18-win32-setup.exe
InstallDir $PROGRAMFILES\Bitcoin InstallDir $PROGRAMFILES\Bitcoin
CRCCheck on CRCCheck on
XPStyle on XPStyle on
ShowInstDetails show ShowInstDetails show
VIProductVersion 0.3.17.0 VIProductVersion 0.3.18.0
VIAddVersionKey ProductName Bitcoin VIAddVersionKey ProductName Bitcoin
VIAddVersionKey ProductVersion "${VERSION}" VIAddVersionKey ProductVersion "${VERSION}"
VIAddVersionKey CompanyName "${COMPANY}" VIAddVersionKey CompanyName "${COMPANY}"

View File

@ -1,8 +1,8 @@
// Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2010 Nils Schneider
// Distributed under the MIT/X11 software license, see the accompanying // Distributed under the MIT/X11 software license, see the accompanying
// file license.txt or http://www.opensource.org/licenses/mit-license.php. // file license.txt or http://www.opensource.org/licenses/mit-license.php.
// tcatm's 4-way 128-bit SSE2 SHA-256 // 4-way 128-bit SSE2 SHA-256
#ifdef FOURWAYSSE2 #ifdef FOURWAYSSE2

View File

@ -175,7 +175,6 @@ inline int OutputDebugStringF(const char* pszFormat, ...)
va_start(arg_ptr, pszFormat); va_start(arg_ptr, pszFormat);
ret = vfprintf(fileout, pszFormat, arg_ptr); ret = vfprintf(fileout, pszFormat, arg_ptr);
va_end(arg_ptr); va_end(arg_ptr);
fflush(fileout);
} }
} }
@ -406,11 +405,11 @@ vector<unsigned char> ParseHex(const char* psz)
while (isspace(*psz)) while (isspace(*psz))
psz++; psz++;
char c = phexdigit[(unsigned char)*psz++]; char c = phexdigit[(unsigned char)*psz++];
if (c == -1) if (c == (char)-1)
break; break;
unsigned char n = (c << 4); unsigned char n = (c << 4);
c = phexdigit[(unsigned char)*psz++]; c = phexdigit[(unsigned char)*psz++];
if (c == -1) if (c == (char)-1)
break; break;
n |= c; n |= c;
vch.push_back(n); vch.push_back(n);