@ -954,47 +954,45 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
bool GetTransaction ( const uint256 & hash , CTransaction & txOut , uint256 & hashBlock , bool fAllowSlow )
{
CBlockIndex * pindexSlow = NULL ;
LOCK ( cs_main ) ;
if ( mempool . lookup ( hash , txOut ) )
{
LOCK ( cs_main ) ;
{
if ( mempool . lookup ( hash , txOut ) )
{
return true ;
}
}
return true ;
}
if ( fTxIndex ) {
CDiskTxPos postx ;
if ( pblocktree - > ReadTxIndex ( hash , postx ) ) {
CAutoFile file ( OpenBlockFile ( postx , true ) , SER_DISK , CLIENT_VERSION ) ;
if ( file . IsNull ( ) )
return error ( " %s: OpenBlockFile failed " , __func__ ) ;
CBlockHeader header ;
try {
file > > header ;
fseek ( file . Get ( ) , postx . nTxOffset , SEEK_CUR ) ;
file > > txOut ;
} catch ( const std : : exception & e ) {
return error ( " %s: Deserialize or I/O error - %s " , __func__ , e . what ( ) ) ;
}
hashBlock = header . GetHash ( ) ;
if ( txOut . GetHash ( ) ! = hash )
return error ( " %s: txid mismatch " , __func__ ) ;
return true ;
if ( fTxIndex ) {
CDiskTxPos postx ;
if ( pblocktree - > ReadTxIndex ( hash , postx ) ) {
CAutoFile file ( OpenBlockFile ( postx , true ) , SER_DISK , CLIENT_VERSION ) ;
if ( file . IsNull ( ) )
return error ( " %s: OpenBlockFile failed " , __func__ ) ;
CBlockHeader header ;
try {
file > > header ;
fseek ( file . Get ( ) , postx . nTxOffset , SEEK_CUR ) ;
file > > txOut ;
} catch ( const std : : exception & e ) {
return error ( " %s: Deserialize or I/O error - %s " , __func__ , e . what ( ) ) ;
}
hashBlock = header . GetHash ( ) ;
if ( txOut . GetHash ( ) ! = hash )
return error ( " %s: txid mismatch " , __func__ ) ;
return true ;
}
}
if ( fAllowSlow ) { // use coin database to locate block that contains transaction, and scan it
int nHeight = - 1 ;
{
CCoinsViewCache & view = * pcoinsTip ;
const CCoins * coins = view . AccessCoins ( hash ) ;
if ( coins )
nHeight = coins - > nHeight ;
}
if ( nHeight > 0 )
pindexSlow = chainActive [ nHeight ] ;
if ( fAllowSlow ) { // use coin database to locate block that contains transaction, and scan it
int nHeight = - 1 ;
{
CCoinsViewCache & view = * pcoinsTip ;
const CCoins * coins = view . AccessCoins ( hash ) ;
if ( coins )
nHeight = coins - > nHeight ;
}
if ( nHeight > 0 )
pindexSlow = chainActive [ nHeight ] ;
}
if ( pindexSlow ) {