@ -25,22 +25,19 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
}
CScript s ;
txnouttype whichType ;
std : : vector < std : : vector < unsigned char > > solutions ;
// TX_PUBKEY
s . clear ( ) ;
s < < ToByteVector ( pubkeys [ 0 ] ) < < OP_CHECKSIG ;
BOOST_CHECK ( Solver ( s , whichType , solutions ) ) ;
BOOST_CHECK_EQUAL ( whichType , TX_PUBKEY ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , TX_PUBKEY ) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 1U ) ;
BOOST_CHECK ( solutions [ 0 ] = = ToByteVector ( pubkeys [ 0 ] ) ) ;
// TX_PUBKEYHASH
s . clear ( ) ;
s < < OP_DUP < < OP_HASH160 < < ToByteVector ( pubkeys [ 0 ] . GetID ( ) ) < < OP_EQUALVERIFY < < OP_CHECKSIG ;
BOOST_CHECK ( Solver ( s , whichType , solutions ) ) ;
BOOST_CHECK_EQUAL ( whichType , TX_PUBKEYHASH ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , TX_PUBKEYHASH ) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 1U ) ;
BOOST_CHECK ( solutions [ 0 ] = = ToByteVector ( pubkeys [ 0 ] . GetID ( ) ) ) ;
@ -48,8 +45,7 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
CScript redeemScript ( s ) ; // initialize with leftover P2PKH script
s . clear ( ) ;
s < < OP_HASH160 < < ToByteVector ( CScriptID ( redeemScript ) ) < < OP_EQUAL ;
BOOST_CHECK ( Solver ( s , whichType , solutions ) ) ;
BOOST_CHECK_EQUAL ( whichType , TX_SCRIPTHASH ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , TX_SCRIPTHASH ) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 1U ) ;
BOOST_CHECK ( solutions [ 0 ] = = ToByteVector ( CScriptID ( redeemScript ) ) ) ;
@ -59,8 +55,7 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
ToByteVector ( pubkeys [ 0 ] ) < <
ToByteVector ( pubkeys [ 1 ] ) < <
OP_2 < < OP_CHECKMULTISIG ;
BOOST_CHECK ( Solver ( s , whichType , solutions ) ) ;
BOOST_CHECK_EQUAL ( whichType , TX_MULTISIG ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , TX_MULTISIG ) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 4U ) ;
BOOST_CHECK ( solutions [ 0 ] = = std : : vector < unsigned char > ( { 1 } ) ) ;
BOOST_CHECK ( solutions [ 1 ] = = ToByteVector ( pubkeys [ 0 ] ) ) ;
@ -73,8 +68,7 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
ToByteVector ( pubkeys [ 1 ] ) < <
ToByteVector ( pubkeys [ 2 ] ) < <
OP_3 < < OP_CHECKMULTISIG ;
BOOST_CHECK ( Solver ( s , whichType , solutions ) ) ;
BOOST_CHECK_EQUAL ( whichType , TX_MULTISIG ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , TX_MULTISIG ) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 5U ) ;
BOOST_CHECK ( solutions [ 0 ] = = std : : vector < unsigned char > ( { 2 } ) ) ;
BOOST_CHECK ( solutions [ 1 ] = = ToByteVector ( pubkeys [ 0 ] ) ) ;
@ -88,15 +82,13 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
std : : vector < unsigned char > ( { 0 } ) < <
std : : vector < unsigned char > ( { 75 } ) < <
std : : vector < unsigned char > ( { 255 } ) ;
BOOST_CHECK ( Solver ( s , whichType , solutions ) ) ;
BOOST_CHECK_EQUAL ( whichType , TX_NULL_DATA ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , TX_NULL_DATA ) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 0U ) ;
// TX_WITNESS_V0_KEYHASH
s . clear ( ) ;
s < < OP_0 < < ToByteVector ( pubkeys [ 0 ] . GetID ( ) ) ;
BOOST_CHECK ( Solver ( s , whichType , solutions ) ) ;
BOOST_CHECK_EQUAL ( whichType , TX_WITNESS_V0_KEYHASH ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , TX_WITNESS_V0_KEYHASH ) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 1U ) ;
BOOST_CHECK ( solutions [ 0 ] = = ToByteVector ( pubkeys [ 0 ] . GetID ( ) ) ) ;
@ -107,16 +99,14 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
s . clear ( ) ;
s < < OP_0 < < ToByteVector ( scriptHash ) ;
BOOST_CHECK ( Solver ( s , whichType , solutions ) ) ;
BOOST_CHECK_EQUAL ( whichType , TX_WITNESS_V0_SCRIPTHASH ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , TX_WITNESS_V0_SCRIPTHASH ) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 1U ) ;
BOOST_CHECK ( solutions [ 0 ] = = ToByteVector ( scriptHash ) ) ;
// TX_NONSTANDARD
s . clear ( ) ;
s < < OP_9 < < OP_ADD < < OP_11 < < OP_EQUAL ;
BOOST_CHECK ( ! Solver ( s , whichType , solutions ) ) ;
BOOST_CHECK_EQUAL ( whichType , TX_NONSTANDARD ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , TX_NONSTANDARD ) ;
}
BOOST_AUTO_TEST_CASE ( script_standard_Solver_failure )
@ -127,53 +117,52 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_failure)
pubkey = key . GetPubKey ( ) ;
CScript s ;
txnouttype whichType ;
std : : vector < std : : vector < unsigned char > > solutions ;
// TX_PUBKEY with incorrectly sized pubkey
s . clear ( ) ;
s < < std : : vector < unsigned char > ( 30 , 0x01 ) < < OP_CHECKSIG ;
BOOST_CHECK ( ! Solver ( s , whichType, solutions) ) ;
BOOST_CHECK _EQUAL ( Solver ( s , solutions) , TX_NONSTANDARD ) ;
// TX_PUBKEYHASH with incorrectly sized key hash
s . clear ( ) ;
s < < OP_DUP < < OP_HASH160 < < ToByteVector ( pubkey ) < < OP_EQUALVERIFY < < OP_CHECKSIG ;
BOOST_CHECK ( ! Solver ( s , whichType, solutions) ) ;
BOOST_CHECK _EQUAL ( Solver ( s , solutions) , TX_NONSTANDARD ) ;
// TX_SCRIPTHASH with incorrectly sized script hash
s . clear ( ) ;
s < < OP_HASH160 < < std : : vector < unsigned char > ( 21 , 0x01 ) < < OP_EQUAL ;
BOOST_CHECK ( ! Solver ( s , whichType, solutions) ) ;
BOOST_CHECK _EQUAL ( Solver ( s , solutions) , TX_NONSTANDARD ) ;
// TX_MULTISIG 0/2
s . clear ( ) ;
s < < OP_0 < < ToByteVector ( pubkey ) < < OP_1 < < OP_CHECKMULTISIG ;
BOOST_CHECK ( ! Solver ( s , whichType, solutions) ) ;
BOOST_CHECK _EQUAL ( Solver ( s , solutions) , TX_NONSTANDARD ) ;
// TX_MULTISIG 2/1
s . clear ( ) ;
s < < OP_2 < < ToByteVector ( pubkey ) < < OP_1 < < OP_CHECKMULTISIG ;
BOOST_CHECK ( ! Solver ( s , whichType, solutions) ) ;
BOOST_CHECK _EQUAL ( Solver ( s , solutions) , TX_NONSTANDARD ) ;
// TX_MULTISIG n = 2 with 1 pubkey
s . clear ( ) ;
s < < OP_1 < < ToByteVector ( pubkey ) < < OP_2 < < OP_CHECKMULTISIG ;
BOOST_CHECK ( ! Solver ( s , whichType, solutions) ) ;
BOOST_CHECK _EQUAL ( Solver ( s , solutions) , TX_NONSTANDARD ) ;
// TX_MULTISIG n = 1 with 0 pubkeys
s . clear ( ) ;
s < < OP_1 < < OP_1 < < OP_CHECKMULTISIG ;
BOOST_CHECK ( ! Solver ( s , whichType, solutions) ) ;
BOOST_CHECK _EQUAL ( Solver ( s , solutions) , TX_NONSTANDARD ) ;
// TX_NULL_DATA with other opcodes
s . clear ( ) ;
s < < OP_RETURN < < std : : vector < unsigned char > ( { 75 } ) < < OP_ADD ;
BOOST_CHECK ( ! Solver ( s , whichType, solutions) ) ;
BOOST_CHECK _EQUAL ( Solver ( s , solutions) , TX_NONSTANDARD ) ;
// TX_WITNESS with incorrect program size
s . clear ( ) ;
s < < OP_0 < < std : : vector < unsigned char > ( 19 , 0x01 ) ;
BOOST_CHECK ( ! Solver ( s , whichType, solutions) ) ;
BOOST_CHECK _EQUAL ( Solver ( s , solutions) , TX_NONSTANDARD ) ;
}
BOOST_AUTO_TEST_CASE ( script_standard_ExtractDestination )