Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
be9ac7fdb6
  1. 4
      crypto777/iguana_OS.c
  2. 1
      deprecated/obsolete.h
  3. 10
      iguana/iguana777.h
  4. 76
      iguana/iguana_ramchain.c
  5. 4
      iguana/iguana_recv.c
  6. 37
      iguana/iguana_scripts.c
  7. 24
      iguana/iguana_unspents.c

4
crypto777/iguana_OS.c

@ -535,10 +535,10 @@ void OS_ensure_directory(char *dirname)
,511
#endif
);
printf("mkdir.(%s) retval.%d errno.%d %s\n",dirname,retval,errno,strerror(errno));
//printf("mkdir.(%s) retval.%d errno.%d %s\n",dirname,retval,errno,strerror(errno));
} else fclose(fp), printf("dirname.(%s) exists\n",dirname);
if ( (fp= fopen(fname,"wb")) != 0 )
fclose(fp), printf("created.(%s)\n",fname);
fclose(fp);//, printf("created.(%s)\n",fname);
else printf("cant create.(%s) errno.%d %s\n",fname,errno,strerror(errno));
} else fclose(fp);//, printf("%s exists\n",fname);
}

1
deprecated/obsolete.h

@ -14147,6 +14147,7 @@ len = 0;
}
return(scriptdata);
}
//struct scriptdata { uint32_t ind:31,spendflag:1; uint16_t hdrsi,scriptlen; }__attribute__((packed));
#endif

10
iguana/iguana777.h

@ -334,15 +334,13 @@ struct iguana_unspent { uint64_t value; uint32_t txidind,pkind,prevunspentind,sc
struct iguana_spend { uint32_t spendtxidind,sequenceid,scriptpos,ipbits; int16_t prevout; uint16_t scriptlen:15,external:1; } __attribute__((packed)); // numsigs:4,numpubkeys:4,p2sh:1,sighash:4
struct iguana_pkhash { uint8_t rmd160[20]; uint32_t pkind,pubkeyoffset; } __attribute__((packed)); //firstunspentind
struct scriptdata { uint32_t ind:31,spendflag:1; uint16_t hdrsi,scriptlen; }__attribute__((packed));
struct iguana_pkhash { uint8_t rmd160[20]; uint32_t pkind; } __attribute__((packed)); //firstunspentind,pubkeyoffset
// dynamic
struct iguana_account { uint64_t balance; uint32_t lastunspentind; } __attribute__((packed)); // pkind
struct iguana_account { int64_t total; uint32_t lastind; } __attribute__((packed));
// GLOBAL one zero to non-zero write (unless reorg)
struct iguana_Uextra { uint32_t spendind; uint16_t hdrsi; } __attribute__((packed)); // unspentind
struct iguana_bundleind { uint32_t ind; uint16_t hdrsi; } __attribute__((packed)); // unspentind
//struct iguana_pkextra { uint32_t firstspendind; } __attribute__((packed)); // pkind
struct iguana_txblock
@ -376,7 +374,7 @@ struct iguana_ramchain
uint32_t numblocks:31,expanded:1,pkind,externalind,height;
struct iguana_kvitem *txids,*pkhashes;
struct OS_memspace *hashmem; long filesize,sigsfilesize; void *fileptr,*sigsfileptr;
struct iguana_account *A,*roA; struct iguana_Uextra *spents;
struct iguana_account *A,*creditsA; struct iguana_bundleind *spents;
//struct iguana_Uextra *U2,*roU2; struct iguana_pkextra *P2,*roP2;
};

76
iguana/iguana_ramchain.c

@ -442,43 +442,6 @@ uint8_t *iguana_ramchain_scriptdecode(int32_t *metalenp,int32_t *scriptlenp,uint
} else return(0);
}
uint32_t iguana_ramchain_pubkeyoffset(struct iguana_info *coin,RAMCHAIN_FUNC,int32_t createflag,uint32_t *pkindp,uint32_t *scriptoffsetp,uint8_t *pubkey,uint8_t rmd160[20])
{
uint32_t pkind; int32_t plen; struct iguana_kvitem *ptr;
if ( (ptr= iguana_hashfind(ramchain,'P',rmd160)) == 0 )
{
if ( createflag != 0 )
{
//printf("from pubkeyoffset\n");
pkind = iguana_ramchain_addpkhash(coin,RAMCHAIN_ARG,rmd160,0,0,0);
//int32_t i; for (i=0; i<33; i++)
// printf("%02x",pubkey[i]);
//printf(" pkind.%d created from pubkeyoffset\n",pkind);
*pkindp = pkind + 1;
} else return(0);
} else pkind = ptr->hh.itemind;
if ( P[pkind].pubkeyoffset == 0 )
{
plen = bitcoin_pubkeylen(pubkey);
if ( plen > 0 )
{
if ( *scriptoffsetp == 0 )
*scriptoffsetp++ = 0;
P[pkind].pubkeyoffset = *scriptoffsetp, *scriptoffsetp += plen;
// printf(" plen.%d -> new offset.%d\n",plen,*scriptoffsetp);
memcpy(&Kspace[P[pkind].pubkeyoffset],pubkey,plen);
}
else
{
//int32_t i; for (i=0; i<plen; i++)
// printf("%02x",pubkey[i]);
//printf("iguana_ramchain_pubkeyoffset: illegal pubkey?\n");
return(0);
}
}
return(P[pkind].pubkeyoffset);
}
uint32_t iguana_ramchain_addunspent20(struct iguana_info *coin,struct iguana_peer *addr,RAMCHAIN_FUNC,uint64_t value,uint8_t *script,int32_t scriptlen,bits256 txid,int32_t vout,int8_t type,struct iguana_bundle *bp,uint8_t rmd160[20])
{
uint32_t unspentind; struct iguana_unspent20 *u; struct vin_info V;
@ -545,7 +508,7 @@ uint32_t iguana_ramchain_addunspent20(struct iguana_info *coin,struct iguana_pee
uint32_t iguana_ramchain_addunspent(struct iguana_info *coin,RAMCHAIN_FUNC,uint64_t value,uint16_t hdrsi,uint8_t *rmd160,uint16_t vout,uint8_t type,uint32_t ipbits,uint32_t fpos,int32_t scriptlen)
{
uint32_t unspentind,pubkeyoffset; struct iguana_unspent *u; struct iguana_kvitem *ptr; int32_t pkind;//,checklen,metalen; uint8_t _script[IGUANA_MAXSCRIPTSIZE],*checkscript;
uint32_t unspentind; struct iguana_unspent *u; struct iguana_kvitem *ptr; int32_t pkind;//,checklen,metalen; uint8_t _script[IGUANA_MAXSCRIPTSIZE],*checkscript;
unspentind = ramchain->H.unspentind++;
u = &Ux[unspentind];
if ( (ptr= iguana_hashfind(ramchain,'P',rmd160)) == 0 )
@ -567,9 +530,9 @@ uint32_t iguana_ramchain_addunspent(struct iguana_info *coin,RAMCHAIN_FUNC,uint6
printf("script mismatch len.%d vs %d or cmp error.%d\n",scriptlen,checklen,(checkscript != 0 && script != 0) ? memcmp(checkscript,script,scriptlen):0);
} //else printf("RO spendscript match.%d\n",scriptlen);
}*/
if ( u->ipbits != ipbits || u->scriptpos != fpos || u->scriptlen != scriptlen || u->value != value || u->pkind != pkind || u->value != value || u->txidind != ramchain->H.txidind || (pkind != 0 && u->prevunspentind != A[pkind].lastunspentind) || u->vout != vout || u->hdrsi != hdrsi )
if ( u->ipbits != ipbits || u->scriptpos != fpos || u->scriptlen != scriptlen || u->value != value || u->pkind != pkind || u->value != value || u->txidind != ramchain->H.txidind || (pkind != 0 && u->prevunspentind != A[pkind].lastind) || u->vout != vout || u->hdrsi != hdrsi )
{
printf("iguana_ramchain_addunspent: (%d %d %d) vs (%d %d %d) mismatched values.(%d %.8f %d %d %d %d) vs (%d %.8f %d %d %d %d)\n",u->ipbits,u->scriptpos,u->scriptlen,ipbits,fpos,scriptlen,u->pkind,dstr(u->value),u->txidind,u->prevunspentind,u->vout,u->hdrsi,pkind,dstr(value),ramchain->H.txidind,A[pkind].lastunspentind,vout,hdrsi);
printf("iguana_ramchain_addunspent: (%d %d %d) vs (%d %d %d) mismatched values.(%d %.8f %d %d %d %d) vs (%d %.8f %d %d %d %d)\n",u->ipbits,u->scriptpos,u->scriptlen,ipbits,fpos,scriptlen,u->pkind,dstr(u->value),u->txidind,u->prevunspentind,u->vout,u->hdrsi,pkind,dstr(value),ramchain->H.txidind,A[pkind].lastind,vout,hdrsi);
exit(-1);
return(0);
}
@ -577,12 +540,12 @@ uint32_t iguana_ramchain_addunspent(struct iguana_info *coin,RAMCHAIN_FUNC,uint6
else
{
u->value = value;
if ( type == IGUANA_SCRIPT_76AC )
pubkeyoffset = P[pkind].pubkeyoffset;
else pubkeyoffset = 0;
//if ( type == IGUANA_SCRIPT_76AC )
// pubkeyoffset = P[pkind].pubkeyoffset;
//else pubkeyoffset = 0;
u->vout = vout, u->hdrsi = hdrsi;
u->txidind = ramchain->H.txidind, u->pkind = pkind;
u->prevunspentind = A[pkind].lastunspentind;
u->prevunspentind = A[pkind].lastind;
/*origoffset = ramchain->H.scriptoffset;
if ( type != IGUANA_SCRIPT_STRANGE && type != IGUANA_SCRIPT_DATA && type != IGUANA_SCRIPT_OPRETURN && scriptlen > 0 && script != 0 )
{
@ -619,8 +582,8 @@ uint32_t iguana_ramchain_addunspent(struct iguana_info *coin,RAMCHAIN_FUNC,uint6
u->type = type;
}
//printf("%p A[%d] last <- U%d\n",&A[pkind],pkind,unspentind);
A[pkind].balance += value;
A[pkind].lastunspentind = unspentind;
A[pkind].total += value;
A[pkind].lastind = unspentind;
return(unspentind);
}
@ -834,7 +797,7 @@ uint32_t iguana_ramchain_addspend256(struct iguana_info *coin,struct iguana_peer
int64_t iguana_hashmemsize(int64_t numtxids,int64_t numunspents,int64_t numspends,int64_t numpkinds,int64_t numexternaltxids,int64_t scriptspace)
{
int64_t allocsize = 0;
allocsize += (scriptspace + IGUANA_MAXSCRIPTSIZE + ((numtxids + numpkinds) * (sizeof(UT_hash_handle)*2)) + (((sizeof(struct iguana_account)) * 2 * numpkinds)) + (2 * numunspents * sizeof(struct iguana_Uextra)));
allocsize += (scriptspace + IGUANA_MAXSCRIPTSIZE + ((numtxids + numpkinds) * (sizeof(UT_hash_handle)*2)) + (((sizeof(struct iguana_account)) * 2 * numpkinds)) + (2 * numunspents * sizeof(struct iguana_bundleind)));
if ( allocsize >= (1LL << 32) )
{
printf("REALLY big hashmemsize %llu, truncate and hope for best\n",(long long)allocsize);
@ -857,13 +820,13 @@ void _iguana_ramchain_setptrs(RAMCHAIN_PTRPS,struct iguana_ramchaindata *rdata)
*X = (void *)(long)((long)rdata + (long)rdata->Xoffset);
//ramchain->roU2 = (void *)(long)((long)rdata + (long)rdata->U2offset);
//ramchain->roP2 = (void *)(long)((long)rdata + (long)rdata->P2offset);
ramchain->roA = (void *)(long)(long)((long)rdata + (long)rdata->Aoffset);
ramchain->creditsA = (void *)(long)(long)((long)rdata + (long)rdata->Aoffset);
//if ( (*U2= ramchain->U2) == 0 )
// *U2 = ramchain->U2 = ramchain->roU2;
//if ( (*P2= ramchain->P2) == 0 )
// *P2 = ramchain->P2 = ramchain->roP2;
if ( (*A= ramchain->A) == 0 )
*A = ramchain->A = ramchain->roA;
*A = ramchain->A = ramchain->creditsA;
//printf("T.%p Ux.%p Sx.%p P.%p\n",*T,*Ux,*Sx,*P);
*TXbits = (void *)(long)((long)rdata + (long)rdata->TXoffset);
*PKbits = (void *)(long)((long)rdata + (long)rdata->PKoffset);
@ -1309,13 +1272,13 @@ int32_t iguana_ramchain_verify(struct iguana_info *coin,struct iguana_ramchain *
}
}
}
if ( ramchain->expanded != 0 && ramchain->A != ramchain->roA )
if ( ramchain->expanded != 0 && ramchain->A != ramchain->creditsA )
{
for (k=rdata->firsti; k<rdata->numpkinds; k++)
{
if ( memcmp(&ramchain->A[k],&ramchain->roA[k],sizeof(ramchain->A[k])) != 0 )
if ( memcmp(&ramchain->A[k],&ramchain->creditsA[k],sizeof(ramchain->A[k])) != 0 )
{
printf("k.%d balance.(%.8f vs %.8f) lastU.(%d %d)\n",k,dstr(ramchain->A[k].balance),dstr(ramchain->roA[k].balance),ramchain->A[k].lastunspentind,ramchain->roA[k].lastunspentind);
printf("k.%d balance.(%.8f vs %.8f) lastU.(%d %d)\n",k,dstr(ramchain->A[k].total),dstr(ramchain->creditsA[k].total),ramchain->A[k].lastind,ramchain->creditsA[k].lastind);
//return(-14);
}
//if ( memcmp(&ramchain->P2[k],&ramchain->roP2[k],sizeof(ramchain->P2[k])) != 0 )
@ -1333,8 +1296,8 @@ int32_t iguana_ramchain_free(struct iguana_ramchain *ramchain,int32_t deleteflag
struct iguana_kvitem *item,*tmp;
if ( ramchain->H.ROflag != 0 && ramchain->hashmem == 0 )
{
//printf("Free A %p %p, U2, P2\n",ramchain->A,ramchain->roA);
if ( ramchain->A != ramchain->roA )
//printf("Free A %p %p, U2, P2\n",ramchain->A,ramchain->creditsA);
if ( ramchain->A != ramchain->creditsA )
myfree(ramchain->A,sizeof(*ramchain->A) * ramchain->H.data->numpkinds), ramchain->A = 0;
//if ( ramchain->U2 != ramchain->roU2 )
// myfree(ramchain->U2,sizeof(*ramchain->U2) * ramchain->H.data->numunspents), ramchain->U2 = 0;
@ -2117,7 +2080,7 @@ int32_t iguana_ramchain_expandedsave(struct iguana_info *coin,RAMCHAIN_FUNC,stru
*newchain = *ramchain;
//memcpy(ramchain->roU2,ramchain->U2,sizeof(*ramchain->U2) * ramchain->H.data->numunspents);
//memcpy(ramchain->roP2,ramchain->P2,sizeof(*ramchain->P2) * ramchain->H.data->numpkinds);
memcpy(ramchain->roA,ramchain->A,sizeof(*ramchain->A) * ramchain->H.data->numpkinds);
memcpy(ramchain->creditsA,ramchain->A,sizeof(*ramchain->A) * ramchain->H.data->numpkinds);
memset(ramchain->A,0,sizeof(*ramchain->A) * ramchain->H.data->numpkinds);
//printf("presave T.%d U.%d S.%d P.%d X.%d -> size.%ld firsti.%d\n",ramchain->H.data->numtxids,ramchain->H.data->numunspents,ramchain->H.data->numspends,ramchain->H.data->numpkinds,ramchain->H.data->numexternaltxids,(long)ramchain->H.data->allocsize,firsti);
//printf("0 preSAVE: Koffset.%d scriptoffset.%d stacksize.%d allocsize.%d\n",(int32_t)ramchain->H.data->Koffset,ramchain->H.scriptoffset,ramchain->H.stacksize,(int32_t)ramchain->H.data->allocsize);
@ -2406,6 +2369,7 @@ int32_t iguana_bundlesaveHT(struct iguana_info *coin,struct OS_memspace *mem,str
iguana_bundlemapfree(mem,&HASHMEM,ipbits,ptrs,filesizes,num,R,bp->n);
if ( retval == 0 )//|| bp->generrs > 3 )
{
char dirname[1024];
//printf("delete %d files hdrs.%d retval.%d\n",num,bp->hdrsi,retval);
for (j=0; j<num; j++)
{
@ -2413,6 +2377,8 @@ int32_t iguana_bundlesaveHT(struct iguana_info *coin,struct OS_memspace *mem,str
coin->peers.numfiles -= OS_removefile(fname,0);
else printf("error removing.(%s)\n",fname);
}
sprintf(dirname,"%s/%s/%d",GLOBALTMPDIR,coin->symbol,bp->bundleheight);
OS_portable_rmdir(dirname,1);
bp->ramchain = newchain;
iguana_bundleload(coin,bp);
}

4
iguana/iguana_recv.c

@ -468,7 +468,7 @@ int32_t iguana_bundleiters(struct iguana_info *coin,struct iguana_bundle *bp,int
char str[64];
queue_enqueue("hdrsQ",&coin->hdrsQ,queueitem(bits256_str(str,bp->hashes[0])),1);
}
else if ( time(NULL) > bp->lastspeculative+600 || (bp->hdrsi == starti && time(NULL) > bp->lastspeculative+90) )
else if ( time(NULL) > bp->lastspeculative+3600 || (bp->hdrsi == starti && time(NULL) > bp->lastspeculative+90) )
{
for (i=1,counter=0; i<bp->n && i<bp->numspec; i++)
{
@ -561,7 +561,7 @@ int32_t iguana_bundleiters(struct iguana_info *coin,struct iguana_bundle *bp,int
endmillis = OS_milliseconds() + timelimit + (rand() % 1000);
if ( bp->numsaved < bp->n )
width = 100 + max*100;//sqrt(sqrt(bp->n * (1+bp->numsaved+issued)) * (10+coin->bundlescount-bp->hdrsi));
if ( 1 && bp->hdrsi == starti )
if ( 0 && bp->hdrsi == starti )
printf("ITERATE.%d max.%d bundle.%d h.%d n.%d r.%d s.%d F.%d I.%d T.%d %f %u next %f counter.%d\n",bp->rank,max,bp->bundleheight/coin->chain->bundlesize,bp->numhashes,bp->n,bp->numrecv,bp->numsaved,bp->emitfinish,issued,timelimit,endmillis-OS_milliseconds(),(uint32_t)time(NULL),width,counter);
if ( bp->emitfinish == 0 )
{

37
iguana/iguana_scripts.c

@ -783,6 +783,43 @@ char *iguana_scriptget(struct iguana_info *coin,char *scriptstr,char *asmstr,int
#ifdef later
uint32_t iguana_ramchain_pubkeyoffset(struct iguana_info *coin,RAMCHAIN_FUNC,int32_t createflag,uint32_t *pkindp,uint32_t *scriptoffsetp,uint8_t *pubkey,uint8_t rmd160[20])
{
uint32_t pkind; int32_t plen; struct iguana_kvitem *ptr;
if ( (ptr= iguana_hashfind(ramchain,'P',rmd160)) == 0 )
{
if ( createflag != 0 )
{
//printf("from pubkeyoffset\n");
pkind = iguana_ramchain_addpkhash(coin,RAMCHAIN_ARG,rmd160,0,0,0);
//int32_t i; for (i=0; i<33; i++)
// printf("%02x",pubkey[i]);
//printf(" pkind.%d created from pubkeyoffset\n",pkind);
*pkindp = pkind + 1;
} else return(0);
} else pkind = ptr->hh.itemind;
if ( P[pkind].pubkeyoffset == 0 )
{
plen = bitcoin_pubkeylen(pubkey);
if ( plen > 0 )
{
if ( *scriptoffsetp == 0 )
*scriptoffsetp++ = 0;
P[pkind].pubkeyoffset = *scriptoffsetp, *scriptoffsetp += plen;
// printf(" plen.%d -> new offset.%d\n",plen,*scriptoffsetp);
memcpy(&Kspace[P[pkind].pubkeyoffset],pubkey,plen);
}
else
{
//int32_t i; for (i=0; i<plen; i++)
// printf("%02x",pubkey[i]);
//printf("iguana_ramchain_pubkeyoffset: illegal pubkey?\n");
return(0);
}
}
return(P[pkind].pubkeyoffset);
}
int32_t iguana_vinscriptdecode(struct iguana_info *coin,struct iguana_ramchain *ramchain,int32_t *metalenp,uint8_t _script[IGUANA_MAXSCRIPTSIZE],uint8_t *Kstackend,uint8_t *Kspace,struct iguana_spend *s)
{
int32_t i,suffixlen,len = 0; long diff; uint8_t *pubkey,*metascript = &Kspace[s->scriptoffset]; uint32_t poffset; int32_t totalsize,sigslen,plen,stacksize=0,p2shlen=0,scriptlen = 0;

24
iguana/iguana_unspents.c

@ -35,8 +35,8 @@ struct iguana_pkhash *iguana_pkhashfind(struct iguana_info *coin,struct iguana_r
if ( (pkind= iguana_sparseaddpk(PKbits,ramchain->H.data->pksparsebits,ramchain->H.data->numpksparse,rmd160,P,0)) > 0 && pkind < ramchain->H.data->numpkinds )
{
*ramchainp = ramchain;
*balancep = ACCTS[pkind].balance;
*lastunspentindp = ACCTS[pkind].lastunspentind;
*balancep = ACCTS[pkind].total;
*lastunspentindp = ACCTS[pkind].lastind;
*p = P[pkind];
return(p);
} //else printf("not found pkind.%d vs num.%d\n",pkind,ramchain->H.data->numpkinds);
@ -75,11 +75,7 @@ struct iguana_bundle *iguana_spent(struct iguana_info *coin,uint32_t *unspentind
struct iguana_bundle *spentbp=0; struct iguana_txid *T,TX,*tp; bits256 *X; bits256 prev_hash;
X = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Xoffset);
T = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Toffset);
if ( s->sequenceid == 1 )
sequenceid = 0xffffffff;
else if ( s->sequenceid == 2 )
sequenceid = 0xfffffffe;
else sequenceid = 0;
sequenceid = s->sequenceid;
hdrsi = spend_hdrsi;
if ( s->prevout < 0 )
{
@ -109,15 +105,15 @@ struct iguana_bundle *iguana_spent(struct iguana_info *coin,uint32_t *unspentind
}
if ( hdrsi > spend_hdrsi || (spentbp= coin->bundles[hdrsi]) == 0 )
printf("illegal hdrsi.%d when [%d] spentbp.%p\n",hdrsi,spend_hdrsi,spentbp);//, getchar();
else if ( spentbp->ramchain.spents[unspentind].spendind != 0 || hdrsi < 0 )
printf("DOUBLE SPEND? U%d %p bp.[%d] unspentind.%u already has %u, no room\n",unspentind,&spentbp->ramchain.spents[unspentind],hdrsi,unspentind,spentbp->ramchain.spents[unspentind].spendind);//, getchar();
else if ( spentbp->ramchain.spents[unspentind].ind != 0 || hdrsi < 0 )
printf("DOUBLE SPEND? U%d %p bp.[%d] unspentind.%u already has %u, no room\n",unspentind,&spentbp->ramchain.spents[unspentind],hdrsi,unspentind,spentbp->ramchain.spents[unspentind].ind);//, getchar();
else if ( unspentind == 0 || unspentind >= spentbp->ramchain.H.data->numunspents )
printf("illegal unspentind.%d vs max.%d spentbp.%p[%d]\n",unspentind,spentbp->ramchain.H.data->numunspents,spentbp,hdrsi);//, getchar();
else return(spentbp);
return(0);
}
int32_t iguana_spentsinit(struct iguana_info *coin,struct iguana_Uextra *spents,struct iguana_bundle *bp,struct iguana_ramchain *ramchain)
int32_t iguana_spentsinit(struct iguana_info *coin,struct iguana_bundleind *spents,struct iguana_bundle *bp,struct iguana_ramchain *ramchain)
{
//struct iguana_Uextra { uint32_t spendind; uint16_t hdrsi; } __attribute__((packed)); // unspentind
//struct iguana_spend { uint32_t spendtxidind; int16_t prevout; uint16_t tbd:14,external:1,diffsequence:1; } __attribute__((packed));
@ -134,7 +130,7 @@ int32_t iguana_spentsinit(struct iguana_info *coin,struct iguana_Uextra *spents,
hdrsi = bp->hdrsi;
if ( (spentbp= iguana_spent(coin,&unspentind,ramchain,bp->hdrsi,&S[spendind])) != 0 )
{
spentbp->ramchain.spents[unspentind].spendind = spendind;
spentbp->ramchain.spents[unspentind].ind = spendind;
spentbp->ramchain.spents[unspentind].hdrsi = bp->hdrsi;
printf("%p bp.[%d] U%d <- S%d.[%d] [%p %p %p]\n",&spentbp->ramchain.spents[unspentind],hdrsi,unspentind,spendind,bp->hdrsi,coin->bundles[0],coin->bundles[1],coin->bundles[2]);
flag = 1;
@ -150,7 +146,7 @@ int32_t iguana_spentsinit(struct iguana_info *coin,struct iguana_Uextra *spents,
// if file exists and is valid, load and then process only the incremental
long iguana_spentsfile(struct iguana_info *coin,int32_t n)
{
int32_t i,iter,allocated = 0; long filesize,total,count; struct iguana_Uextra *spents = 0; struct iguana_ramchain *ramchain; char fname[1024]; struct iguana_bundle *bp; FILE *fp;
int32_t i,iter,allocated = 0; long filesize,total,count; struct iguana_bundleind *spents = 0; struct iguana_ramchain *ramchain; char fname[1024]; struct iguana_bundle *bp; FILE *fp;
fname[0] = 0;
for (total=iter=0; iter<2; iter++)
{
@ -240,14 +236,12 @@ int64_t iguana_pkhashbalance(struct iguana_info *coin,cJSON *array,int64_t *spen
{
(*nump)++;
printf("%s u.%d %.8f\n",jprint(iguana_unspentjson(coin,hdrsi,unspentind,T,&U[unspentind],rmd160,coinaddr,pubkey33),1),unspentind,dstr(U[unspentind].value));
if ( ramchain->spents[unspentind].spendind == 0 )
if ( ramchain->spents[unspentind].ind == 0 )
{
balance += U[unspentind].value;
if ( array != 0 )
jaddi(array,iguana_unspentjson(coin,hdrsi,unspentind,T,&U[unspentind],rmd160,coinaddr,pubkey33));
} else (*spentp) += U[unspentind].value;
//if ( unspentind == p->firstunspentind )
// break;
unspentind = U[unspentind].prevunspentind;
}
return(balance);

Loading…
Cancel
Save