|
|
@ -679,25 +679,39 @@ Value gettxout(const Array& params, bool fHelp) |
|
|
|
|
|
|
|
int32_t gettxout_scriptPubKey(uint8_t *scriptPubKey,int32_t maxsize,uint256 txid,int32_t n) |
|
|
|
{ |
|
|
|
int32_t i,m; uint8_t *ptr; |
|
|
|
int32_t i,m,iter; uint8_t *ptr; |
|
|
|
LOCK(cs_main); |
|
|
|
CCoins coins; |
|
|
|
if ( 0 ) |
|
|
|
for (iter=0; iter<2; iter++) |
|
|
|
{ |
|
|
|
LOCK(mempool.cs); |
|
|
|
CCoinsViewMemPool view(pcoinsTip,mempool); |
|
|
|
if ( view.GetCoins(txid,coins) == 0 ) |
|
|
|
return(-1); |
|
|
|
mempool.pruneSpent(txid, coins); // TODO: this should be done by the CCoinsViewMemPool
|
|
|
|
} else if ( pcoinsTip->GetCoins(txid,coins) == 0 ) |
|
|
|
return(-1); |
|
|
|
if ( n < 0 || (unsigned int)n >= coins.vout.size() || coins.vout[n].IsNull() ) |
|
|
|
return(-1); |
|
|
|
ptr = (uint8_t *)coins.vout[n].scriptPubKey.data(); |
|
|
|
m = coins.vout[n].scriptPubKey.size(); |
|
|
|
for (i=0; i<maxsize&&i<m; i++) |
|
|
|
scriptPubKey[i] = ptr[i]; |
|
|
|
return(i); |
|
|
|
if ( iter == 0 ) |
|
|
|
{ |
|
|
|
LOCK(mempool.cs); |
|
|
|
CCoinsViewMemPool view(pcoinsTip,mempool); |
|
|
|
if ( view.GetCoins(txid,coins) == 0 ) |
|
|
|
{ |
|
|
|
fprintf(stderr,"cant get view\n"); |
|
|
|
continue; |
|
|
|
} |
|
|
|
mempool.pruneSpent(txid, coins); // TODO: this should be done by the CCoinsViewMemPool
|
|
|
|
} |
|
|
|
else if ( pcoinsTip->GetCoins(txid,coins) == 0 ) |
|
|
|
{ |
|
|
|
fprintf(stderr,"cant get pcoinsTip->GetCoins\n"); |
|
|
|
continue; |
|
|
|
} |
|
|
|
if ( n < 0 || (unsigned int)n >= coins.vout.size() || coins.vout[n].IsNull() ) |
|
|
|
{ |
|
|
|
fprintf(stderr,"iter.%d n.%d vs voutsize.%d\n",iter,n,(int32_t)coins.vout.size()); |
|
|
|
continue; |
|
|
|
} |
|
|
|
ptr = (uint8_t *)coins.vout[n].scriptPubKey.data(); |
|
|
|
m = coins.vout[n].scriptPubKey.size(); |
|
|
|
for (i=0; i<maxsize&&i<m; i++) |
|
|
|
scriptPubKey[i] = ptr[i]; |
|
|
|
return(i); |
|
|
|
} |
|
|
|
return(-1); |
|
|
|
} |
|
|
|
|
|
|
|
Value verifychain(const Array& params, bool fHelp) |
|
|
|