Master Core
v0.0.9 - 2abfd2849db8ba7a83957c64eb976b406713c123
|
#include "key.h"
#include "util.h"
#include <stdexcept>
#include <stdint.h>
#include <string>
#include <vector>
#include <boost/foreach.hpp>
#include <boost/variant.hpp>
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, CScriptID > | CTxDestination |
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 boost::variant<CNoDestination, CKeyID, CScriptID> CTxDestination |
A txout script template with a specific destination.
It is either:
anonymous enum |
anonymous enum |
enum opcodetype |
Script opcodes.
enum txnouttype |
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().
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().
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().
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().
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().
const char* GetOpName | ( | opcodetype | opcode | ) |
Definition at line 80 of file script.cpp.
References OP_0, 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_INVALIDOPCODE, 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_PUBKEY, OP_PUBKEYHASH, OP_PUSHDATA1, OP_PUSHDATA2, OP_PUSHDATA4, OP_RESERVED, OP_RESERVED1, OP_RESERVED2, OP_RETURN, OP_RIGHT, OP_RIPEMD160, OP_ROLL, OP_ROT, OP_RSHIFT, OP_SHA1, OP_SHA256, OP_SIZE, OP_SMALLDATA, OP_SUB, OP_SUBSTR, OP_SWAP, OP_TOALTSTACK, OP_TUCK, OP_VER, OP_VERIF, OP_VERIFY, OP_VERNOTIF, OP_WITHIN, and OP_XOR.
Referenced by CScript::mscore_parse(), and CScript::ToString().
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().
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().
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().
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.
bool IsMine | ( | const CKeyStore & | keystore, |
const CTxDestination & | dest | ||
) |
Definition at line 1448 of file script.cpp.
Referenced by CWallet::AddToWalletIfInvolvingMe(), CWallet::AvailableCoins(), TransactionRecord::decomposeTransaction(), CWallet::DelAddressBook(), CWallet::GetAddressBalances(), CWallet::GetAddressGroupings(), CWallet::GetCredit(), CWallet::GetDebit(), getreceivedbyaccount(), getreceivedbyaddress(), CWallet::IsChange(), CWallet::IsMine(), IsMine(), IsMyAddress(), listaccounts(), ListReceived(), AddressTablePriv::refreshAddressTable(), selectCoins(), CWallet::SetAddressBook(), TransactionDesc::toHTML(), and validateaddress().
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().
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().
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().
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.
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().
|
inline |
Definition at line 381 of file script.h.
References ValueString().
|
inline |
Definition at line 373 of file script.h.
References CScriptNum::getint(), HexStr(), and strprintf.
Referenced by CScript::mscore_parse(), StackString(), and CScript::ToString().
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().
|
static |
|
static |
Definition at line 24 of file script.h.
Referenced by _createmultisig_redeemScript(), CBasicKeyStore::AddCScript(), EvalScript(), CWallet::LoadCScript(), and ProcessMessage().