diff --git a/iguana/iguana_unspents.c b/iguana/iguana_unspents.c index 589a12228..7b67e7b8b 100755 --- a/iguana/iguana_unspents.c +++ b/iguana/iguana_unspents.c @@ -78,17 +78,17 @@ int32_t iguana_utxoupdate(struct iguana_info *coin,int16_t spent_hdrsi,uint32_t return(0); } -int32_t iguana_volatileupdate(struct iguana_info *coin,int32_t incremental,struct iguana_ramchain *ramchain,int16_t spent_hdrsi,uint32_t spent_unspentind,uint32_t spent_pkind,uint64_t spent_value,uint32_t spendind,uint32_t fromheight) +int32_t iguana_volatileupdate(struct iguana_info *coin,int32_t incremental,struct iguana_ramchain *spentchain,int16_t spent_hdrsi,uint32_t spent_unspentind,uint32_t spent_pkind,uint64_t spent_value,uint32_t spendind,uint32_t fromheight) { struct iguana_account *A2; struct iguana_ramchaindata *rdata; struct iguana_utxo *utxo; - if ( (rdata= ramchain->H.data) != 0 ) + if ( (rdata= spentchain->H.data) != 0 ) { if ( incremental == 0 ) { - A2 = ramchain->A; - if ( ramchain->Uextras != 0 && A2 != 0 ) + A2 = spentchain->A; + if ( spentchain->Uextras != 0 && A2 != 0 ) { - utxo = &ramchain->Uextras[spent_unspentind]; + utxo = &spentchain->Uextras[spent_unspentind]; if ( utxo->spentflag == 0 ) { utxo->prevunspentind = A2[spent_pkind].lastunspentind; @@ -476,7 +476,7 @@ int32_t iguana_balancegen(struct iguana_info *coin,struct iguana_bundle *bp,int3 uint32_t spent_unspentind,spent_pkind,txidind,h,i,j,k,now; uint64_t spent_value; struct iguana_ramchain *ramchain; struct iguana_ramchaindata *rdata; struct iguana_spendvector *spend; struct iguana_unspent *spentU,*u; - struct iguana_txid *T; struct iguana_blockRO *B; + struct iguana_txid *T; struct iguana_blockRO *B; struct iguana_bundle *spentbp; int32_t spent_hdrsi,spendind,n,errs=0,emit=0; struct iguana_spend *S,*s; ramchain = &bp->ramchain; if ( (rdata= ramchain->H.data) == 0 || (n= ramchain->H.data->numspends) < 1 ) @@ -550,9 +550,9 @@ int32_t iguana_balancegen(struct iguana_info *coin,struct iguana_bundle *bp,int3 } } else continue; - if ( spent_unspentind > 0 && spent_pkind > 0 ) + if ( spent_unspentind > 0 && spent_pkind > 0 && (spentbp= coin->bundles[spent_hdrsi]) != 0 ) { - if ( iguana_volatileupdate(coin,0,ramchain,spent_hdrsi,spent_unspentind,spent_pkind,spent_value,spendind,h) < 0 ) + if ( iguana_volatileupdate(coin,0,&spentbp->ramchain,spent_hdrsi,spent_unspentind,spent_pkind,spent_value,spendind,h) < 0 ) errs++; } else @@ -638,7 +638,7 @@ int32_t iguana_RTutxo(struct iguana_info *coin,struct iguana_bundle *bp,struct i { spentU = (void *)(long)((long)spentbp->ramchain.H.data + spentbp->ramchain.H.data->Uoffset); u = &spentU[spent_unspentind]; - return(iguana_volatileupdate(coin,1,RTramchain,spentbp->hdrsi,spent_unspentind,u->pkind,u->value,spendind,height)); + return(iguana_volatileupdate(coin,1,spentbp == bp ? RTramchain : &spentbp->ramchain,spentbp->hdrsi,spent_unspentind,u->pkind,u->value,spendind,height)); } } }