Browse Source

IsStandard() check for CScripts: only relay/include in blocks CScripts we can understand.

git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@197 1a98c847-1fd6-4fd8-948a-caf3550aa51b
tags/v0.15.1
gavinandresen 10 years ago
parent
commit
a206a23980
6 changed files with 49 additions and 11 deletions
  1. 12
    8
      main.cpp
  2. 11
    0
      main.h
  3. 7
    0
      script.cpp
  4. 16
    0
      script.h
  5. 1
    1
      serialize.h
  6. 2
    2
      sha256.cpp

+ 12
- 8
main.cpp View File

@@ -572,7 +572,7 @@ bool CTransaction::AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs, bool* pfMi
return error("AcceptToMemoryPool() : not accepting nLockTime beyond 2038 yet");

// 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");

// Do we already have it?
@@ -2567,15 +2567,17 @@ bool ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
else if (strCommand == "checkorder")
{
uint256 hashReply;
CWalletTx order;
vRecv >> hashReply >> order;
vRecv >> hashReply;

if (!mapArgs.count("-allowreceivebyip") || mapArgs["-allowreceivebyip"] == "0")
if (!GetBoolArg("-allowreceivebyip"))
{
pfrom->PushMessage("reply", hashReply, (int)2, string(""));
return true;
}

CWalletTx order;
vRecv >> order;

/// we have a chance to check the order here

// 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")
{
uint256 hashReply;
CWalletTx wtxNew;
vRecv >> hashReply >> wtxNew;
wtxNew.fFromMe = false;
vRecv >> hashReply;

if (!mapArgs.count("-allowreceivebyip") || mapArgs["-allowreceivebyip"] == "0")
if (!GetBoolArg("-allowreceivebyip"))
{
pfrom->PushMessage("reply", hashReply, (int)2);
return true;
}

CWalletTx wtxNew;
vRecv >> wtxNew;
wtxNew.fFromMe = false;

// Broadcast
if (!wtxNew.AcceptWalletTransaction())
{

+ 11
- 0
main.h View File

@@ -499,6 +499,17 @@ public:
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
{
foreach(const CTxOut& txout, vout)

+ 7
- 0
script.cpp View File

@@ -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)
{
CScript scriptSig;

+ 16
- 0
script.h View File

@@ -597,6 +597,21 @@ public:
}


bool IsPushOnly() const
{
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
{
opcodetype opcode;
@@ -684,6 +699,7 @@ public:


uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType);
bool IsStandard(const CScript& scriptPubKey);
bool IsMine(const CScript& scriptPubKey);
bool ExtractPubKey(const CScript& scriptPubKey, bool fMineOnly, vector<unsigned char>& vchPubKeyRet);
bool ExtractHash160(const CScript& scriptPubKey, uint160& hash160Ret);

+ 1
- 1
serialize.h View File

@@ -25,7 +25,7 @@ class CDataStream;
class CAutoFile;
static const unsigned int MAX_SIZE = 0x02000000;

static const int VERSION = 31704;
static const int VERSION = 31705;
static const char* pszSubVer = "";



+ 2
- 2
sha256.cpp 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
// 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


Loading…
Cancel
Save