@ -31,35 +31,35 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
CScript s ;
std : : vector < std : : vector < unsigned char > > solutions ;
// T X_ PUBKEY
// T xoutType:: PUBKEY
s . clear ( ) ;
s < < ToByteVector ( pubkeys [ 0 ] ) < < OP_CHECKSIG ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ PUBKEY) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : PUBKEY) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 1U ) ;
BOOST_CHECK ( solutions [ 0 ] = = ToByteVector ( pubkeys [ 0 ] ) ) ;
// T X_ PUBKEYHASH
// T xoutType:: PUBKEYHASH
s . clear ( ) ;
s < < OP_DUP < < OP_HASH160 < < ToByteVector ( pubkeys [ 0 ] . GetID ( ) ) < < OP_EQUALVERIFY < < OP_CHECKSIG ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ PUBKEYHASH) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : PUBKEYHASH) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 1U ) ;
BOOST_CHECK ( solutions [ 0 ] = = ToByteVector ( pubkeys [ 0 ] . GetID ( ) ) ) ;
// T X_ SCRIPTHASH
// T xoutType:: SCRIPTHASH
CScript redeemScript ( s ) ; // initialize with leftover P2PKH script
s . clear ( ) ;
s < < OP_HASH160 < < ToByteVector ( CScriptID ( redeemScript ) ) < < OP_EQUAL ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ SCRIPTHASH) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : SCRIPTHASH) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 1U ) ;
BOOST_CHECK ( solutions [ 0 ] = = ToByteVector ( CScriptID ( redeemScript ) ) ) ;
// T X_ MULTISIG
// T xoutType:: MULTISIG
s . clear ( ) ;
s < < OP_1 < <
ToByteVector ( pubkeys [ 0 ] ) < <
ToByteVector ( pubkeys [ 1 ] ) < <
OP_2 < < OP_CHECKMULTISIG ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ MULTISIG) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : MULTISIG) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 4U ) ;
BOOST_CHECK ( solutions [ 0 ] = = std : : vector < unsigned char > ( { 1 } ) ) ;
BOOST_CHECK ( solutions [ 1 ] = = ToByteVector ( pubkeys [ 0 ] ) ) ;
@ -72,7 +72,7 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
ToByteVector ( pubkeys [ 1 ] ) < <
ToByteVector ( pubkeys [ 2 ] ) < <
OP_3 < < OP_CHECKMULTISIG ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ MULTISIG) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : MULTISIG) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 5U ) ;
BOOST_CHECK ( solutions [ 0 ] = = std : : vector < unsigned char > ( { 2 } ) ) ;
BOOST_CHECK ( solutions [ 1 ] = = ToByteVector ( pubkeys [ 0 ] ) ) ;
@ -80,37 +80,37 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
BOOST_CHECK ( solutions [ 3 ] = = ToByteVector ( pubkeys [ 2 ] ) ) ;
BOOST_CHECK ( solutions [ 4 ] = = std : : vector < unsigned char > ( { 3 } ) ) ;
// T X_ NULL_DATA
// T xoutType:: NULL_DATA
s . clear ( ) ;
s < < OP_RETURN < <
std : : vector < unsigned char > ( { 0 } ) < <
std : : vector < unsigned char > ( { 75 } ) < <
std : : vector < unsigned char > ( { 255 } ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ NULL_DATA) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : NULL_DATA) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 0U ) ;
// T X_ WITNESS_V0_KEYHASH
// T xoutType:: WITNESS_V0_KEYHASH
s . clear ( ) ;
s < < OP_0 < < ToByteVector ( pubkeys [ 0 ] . GetID ( ) ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ WITNESS_V0_KEYHASH) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : WITNESS_V0_KEYHASH) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 1U ) ;
BOOST_CHECK ( solutions [ 0 ] = = ToByteVector ( pubkeys [ 0 ] . GetID ( ) ) ) ;
// T X_ WITNESS_V0_SCRIPTHASH
// T xoutType:: WITNESS_V0_SCRIPTHASH
uint256 scriptHash ;
CSHA256 ( ) . Write ( & redeemScript [ 0 ] , redeemScript . size ( ) )
. Finalize ( scriptHash . begin ( ) ) ;
s . clear ( ) ;
s < < OP_0 < < ToByteVector ( scriptHash ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ WITNESS_V0_SCRIPTHASH) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : WITNESS_V0_SCRIPTHASH) ;
BOOST_CHECK_EQUAL ( solutions . size ( ) , 1U ) ;
BOOST_CHECK ( solutions [ 0 ] = = ToByteVector ( scriptHash ) ) ;
// T X_ NONSTANDARD
// T xoutType:: NONSTANDARD
s . clear ( ) ;
s < < OP_9 < < OP_ADD < < OP_11 < < OP_EQUAL ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ NONSTANDARD) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : NONSTANDARD) ;
}
BOOST_AUTO_TEST_CASE ( script_standard_Solver_failure )
@ -123,50 +123,50 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_failure)
CScript s ;
std : : vector < std : : vector < unsigned char > > solutions ;
// T X_ PUBKEY with incorrectly sized pubkey
// T xoutType:: PUBKEY with incorrectly sized pubkey
s . clear ( ) ;
s < < std : : vector < unsigned char > ( 30 , 0x01 ) < < OP_CHECKSIG ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ NONSTANDARD) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : NONSTANDARD) ;
// T X_ PUBKEYHASH with incorrectly sized key hash
// T xoutType:: PUBKEYHASH with incorrectly sized key hash
s . clear ( ) ;
s < < OP_DUP < < OP_HASH160 < < ToByteVector ( pubkey ) < < OP_EQUALVERIFY < < OP_CHECKSIG ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ NONSTANDARD) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : NONSTANDARD) ;
// T X_ SCRIPTHASH with incorrectly sized script hash
// T xoutType:: SCRIPTHASH with incorrectly sized script hash
s . clear ( ) ;
s < < OP_HASH160 < < std : : vector < unsigned char > ( 21 , 0x01 ) < < OP_EQUAL ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ NONSTANDARD) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : NONSTANDARD) ;
// T X_ MULTISIG 0/2
// T xoutType:: MULTISIG 0/2
s . clear ( ) ;
s < < OP_0 < < ToByteVector ( pubkey ) < < OP_1 < < OP_CHECKMULTISIG ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ NONSTANDARD) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : NONSTANDARD) ;
// T X_ MULTISIG 2/1
// T xoutType:: MULTISIG 2/1
s . clear ( ) ;
s < < OP_2 < < ToByteVector ( pubkey ) < < OP_1 < < OP_CHECKMULTISIG ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ NONSTANDARD) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : NONSTANDARD) ;
// T X_ MULTISIG n = 2 with 1 pubkey
// T xoutType:: MULTISIG n = 2 with 1 pubkey
s . clear ( ) ;
s < < OP_1 < < ToByteVector ( pubkey ) < < OP_2 < < OP_CHECKMULTISIG ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ NONSTANDARD) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : NONSTANDARD) ;
// T X_ MULTISIG n = 1 with 0 pubkeys
// T xoutType:: MULTISIG n = 1 with 0 pubkeys
s . clear ( ) ;
s < < OP_1 < < OP_1 < < OP_CHECKMULTISIG ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ NONSTANDARD) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : NONSTANDARD) ;
// T X_ NULL_DATA with other opcodes
// T xoutType:: NULL_DATA with other opcodes
s . clear ( ) ;
s < < OP_RETURN < < std : : vector < unsigned char > ( { 75 } ) < < OP_ADD ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ NONSTANDARD) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : NONSTANDARD) ;
// T X_ WITNESS_UNKNOWN with incorrect program size
// T xoutType:: WITNESS_UNKNOWN with incorrect program size
s . clear ( ) ;
s < < OP_0 < < std : : vector < unsigned char > ( 19 , 0x01 ) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T X_ NONSTANDARD) ;
BOOST_CHECK_EQUAL ( Solver ( s , solutions ) , T xoutType: : NONSTANDARD) ;
}
BOOST_AUTO_TEST_CASE ( script_standard_ExtractDestination )
@ -179,21 +179,21 @@ BOOST_AUTO_TEST_CASE(script_standard_ExtractDestination)
CScript s ;
CTxDestination address ;
// T X_ PUBKEY
// T xoutType:: PUBKEY
s . clear ( ) ;
s < < ToByteVector ( pubkey ) < < OP_CHECKSIG ;
BOOST_CHECK ( ExtractDestination ( s , address ) ) ;
BOOST_CHECK ( boost : : get < PKHash > ( & address ) & &
* boost : : get < PKHash > ( & address ) = = PKHash ( pubkey ) ) ;
// T X_ PUBKEYHASH
// T xoutType:: PUBKEYHASH
s . clear ( ) ;
s < < OP_DUP < < OP_HASH160 < < ToByteVector ( pubkey . GetID ( ) ) < < OP_EQUALVERIFY < < OP_CHECKSIG ;
BOOST_CHECK ( ExtractDestination ( s , address ) ) ;
BOOST_CHECK ( boost : : get < PKHash > ( & address ) & &
* boost : : get < PKHash > ( & address ) = = PKHash ( pubkey ) ) ;
// T X_ SCRIPTHASH
// T xoutType:: SCRIPTHASH
CScript redeemScript ( s ) ; // initialize with leftover P2PKH script
s . clear ( ) ;
s < < OP_HASH160 < < ToByteVector ( CScriptID ( redeemScript ) ) < < OP_EQUAL ;
@ -201,17 +201,17 @@ BOOST_AUTO_TEST_CASE(script_standard_ExtractDestination)
BOOST_CHECK ( boost : : get < ScriptHash > ( & address ) & &
* boost : : get < ScriptHash > ( & address ) = = ScriptHash ( redeemScript ) ) ;
// T X_ MULTISIG
// T xoutType:: MULTISIG
s . clear ( ) ;
s < < OP_1 < < ToByteVector ( pubkey ) < < OP_1 < < OP_CHECKMULTISIG ;
BOOST_CHECK ( ! ExtractDestination ( s , address ) ) ;
// T X_ NULL_DATA
// T xoutType:: NULL_DATA
s . clear ( ) ;
s < < OP_RETURN < < std : : vector < unsigned char > ( { 75 } ) ;
BOOST_CHECK ( ! ExtractDestination ( s , address ) ) ;
// T X_ WITNESS_V0_KEYHASH
// T xoutType:: WITNESS_V0_KEYHASH
s . clear ( ) ;
s < < OP_0 < < ToByteVector ( pubkey . GetID ( ) ) ;
BOOST_CHECK ( ExtractDestination ( s , address ) ) ;
@ -219,7 +219,7 @@ BOOST_AUTO_TEST_CASE(script_standard_ExtractDestination)
CHash160 ( ) . Write ( pubkey . begin ( ) , pubkey . size ( ) ) . Finalize ( keyhash . begin ( ) ) ;
BOOST_CHECK ( boost : : get < WitnessV0KeyHash > ( & address ) & & * boost : : get < WitnessV0KeyHash > ( & address ) = = keyhash ) ;
// T X_ WITNESS_V0_SCRIPTHASH
// T xoutType:: WITNESS_V0_SCRIPTHASH
s . clear ( ) ;
WitnessV0ScriptHash scripthash ;
CSHA256 ( ) . Write ( redeemScript . data ( ) , redeemScript . size ( ) ) . Finalize ( scripthash . begin ( ) ) ;
@ -227,7 +227,7 @@ BOOST_AUTO_TEST_CASE(script_standard_ExtractDestination)
BOOST_CHECK ( ExtractDestination ( s , address ) ) ;
BOOST_CHECK ( boost : : get < WitnessV0ScriptHash > ( & address ) & & * boost : : get < WitnessV0ScriptHash > ( & address ) = = scripthash ) ;
// T X_ WITNESS_UNKNOWN with unknown version
// T xoutType:: WITNESS_UNKNOWN with unknown version
s . clear ( ) ;
s < < OP_1 < < ToByteVector ( pubkey ) ;
BOOST_CHECK ( ExtractDestination ( s , address ) ) ;
@ -248,49 +248,49 @@ BOOST_AUTO_TEST_CASE(script_standard_ExtractDestinations)
}
CScript s ;
txnoutt ype whichType ;
TxoutT ype whichType ;
std : : vector < CTxDestination > addresses ;
int nRequired ;
// T X_ PUBKEY
// T xoutType:: PUBKEY
s . clear ( ) ;
s < < ToByteVector ( pubkeys [ 0 ] ) < < OP_CHECKSIG ;
BOOST_CHECK ( ExtractDestinations ( s , whichType , addresses , nRequired ) ) ;
BOOST_CHECK_EQUAL ( whichType , T X_ PUBKEY) ;
BOOST_CHECK_EQUAL ( whichType , T xoutType: : PUBKEY) ;
BOOST_CHECK_EQUAL ( addresses . size ( ) , 1U ) ;
BOOST_CHECK_EQUAL ( nRequired , 1 ) ;
BOOST_CHECK ( boost : : get < PKHash > ( & addresses [ 0 ] ) & &
* boost : : get < PKHash > ( & addresses [ 0 ] ) = = PKHash ( pubkeys [ 0 ] ) ) ;
// T X_ PUBKEYHASH
// T xoutType:: PUBKEYHASH
s . clear ( ) ;
s < < OP_DUP < < OP_HASH160 < < ToByteVector ( pubkeys [ 0 ] . GetID ( ) ) < < OP_EQUALVERIFY < < OP_CHECKSIG ;
BOOST_CHECK ( ExtractDestinations ( s , whichType , addresses , nRequired ) ) ;
BOOST_CHECK_EQUAL ( whichType , T X_ PUBKEYHASH) ;
BOOST_CHECK_EQUAL ( whichType , T xoutType: : PUBKEYHASH) ;
BOOST_CHECK_EQUAL ( addresses . size ( ) , 1U ) ;
BOOST_CHECK_EQUAL ( nRequired , 1 ) ;
BOOST_CHECK ( boost : : get < PKHash > ( & addresses [ 0 ] ) & &
* boost : : get < PKHash > ( & addresses [ 0 ] ) = = PKHash ( pubkeys [ 0 ] ) ) ;
// T X_ SCRIPTHASH
// T xoutType:: SCRIPTHASH
CScript redeemScript ( s ) ; // initialize with leftover P2PKH script
s . clear ( ) ;
s < < OP_HASH160 < < ToByteVector ( CScriptID ( redeemScript ) ) < < OP_EQUAL ;
BOOST_CHECK ( ExtractDestinations ( s , whichType , addresses , nRequired ) ) ;
BOOST_CHECK_EQUAL ( whichType , T X_ SCRIPTHASH) ;
BOOST_CHECK_EQUAL ( whichType , T xoutType: : SCRIPTHASH) ;
BOOST_CHECK_EQUAL ( addresses . size ( ) , 1U ) ;
BOOST_CHECK_EQUAL ( nRequired , 1 ) ;
BOOST_CHECK ( boost : : get < ScriptHash > ( & addresses [ 0 ] ) & &
* boost : : get < ScriptHash > ( & addresses [ 0 ] ) = = ScriptHash ( redeemScript ) ) ;
// T X_ MULTISIG
// T xoutType:: MULTISIG
s . clear ( ) ;
s < < OP_2 < <
ToByteVector ( pubkeys [ 0 ] ) < <
ToByteVector ( pubkeys [ 1 ] ) < <
OP_2 < < OP_CHECKMULTISIG ;
BOOST_CHECK ( ExtractDestinations ( s , whichType , addresses , nRequired ) ) ;
BOOST_CHECK_EQUAL ( whichType , T X_ MULTISIG) ;
BOOST_CHECK_EQUAL ( whichType , T xoutType: : MULTISIG) ;
BOOST_CHECK_EQUAL ( addresses . size ( ) , 2U ) ;
BOOST_CHECK_EQUAL ( nRequired , 2 ) ;
BOOST_CHECK ( boost : : get < PKHash > ( & addresses [ 0 ] ) & &
@ -298,7 +298,7 @@ BOOST_AUTO_TEST_CASE(script_standard_ExtractDestinations)
BOOST_CHECK ( boost : : get < PKHash > ( & addresses [ 1 ] ) & &
* boost : : get < PKHash > ( & addresses [ 1 ] ) = = PKHash ( pubkeys [ 1 ] ) ) ;
// T X_ NULL_DATA
// T xoutType:: NULL_DATA
s . clear ( ) ;
s < < OP_RETURN < < std : : vector < unsigned char > ( { 75 } ) ;
BOOST_CHECK ( ! ExtractDestinations ( s , whichType , addresses , nRequired ) ) ;