diff --git a/iguana/iguana_unspents.c b/iguana/iguana_unspents.c index 127b5cebd..635e27ea5 100755 --- a/iguana/iguana_unspents.c +++ b/iguana/iguana_unspents.c @@ -388,31 +388,37 @@ int32_t iguana_balancegen(struct iguana_info *coin,struct iguana_bundle *bp) else continue; if ( unspentind > 0 && unspentind < spentbp->ramchain.H.data->numunspents ) { - spentU = (void *)(long)((long)spentbp->ramchain.H.data + spentbp->ramchain.H.data->Uoffset); - A2 = spentbp->ramchain.A; - u = &spentU[unspentind]; - if ( (pkind= u->pkind) != 0 && pkind < spentbp->ramchain.H.data->numpkinds ) + if ( spentbp->ramchain.Uextras == 0 || (A2= spentbp->ramchain.A) == 0 ) { - if ( (spentbp->ramchain.Uextras[unspentind] & (1 << 31)) == 0 ) + printf("null ptrs %p %p\n",spentbp->ramchain.Uextras,spentbp->ramchain.A); + errs++; + } + else + { + spentU = (void *)(long)((long)spentbp->ramchain.H.data + spentbp->ramchain.H.data->Uoffset); + u = &spentU[unspentind]; + if ( (pkind= u->pkind) != 0 && pkind < spentbp->ramchain.H.data->numpkinds ) { - if ( spentbp->ramchain.Uextras[unspentind] == 0 ) - spentbp->ramchain.Uextras[unspentind] |= A2[pkind].lastind; - spentbp->ramchain.Uextras[unspentind] |= (1 << 31); - A2[pkind].total += u->value; - A2[pkind].lastind = spendind; - spentbp->dirty = (uint32_t)time(NULL); + if ( (spentbp->ramchain.Uextras[unspentind] & (1 << 31)) == 0 ) + { + spentbp->ramchain.Uextras[unspentind] |= (A2[pkind].lastind & 0x7fffffff); + spentbp->ramchain.Uextras[unspentind] |= (1 << 31); + A2[pkind].total += u->value; + A2[pkind].lastind = spendind; + spentbp->dirty = (uint32_t)time(NULL); + } + else + { + errs++; + printf("iguana_balancegen: double spend of hdrsi.%d unspentind.%d\n",spentbp->hdrsi,unspentind); + } } else { errs++; - printf("iguana_balancegen: double spend of hdrsi.%d unspentind.%d\n",spentbp->hdrsi,unspentind); + printf("iguana_balancegen: pkind overflow %d vs %d\n",pkind,spentbp->ramchain.H.data->numpkinds); } } - else - { - errs++; - printf("iguana_balancegen: pkind overflow %d vs %d\n",pkind,spentbp->ramchain.H.data->numpkinds); - } } else {