@ -69,7 +69,7 @@ struct ECCryptoClosure
ECCryptoClosure instance_of_eccryptoclosure ;
ECCryptoClosure instance_of_eccryptoclosure ;
}
}
int bitcoinconsensus_ verify_script( const unsigned char * scriptPubKey , unsigned int scriptPubKeyLen ,
static int verify_script ( const unsigned char * scriptPubKey , unsigned int scriptPubKeyLen , CAmount amount ,
const unsigned char * txTo , unsigned int txToLen ,
const unsigned char * txTo , unsigned int txToLen ,
unsigned int nIn , unsigned int flags , bitcoinconsensus_error * err )
unsigned int nIn , unsigned int flags , bitcoinconsensus_error * err )
{
{
@ -82,16 +82,36 @@ int bitcoinconsensus_verify_script(const unsigned char *scriptPubKey, unsigned i
if ( tx . GetSerializeSize ( SER_NETWORK , PROTOCOL_VERSION ) ! = txToLen )
if ( tx . GetSerializeSize ( SER_NETWORK , PROTOCOL_VERSION ) ! = txToLen )
return set_error ( err , bitcoinconsensus_ERR_TX_SIZE_MISMATCH ) ;
return set_error ( err , bitcoinconsensus_ERR_TX_SIZE_MISMATCH ) ;
// Regardless of the verification result, the tx did not error.
// Regardless of the verification result, the tx did not error.
set_error ( err , bitcoinconsensus_ERR_OK ) ;
set_error ( err , bitcoinconsensus_ERR_OK ) ;
CAmount am ( 0 ) ;
return VerifyScript ( tx . vin [ nIn ] . scriptSig , CScript ( scriptPubKey , scriptPubKey + scriptPubKeyLen ) , nIn < tx . wit . vtxinwit . size ( ) ? & tx . wit . vtxinwit [ nIn ] . scriptWitness : NULL , flags , TransactionSignatureChecker ( & tx , nIn , amount ) , NULL ) ;
return VerifyScript ( tx . vin [ nIn ] . scriptSig , CScript ( scriptPubKey , scriptPubKey + scriptPubKeyLen ) , nIn < tx . wit . vtxinwit . size ( ) ? & tx . wit . vtxinwit [ nIn ] . scriptWitness : NULL , flags , TransactionSignatureChecker ( & tx , nIn , am ) , NULL ) ;
} catch ( const std : : exception & ) {
} catch ( const std : : exception & ) {
return set_error ( err , bitcoinconsensus_ERR_TX_DESERIALIZE ) ; // Error deserializing
return set_error ( err , bitcoinconsensus_ERR_TX_DESERIALIZE ) ; // Error deserializing
}
}
}
}
int bitcoinconsensus_verify_script_with_amount ( const unsigned char * scriptPubKey , unsigned int scriptPubKeyLen , int64_t amount ,
const unsigned char * txTo , unsigned int txToLen ,
unsigned int nIn , unsigned int flags , bitcoinconsensus_error * err )
{
CAmount am ( amount ) ;
return : : verify_script ( scriptPubKey , scriptPubKeyLen , am , txTo , txToLen , nIn , flags , err ) ;
}
int bitcoinconsensus_verify_script ( const unsigned char * scriptPubKey , unsigned int scriptPubKeyLen ,
const unsigned char * txTo , unsigned int txToLen ,
unsigned int nIn , unsigned int flags , bitcoinconsensus_error * err )
{
if ( flags & bitcoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS ) {
return set_error ( err , bitcoinconsensus_ERR_AMOUNT_REQUIRED ) ;
}
CAmount am ( 0 ) ;
return : : verify_script ( scriptPubKey , scriptPubKeyLen , am , txTo , txToLen , nIn , flags , err ) ;
}
unsigned int bitcoinconsensus_version ( )
unsigned int bitcoinconsensus_version ( )
{
{
// Just use the API version for now
// Just use the API version for now