@ -1474,6 +1474,42 @@ bool ExtractDestinations(const CScript& scriptPubKey, txnouttype& typeRet, vecto
return true ;
return true ;
}
}
class CAffectedKeysVisitor : public boost : : static_visitor < void > {
private :
const CKeyStore & keystore ;
std : : vector < CKeyID > & vKeys ;
public :
CAffectedKeysVisitor ( const CKeyStore & keystoreIn , std : : vector < CKeyID > & vKeysIn ) : keystore ( keystoreIn ) , vKeys ( vKeysIn ) { }
void Process ( const CScript & script ) {
txnouttype type ;
std : : vector < CTxDestination > vDest ;
int nRequired ;
if ( ExtractDestinations ( script , type , vDest , nRequired ) ) {
BOOST_FOREACH ( const CTxDestination & dest , vDest )
boost : : apply_visitor ( * this , dest ) ;
}
}
void operator ( ) ( const CKeyID & keyId ) {
if ( keystore . HaveKey ( keyId ) )
vKeys . push_back ( keyId ) ;
}
void operator ( ) ( const CScriptID & scriptId ) {
CScript script ;
if ( keystore . GetCScript ( scriptId , script ) )
Process ( script ) ;
}
void operator ( ) ( const CNoDestination & none ) { }
} ;
void ExtractAffectedKeys ( const CKeyStore & keystore , const CScript & scriptPubKey , std : : vector < CKeyID > & vKeys ) {
CAffectedKeysVisitor ( keystore , vKeys ) . Process ( scriptPubKey ) ;
}
bool VerifyScript ( const CScript & scriptSig , const CScript & scriptPubKey , const CTransaction & txTo , unsigned int nIn ,
bool VerifyScript ( const CScript & scriptSig , const CScript & scriptPubKey , const CTransaction & txTo , unsigned int nIn ,
unsigned int flags , int nHashType )
unsigned int flags , int nHashType )
{
{