@ -27,8 +27,19 @@ public:
CScriptID ( const uint160 & in ) : uint160 ( in ) { }
CScriptID ( const uint160 & in ) : uint160 ( in ) { }
} ;
} ;
static const unsigned int MAX_OP_RETURN_RELAY = 83 ; //!< bytes (+1 for OP_RETURN, +2 for the pushdata opcodes)
/**
* Default setting for nMaxDatacarrierBytes . 80 bytes of data , + 1 for OP_RETURN ,
* + 2 for the pushdata opcodes .
*/
static const unsigned int MAX_OP_RETURN_RELAY = 83 ;
/**
* A data carrying output is an unspendable output containing data . The script
* type is designated as TX_NULL_DATA .
*/
extern bool fAcceptDatacarrier ;
extern bool fAcceptDatacarrier ;
/** Maximum size of TX_NULL_DATA scripts that this node considers standard. */
extern unsigned nMaxDatacarrierBytes ;
extern unsigned nMaxDatacarrierBytes ;
/**
/**
@ -50,7 +61,7 @@ enum txnouttype
TX_PUBKEYHASH ,
TX_PUBKEYHASH ,
TX_SCRIPTHASH ,
TX_SCRIPTHASH ,
TX_MULTISIG ,
TX_MULTISIG ,
TX_NULL_DATA ,
TX_NULL_DATA , //!< unspendable OP_RETURN script that carries data
TX_WITNESS_V0_SCRIPTHASH ,
TX_WITNESS_V0_SCRIPTHASH ,
TX_WITNESS_V0_KEYHASH ,
TX_WITNESS_V0_KEYHASH ,
} ;
} ;
@ -70,15 +81,58 @@ public:
*/
*/
typedef boost : : variant < CNoDestination , CKeyID , CScriptID > CTxDestination ;
typedef boost : : variant < CNoDestination , CKeyID , CScriptID > CTxDestination ;
/** Get the name of a txnouttype as a C string, or nullptr if unknown. */
const char * GetTxnOutputType ( txnouttype t ) ;
const char * GetTxnOutputType ( txnouttype t ) ;
/**
* Parse a scriptPubKey and identify script type for standard scripts . If
* successful , returns script type and parsed pubkeys or hashes , depending on
* the type . For example , for a P2SH script , vSolutionsRet will contain the
* script hash , for P2PKH it will contain the key hash , etc .
*
* @ param [ in ] scriptPubKey Script to parse
* @ param [ out ] typeRet The script type
* @ param [ out ] vSolutionsRet Vector of parsed pubkeys and hashes
* @ return True if script matches standard template
*/
bool Solver ( const CScript & scriptPubKey , txnouttype & typeRet , std : : vector < std : : vector < unsigned char > > & vSolutionsRet ) ;
bool Solver ( const CScript & scriptPubKey , txnouttype & typeRet , std : : vector < std : : vector < unsigned char > > & vSolutionsRet ) ;
/**
* Parse a standard scriptPubKey for the destination address . Assigns result to
* the addressRet parameter and returns true if successful . For multisig
* scripts , instead use ExtractDestinations . Currently only works for P2PK ,
* P2PKH , and P2SH scripts .
*/
bool ExtractDestination ( const CScript & scriptPubKey , CTxDestination & addressRet ) ;
bool ExtractDestination ( const CScript & scriptPubKey , CTxDestination & addressRet ) ;
/**
* Parse a standard scriptPubKey with one or more destination addresses . For
* multisig scripts , this populates the addressRet vector with the pubkey IDs
* and nRequiredRet with the n required to spend . For other destinations ,
* addressRet is populated with a single value and nRequiredRet is set to 1.
* Returns true if successful . Currently does not extract address from
* pay - to - witness scripts .
*/
bool ExtractDestinations ( const CScript & scriptPubKey , txnouttype & typeRet , std : : vector < CTxDestination > & addressRet , int & nRequiredRet ) ;
bool ExtractDestinations ( const CScript & scriptPubKey , txnouttype & typeRet , std : : vector < CTxDestination > & addressRet , int & nRequiredRet ) ;
/**
* Generate a Bitcoin scriptPubKey for the given CTxDestination . Returns a P2PKH
* script for a CKeyID destination , a P2SH script for a CScriptID , and an empty
* script for CNoDestination .
*/
CScript GetScriptForDestination ( const CTxDestination & dest ) ;
CScript GetScriptForDestination ( const CTxDestination & dest ) ;
/** Generate a P2PK script for the given pubkey. */
CScript GetScriptForRawPubKey ( const CPubKey & pubkey ) ;
CScript GetScriptForRawPubKey ( const CPubKey & pubkey ) ;
/** Generate a multisig script. */
CScript GetScriptForMultisig ( int nRequired , const std : : vector < CPubKey > & keys ) ;
CScript GetScriptForMultisig ( int nRequired , const std : : vector < CPubKey > & keys ) ;
/**
* Generate a pay - to - witness script for the given redeem script . If the redeem
* script is P2PK or P2PKH , this returns a P2WPKH script , otherwise it returns a
* P2WSH script .
*/
CScript GetScriptForWitness ( const CScript & redeemscript ) ;
CScript GetScriptForWitness ( const CScript & redeemscript ) ;
# endif // BITCOIN_SCRIPT_STANDARD_H
# endif // BITCOIN_SCRIPT_STANDARD_H