Master Core  v0.0.9 - 2abfd2849db8ba7a83957c64eb976b406713c123
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Classes | Typedefs | Enumerations | Functions | Variables
script.h File Reference
#include "key.h"
#include "util.h"
#include <stdexcept>
#include <stdint.h>
#include <string>
#include <vector>
#include <boost/foreach.hpp>
#include <boost/variant.hpp>
+ Include dependency graph for script.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  scriptnum_error
 
class  CScriptNum
 
class  CNoDestination
 
class  CScript
 Serialized script, used inside transaction inputs and outputs. More...
 
class  CScriptCompressor
 Compact serializer for scripts. More...
 

Typedefs

typedef boost::variant< CNoDestination, CKeyID, CScriptIDCTxDestination
 A txout script template with a specific destination. More...
 

Enumerations

enum  {
  SIGHASH_ALL = 1,
  SIGHASH_NONE = 2,
  SIGHASH_SINGLE = 3,
  SIGHASH_ANYONECANPAY = 0x80
}
 Signature hash types/flags. More...
 
enum  {
  SCRIPT_VERIFY_NONE = 0,
  SCRIPT_VERIFY_P2SH = (1U << 0),
  SCRIPT_VERIFY_STRICTENC = (1U << 1),
  SCRIPT_VERIFY_EVEN_S = (1U << 2),
  SCRIPT_VERIFY_NOCACHE = (1U << 3)
}
 Script verification flags. More...
 
enum  txnouttype {
  TX_NONSTANDARD,
  TX_PUBKEY,
  TX_PUBKEYHASH,
  TX_SCRIPTHASH,
  TX_MULTISIG,
  TX_NULL_DATA
}
 
enum  opcodetype {
  OP_0 = 0x00,
  OP_FALSE = OP_0,
  OP_PUSHDATA1 = 0x4c,
  OP_PUSHDATA2 = 0x4d,
  OP_PUSHDATA4 = 0x4e,
  OP_1NEGATE = 0x4f,
  OP_RESERVED = 0x50,
  OP_1 = 0x51,
  OP_TRUE =OP_1,
  OP_2 = 0x52,
  OP_3 = 0x53,
  OP_4 = 0x54,
  OP_5 = 0x55,
  OP_6 = 0x56,
  OP_7 = 0x57,
  OP_8 = 0x58,
  OP_9 = 0x59,
  OP_10 = 0x5a,
  OP_11 = 0x5b,
  OP_12 = 0x5c,
  OP_13 = 0x5d,
  OP_14 = 0x5e,
  OP_15 = 0x5f,
  OP_16 = 0x60,
  OP_NOP = 0x61,
  OP_VER = 0x62,
  OP_IF = 0x63,
  OP_NOTIF = 0x64,
  OP_VERIF = 0x65,
  OP_VERNOTIF = 0x66,
  OP_ELSE = 0x67,
  OP_ENDIF = 0x68,
  OP_VERIFY = 0x69,
  OP_RETURN = 0x6a,
  OP_TOALTSTACK = 0x6b,
  OP_FROMALTSTACK = 0x6c,
  OP_2DROP = 0x6d,
  OP_2DUP = 0x6e,
  OP_3DUP = 0x6f,
  OP_2OVER = 0x70,
  OP_2ROT = 0x71,
  OP_2SWAP = 0x72,
  OP_IFDUP = 0x73,
  OP_DEPTH = 0x74,
  OP_DROP = 0x75,
  OP_DUP = 0x76,
  OP_NIP = 0x77,
  OP_OVER = 0x78,
  OP_PICK = 0x79,
  OP_ROLL = 0x7a,
  OP_ROT = 0x7b,
  OP_SWAP = 0x7c,
  OP_TUCK = 0x7d,
  OP_CAT = 0x7e,
  OP_SUBSTR = 0x7f,
  OP_LEFT = 0x80,
  OP_RIGHT = 0x81,
  OP_SIZE = 0x82,
  OP_INVERT = 0x83,
  OP_AND = 0x84,
  OP_OR = 0x85,
  OP_XOR = 0x86,
  OP_EQUAL = 0x87,
  OP_EQUALVERIFY = 0x88,
  OP_RESERVED1 = 0x89,
  OP_RESERVED2 = 0x8a,
  OP_1ADD = 0x8b,
  OP_1SUB = 0x8c,
  OP_2MUL = 0x8d,
  OP_2DIV = 0x8e,
  OP_NEGATE = 0x8f,
  OP_ABS = 0x90,
  OP_NOT = 0x91,
  OP_0NOTEQUAL = 0x92,
  OP_ADD = 0x93,
  OP_SUB = 0x94,
  OP_MUL = 0x95,
  OP_DIV = 0x96,
  OP_MOD = 0x97,
  OP_LSHIFT = 0x98,
  OP_RSHIFT = 0x99,
  OP_BOOLAND = 0x9a,
  OP_BOOLOR = 0x9b,
  OP_NUMEQUAL = 0x9c,
  OP_NUMEQUALVERIFY = 0x9d,
  OP_NUMNOTEQUAL = 0x9e,
  OP_LESSTHAN = 0x9f,
  OP_GREATERTHAN = 0xa0,
  OP_LESSTHANOREQUAL = 0xa1,
  OP_GREATERTHANOREQUAL = 0xa2,
  OP_MIN = 0xa3,
  OP_MAX = 0xa4,
  OP_WITHIN = 0xa5,
  OP_RIPEMD160 = 0xa6,
  OP_SHA1 = 0xa7,
  OP_SHA256 = 0xa8,
  OP_HASH160 = 0xa9,
  OP_HASH256 = 0xaa,
  OP_CODESEPARATOR = 0xab,
  OP_CHECKSIG = 0xac,
  OP_CHECKSIGVERIFY = 0xad,
  OP_CHECKMULTISIG = 0xae,
  OP_CHECKMULTISIGVERIFY = 0xaf,
  OP_NOP1 = 0xb0,
  OP_NOP2 = 0xb1,
  OP_NOP3 = 0xb2,
  OP_NOP4 = 0xb3,
  OP_NOP5 = 0xb4,
  OP_NOP6 = 0xb5,
  OP_NOP7 = 0xb6,
  OP_NOP8 = 0xb7,
  OP_NOP9 = 0xb8,
  OP_NOP10 = 0xb9,
  OP_SMALLDATA = 0xf9,
  OP_SMALLINTEGER = 0xfa,
  OP_PUBKEYS = 0xfb,
  OP_PUBKEYHASH = 0xfd,
  OP_PUBKEY = 0xfe,
  OP_INVALIDOPCODE = 0xff
}
 Script opcodes. More...
 

Functions

const char * GetTxnOutputType (txnouttype t)
 
const char * GetOpName (opcodetype opcode)
 
std::string ValueString (const std::vector< unsigned char > &vch)
 
std::string StackString (const std::vector< std::vector< unsigned char > > &vStack)
 
bool IsCanonicalPubKey (const std::vector< unsigned char > &vchPubKey, unsigned int flags)
 
bool IsCanonicalSignature (const std::vector< unsigned char > &vchSig, unsigned int flags)
 
bool EvalScript (std::vector< std::vector< unsigned char > > &stack, const CScript &script, const CTransaction &txTo, unsigned int nIn, unsigned int flags, int nHashType)
 
bool Solver (const CScript &scriptPubKey, txnouttype &typeRet, std::vector< std::vector< unsigned char > > &vSolutionsRet)
 
int ScriptSigArgsExpected (txnouttype t, const std::vector< std::vector< unsigned char > > &vSolutions)
 
bool IsStandard (const CScript &scriptPubKey, txnouttype &whichType)
 
bool IsMine (const CKeyStore &keystore, const CScript &scriptPubKey)
 
bool IsMine (const CKeyStore &keystore, const CTxDestination &dest)
 
void ExtractAffectedKeys (const CKeyStore &keystore, const CScript &scriptPubKey, std::vector< CKeyID > &vKeys)
 
bool ExtractDestination (const CScript &scriptPubKey, CTxDestination &addressRet)
 
bool ExtractDestinations (const CScript &scriptPubKey, txnouttype &typeRet, std::vector< CTxDestination > &addressRet, int &nRequiredRet)
 
bool SignSignature (const CKeyStore &keystore, const CScript &fromPubKey, CTransaction &txTo, unsigned int nIn, int nHashType=SIGHASH_ALL)
 
bool SignSignature (const CKeyStore &keystore, const CTransaction &txFrom, CTransaction &txTo, unsigned int nIn, int nHashType=SIGHASH_ALL)
 
bool VerifyScript (const CScript &scriptSig, const CScript &scriptPubKey, const CTransaction &txTo, unsigned int nIn, unsigned int flags, int nHashType)
 
CScript CombineSignatures (CScript scriptPubKey, const CTransaction &txTo, unsigned int nIn, const CScript &scriptSig1, const CScript &scriptSig2)
 

Variables

static const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520
 
static const unsigned int MAX_OP_RETURN_RELAY = 40
 

Typedef Documentation

typedef boost::variant<CNoDestination, CKeyID, CScriptID> CTxDestination

A txout script template with a specific destination.

It is either:

Definition at line 218 of file script.h.

Enumeration Type Documentation

anonymous enum

Signature hash types/flags.

Enumerator
SIGHASH_ALL 
SIGHASH_NONE 
SIGHASH_SINGLE 
SIGHASH_ANYONECANPAY 

Definition at line 177 of file script.h.

anonymous enum

Script verification flags.

Enumerator
SCRIPT_VERIFY_NONE 
SCRIPT_VERIFY_P2SH 
SCRIPT_VERIFY_STRICTENC 
SCRIPT_VERIFY_EVEN_S 
SCRIPT_VERIFY_NOCACHE 

Definition at line 186 of file script.h.

enum opcodetype

Script opcodes.

Enumerator
OP_0 
OP_FALSE 
OP_PUSHDATA1 
OP_PUSHDATA2 
OP_PUSHDATA4 
OP_1NEGATE 
OP_RESERVED 
OP_1 
OP_TRUE 
OP_2 
OP_3 
OP_4 
OP_5 
OP_6 
OP_7 
OP_8 
OP_9 
OP_10 
OP_11 
OP_12 
OP_13 
OP_14 
OP_15 
OP_16 
OP_NOP 
OP_VER 
OP_IF 
OP_NOTIF 
OP_VERIF 
OP_VERNOTIF 
OP_ELSE 
OP_ENDIF 
OP_VERIFY 
OP_RETURN 
OP_TOALTSTACK 
OP_FROMALTSTACK 
OP_2DROP 
OP_2DUP 
OP_3DUP 
OP_2OVER 
OP_2ROT 
OP_2SWAP 
OP_IFDUP 
OP_DEPTH 
OP_DROP 
OP_DUP 
OP_NIP 
OP_OVER 
OP_PICK 
OP_ROLL 
OP_ROT 
OP_SWAP 
OP_TUCK 
OP_CAT 
OP_SUBSTR 
OP_LEFT 
OP_RIGHT 
OP_SIZE 
OP_INVERT 
OP_AND 
OP_OR 
OP_XOR 
OP_EQUAL 
OP_EQUALVERIFY 
OP_RESERVED1 
OP_RESERVED2 
OP_1ADD 
OP_1SUB 
OP_2MUL 
OP_2DIV 
OP_NEGATE 
OP_ABS 
OP_NOT 
OP_0NOTEQUAL 
OP_ADD 
OP_SUB 
OP_MUL 
OP_DIV 
OP_MOD 
OP_LSHIFT 
OP_RSHIFT 
OP_BOOLAND 
OP_BOOLOR 
OP_NUMEQUAL 
OP_NUMEQUALVERIFY 
OP_NUMNOTEQUAL 
OP_LESSTHAN 
OP_GREATERTHAN 
OP_LESSTHANOREQUAL 
OP_GREATERTHANOREQUAL 
OP_MIN 
OP_MAX 
OP_WITHIN 
OP_RIPEMD160 
OP_SHA1 
OP_SHA256 
OP_HASH160 
OP_HASH256 
OP_CODESEPARATOR 
OP_CHECKSIG 
OP_CHECKSIGVERIFY 
OP_CHECKMULTISIG 
OP_CHECKMULTISIGVERIFY 
OP_NOP1 
OP_NOP2 
OP_NOP3 
OP_NOP4 
OP_NOP5 
OP_NOP6 
OP_NOP7 
OP_NOP8 
OP_NOP9 
OP_NOP10 
OP_SMALLDATA 
OP_SMALLINTEGER 
OP_PUBKEYS 
OP_PUBKEYHASH 
OP_PUBKEY 
OP_INVALIDOPCODE 

Definition at line 223 of file script.h.

enum txnouttype
Enumerator
TX_NONSTANDARD 
TX_PUBKEY 
TX_PUBKEYHASH 
TX_SCRIPTHASH 
TX_MULTISIG 
TX_NULL_DATA 

Definition at line 195 of file script.h.

Function Documentation

CScript CombineSignatures ( CScript  scriptPubKey,
const CTransaction txTo,
unsigned int  nIn,
const CScript scriptSig1,
const CScript scriptSig2 
)

Definition at line 1783 of file script.cpp.

References CombineSignatures(), EvalScript(), SCRIPT_VERIFY_STRICTENC, and Solver().

+ Here is the call graph for this function:

bool EvalScript ( std::vector< std::vector< unsigned char > > &  stack,
const CScript script,
const CTransaction txTo,
unsigned int  nIn,
unsigned int  flags,
int  nHashType 
)

Definition at line 297 of file script.cpp.

References altstacktop, bnOne, bnZero, CastToBool(), CheckSig(), CScript::FindAndDelete(), CScriptNum::getint(), CScript::GetOp(), CScriptNum::getvch(), Hash(), Hash160(), IsCanonicalPubKey(), IsCanonicalSignature(), MAX_SCRIPT_ELEMENT_SIZE, memcpy(), OP_0NOTEQUAL, OP_1, OP_10, OP_11, OP_12, OP_13, OP_14, OP_15, OP_16, OP_1ADD, OP_1NEGATE, OP_1SUB, OP_2, OP_2DIV, OP_2DROP, OP_2DUP, OP_2MUL, OP_2OVER, OP_2ROT, OP_2SWAP, OP_3, OP_3DUP, OP_4, OP_5, OP_6, OP_7, OP_8, OP_9, OP_ABS, OP_ADD, OP_AND, OP_BOOLAND, OP_BOOLOR, OP_CAT, OP_CHECKMULTISIG, OP_CHECKMULTISIGVERIFY, OP_CHECKSIG, OP_CHECKSIGVERIFY, OP_CODESEPARATOR, OP_DEPTH, OP_DIV, OP_DROP, OP_DUP, OP_ELSE, OP_ENDIF, OP_EQUAL, OP_EQUALVERIFY, OP_FROMALTSTACK, OP_GREATERTHAN, OP_GREATERTHANOREQUAL, OP_HASH160, OP_HASH256, OP_IF, OP_IFDUP, OP_INVERT, OP_LEFT, OP_LESSTHAN, OP_LESSTHANOREQUAL, OP_LSHIFT, OP_MAX, OP_MIN, OP_MOD, OP_MUL, OP_NEGATE, OP_NIP, OP_NOP, OP_NOP1, OP_NOP10, OP_NOP2, OP_NOP3, OP_NOP4, OP_NOP5, OP_NOP6, OP_NOP7, OP_NOP8, OP_NOP9, OP_NOT, OP_NOTIF, OP_NUMEQUAL, OP_NUMEQUALVERIFY, OP_NUMNOTEQUAL, OP_OR, OP_OVER, OP_PICK, OP_PUSHDATA4, OP_RETURN, OP_RIGHT, OP_RIPEMD160, OP_ROLL, OP_ROT, OP_RSHIFT, OP_SHA1, OP_SHA256, OP_SIZE, OP_SUB, OP_SUBSTR, OP_SWAP, OP_TOALTSTACK, OP_TUCK, OP_VERIFY, OP_WITHIN, OP_XOR, popstack(), stacktop, vchFalse(), and vchTrue().

Referenced by AreInputsStandard(), CombineSignatures(), and VerifyScript().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void ExtractAffectedKeys ( const CKeyStore keystore,
const CScript scriptPubKey,
std::vector< CKeyID > &  vKeys 
)

Definition at line 1584 of file script.cpp.

References CAffectedKeysVisitor::Process().

Referenced by CWallet::GetKeyBirthTimes().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool ExtractDestination ( const CScript scriptPubKey,
CTxDestination addressRet 
)

Definition at line 1493 of file script.cpp.

References CPubKey::GetID(), Solver(), TX_PUBKEY, TX_PUBKEYHASH, and TX_SCRIPTHASH.

Referenced by TransactionRecord::decomposeTransaction(), ExtractDestinations(), CWallet::GetAddressBalances(), CWallet::GetAddressGroupings(), CWalletTx::GetAmounts(), getreceivedbyaccount(), CWallet::IsChange(), WalletModel::listCoins(), ListReceived(), parseTransaction(), PaymentServer::processPaymentRequest(), selectCoins(), TransactionDesc::toHTML(), CoinControlDialog::updateLabels(), and CoinControlDialog::updateView().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool ExtractDestinations ( const CScript scriptPubKey,
txnouttype typeRet,
std::vector< CTxDestination > &  addressRet,
int nRequiredRet 
)

Definition at line 1519 of file script.cpp.

References ExtractDestination(), CPubKey::GetID(), Solver(), TX_MULTISIG, TX_NONSTANDARD, and TX_NULL_DATA.

Referenced by parseTransaction(), CAffectedKeysVisitor::Process(), and ScriptPubKeyToJSON().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

const char* GetOpName ( opcodetype  opcode)
const char* GetTxnOutputType ( txnouttype  t)

Definition at line 65 of file script.cpp.

References TX_MULTISIG, TX_NONSTANDARD, TX_NULL_DATA, TX_PUBKEY, TX_PUBKEYHASH, and TX_SCRIPTHASH.

Referenced by ScriptPubKeyToJSON().

+ Here is the caller graph for this function:

bool IsCanonicalPubKey ( const std::vector< unsigned char > &  vchPubKey,
unsigned int  flags 
)

Definition at line 224 of file script.cpp.

References error(), and SCRIPT_VERIFY_STRICTENC.

Referenced by EvalScript().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool IsCanonicalSignature ( const std::vector< unsigned char > &  vchSig,
unsigned int  flags 
)

Definition at line 242 of file script.cpp.

References error(), SCRIPT_VERIFY_EVEN_S, SCRIPT_VERIFY_STRICTENC, SIGHASH_ANYONECANPAY, and SIGHASH_SINGLE.

Referenced by EvalScript().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool IsMine ( const CKeyStore keystore,
const CScript scriptPubKey 
)

Definition at line 1453 of file script.cpp.

References CKeyStore::GetCScript(), CPubKey::GetID(), CKeyStore::HaveKey(), HaveKeys(), IsMine(), Solver(), TX_MULTISIG, TX_NONSTANDARD, TX_NULL_DATA, TX_PUBKEY, TX_PUBKEYHASH, and TX_SCRIPTHASH.

+ Here is the call graph for this function:

bool IsMine ( const CKeyStore keystore,
const CTxDestination dest 
)
bool IsStandard ( const CScript scriptPubKey,
txnouttype whichType 
)

Definition at line 1403 of file script.cpp.

References Solver(), TX_MULTISIG, and TX_NONSTANDARD.

Referenced by IsStandardTx().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int ScriptSigArgsExpected ( txnouttype  t,
const std::vector< std::vector< unsigned char > > &  vSolutions 
)

Definition at line 1382 of file script.cpp.

References TX_MULTISIG, TX_NONSTANDARD, TX_NULL_DATA, TX_PUBKEY, TX_PUBKEYHASH, and TX_SCRIPTHASH.

Referenced by AreInputsStandard().

+ Here is the caller graph for this function:

bool SignSignature ( const CKeyStore keystore,
const CScript fromPubKey,
CTransaction txTo,
unsigned int  nIn,
int  nHashType = SIGHASH_ALL 
)

Definition at line 1630 of file script.cpp.

References SCRIPT_VERIFY_P2SH, SCRIPT_VERIFY_STRICTENC, SignatureHash(), Solver(), TX_SCRIPTHASH, VerifyScript(), and CTransaction::vin.

Referenced by signrawtransaction(), and SignSignature().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool SignSignature ( const CKeyStore keystore,
const CTransaction txFrom,
CTransaction txTo,
unsigned int  nIn,
int  nHashType = SIGHASH_ALL 
)

Definition at line 1665 of file script.cpp.

References SignSignature(), CTransaction::vin, and CTransaction::vout.

+ Here is the call graph for this function:

bool Solver ( const CScript scriptPubKey,
txnouttype typeRet,
std::vector< std::vector< unsigned char > > &  vSolutionsRet 
)

Definition at line 1186 of file script.cpp.

References CScript::DecodeOP_N(), CScript::GetOp(), CScript::IsPayToScriptHash(), MAX_OP_RETURN_RELAY, OP_0, OP_1, OP_16, OP_CHECKMULTISIG, OP_CHECKSIG, OP_DUP, OP_EQUALVERIFY, OP_HASH160, OP_PUBKEY, OP_PUBKEYHASH, OP_PUBKEYS, OP_RETURN, OP_SMALLDATA, OP_SMALLINTEGER, PAIRTYPE, TX_MULTISIG, TX_NONSTANDARD, TX_NULL_DATA, TX_PUBKEY, TX_PUBKEYHASH, and TX_SCRIPTHASH.

Referenced by AreInputsStandard(), CombineSignatures(), ExtractDestination(), ExtractDestinations(), getOutputType(), IsMine(), CBloomFilter::IsRelevantAndUpdate(), IsStandard(), SignSignature(), and Solver().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

std::string StackString ( const std::vector< std::vector< unsigned char > > &  vStack)
inline

Definition at line 381 of file script.h.

References ValueString().

+ Here is the call graph for this function:

std::string ValueString ( const std::vector< unsigned char > &  vch)
inline

Definition at line 373 of file script.h.

References CScriptNum::getint(), HexStr(), and strprintf.

Referenced by CScript::mscore_parse(), StackString(), and CScript::ToString().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool VerifyScript ( const CScript scriptSig,
const CScript scriptPubKey,
const CTransaction txTo,
unsigned int  nIn,
unsigned int  flags,
int  nHashType 
)

Definition at line 1588 of file script.cpp.

References CastToBool(), EvalScript(), CScript::IsPayToScriptHash(), CScript::IsPushOnly(), popstack(), and SCRIPT_VERIFY_P2SH.

Referenced by CScriptCheck::operator()(), signrawtransaction(), and SignSignature().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Variable Documentation

const unsigned int MAX_OP_RETURN_RELAY = 40
static

Definition at line 25 of file script.h.

Referenced by Solver().

const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520
static