Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
7ddd4aecd4
  1. 2
      crypto777/iguana_OS.c
  2. 1
      iguana/iguana777.h
  3. 2
      iguana/iguana_init.c
  4. 14
      iguana/iguana_ramchain.c
  5. 4
      iguana/iguana_recv.c
  6. 24
      iguana/iguana_unspents.c

2
crypto777/iguana_OS.c

@ -536,7 +536,7 @@ void OS_ensure_directory(char *dirname)
#endif #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); } else fclose(fp);//, printf("dirname.(%s) exists\n",dirname);
if ( (fp= fopen(fname,"wb")) != 0 ) 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 printf("cant create.(%s) errno.%d %s\n",fname,errno,strerror(errno));

1
iguana/iguana777.h

@ -791,6 +791,7 @@ void iguana_validateQ(struct iguana_info *coin,struct iguana_bundle *bp);
struct iguana_bloominds iguana_calcbloom(bits256 hash2); struct iguana_bloominds iguana_calcbloom(bits256 hash2);
int32_t iguana_bloomfind(struct iguana_info *coin,struct iguana_bloom16 *bloom,int32_t incr,struct iguana_bloominds bit); int32_t iguana_bloomfind(struct iguana_info *coin,struct iguana_bloom16 *bloom,int32_t incr,struct iguana_bloominds bit);
struct iguana_bloominds iguana_bloomset(struct iguana_info *coin,struct iguana_bloom16 *bloom,int32_t incr,struct iguana_bloominds bit); struct iguana_bloominds iguana_bloomset(struct iguana_info *coin,struct iguana_bloom16 *bloom,int32_t incr,struct iguana_bloominds bit);
int32_t iguana_Xspendmap(struct iguana_info *coin,struct iguana_ramchain *ramchain,struct iguana_bundle *bp);
extern queue_t bundlesQ,validateQ; extern queue_t bundlesQ,validateQ;
extern char GLOBALTMPDIR[]; extern char GLOBALTMPDIR[];

2
iguana/iguana_init.c

@ -286,7 +286,7 @@ void iguana_parseline(struct iguana_info *coin,int32_t iter,FILE *fp)
init_hexbytes_noT(str,hash2.bytes,sizeof(hash2)); init_hexbytes_noT(str,hash2.bytes,sizeof(hash2));
bp->emitfinish = 0; bp->emitfinish = 0;
iguana_blockQ(coin,bp,0,hash2,1); iguana_blockQ(coin,bp,0,hash2,1);
printf("init reqhdrs.%d\n",bp->bundleheight); //printf("init reqhdrs.%d\n",bp->bundleheight);
queue_enqueue("hdrsQ",&coin->hdrsQ,queueitem(str),1); queue_enqueue("hdrsQ",&coin->hdrsQ,queueitem(str),1);
} }
} }

14
iguana/iguana_ramchain.c

@ -252,7 +252,9 @@ int32_t iguana_peerfname(struct iguana_info *coin,int32_t *hdrsip,char *dirname,
return(-3); return(-3);
} }
} }
else sprintf(fname,"%s/%s/%s_%d.%u",dirname,coin->symbol,bits256_str(str,hash2),numblocks,ipbits!=0?ipbits:*hdrsip); else if ( strcmp("DB",dirname) == 0 )
sprintf(fname,"%s/%s/%s_%d.%u",dirname,coin->symbol,bits256_str(str,hash2),numblocks,ipbits!=0?ipbits:*hdrsip);
else sprintf(fname,"%s/%s.%u",dirname,bits256_str(str,hash2),bp->bundleheight);
OS_compatible_path(fname); OS_compatible_path(fname);
return(bundlei); return(bundlei);
} }
@ -1278,8 +1280,9 @@ void iguana_ramchain_extras(struct iguana_ramchain *ramchain,struct OS_memspace
int32_t iguana_Xspendmap(struct iguana_info *coin,struct iguana_ramchain *ramchain,struct iguana_bundle *bp) int32_t iguana_Xspendmap(struct iguana_info *coin,struct iguana_ramchain *ramchain,struct iguana_bundle *bp)
{ {
int32_t hdrsi; bits256 sha256; char fname[1024]; void *ptr; long filesize; static bits256 zero; int32_t hdrsi; bits256 sha256; char fname[1024],dirname[128]; void *ptr; long filesize; static bits256 zero;
if ( iguana_peerfname(coin,&hdrsi,"DB/utxo",fname,0,bp->hashes[0],zero,bp->n) >= 0 ) sprintf(dirname,"DB/%s/utxo",coin->symbol);
if ( iguana_peerfname(coin,&hdrsi,dirname,fname,0,bp->hashes[0],zero,bp->n) >= 0 )
{ {
if ( (ptr= OS_mapfile(fname,&filesize,0)) != 0 ) if ( (ptr= OS_mapfile(fname,&filesize,0)) != 0 )
{ {
@ -1289,15 +1292,16 @@ int32_t iguana_Xspendmap(struct iguana_info *coin,struct iguana_ramchain *ramcha
{ {
ramchain->Xspendptr = ptr; ramchain->Xspendptr = ptr;
ramchain->numXspends = (int32_t)((filesize - sizeof(sha256)) / sizeof(*ramchain->Xspendinds)); ramchain->numXspends = (int32_t)((filesize - sizeof(sha256)) / sizeof(*ramchain->Xspendinds));
printf("mapped utxo vector[%d] from (%s)\n",ramchain->numXspends,fname); //printf("mapped utxo vector[%d] from (%s)\n",ramchain->numXspends,fname);
} }
else else
{ {
char str[65]; printf("hash cmp error.%d vs (%s)\n",memcmp(sha256.bytes,ptr,sizeof(sha256)),bits256_str(str,sha256));
munmap(ptr,filesize); munmap(ptr,filesize);
ramchain->Xspendinds = 0; ramchain->Xspendinds = 0;
} }
} }
} } else printf("couldnt open.(%s)\n",fname);
return(ramchain->numXspends); return(ramchain->numXspends);
} }

4
iguana/iguana_recv.c

@ -487,9 +487,9 @@ int32_t iguana_bundleiters(struct iguana_info *coin,struct iguana_bundle *bp,int
return(0); return(0);
} }
} }
if ( bp->emitfinish != 0 ) if ( bp->emitfinish > coin->startutc )
{ {
if ( bp->emitfinish >= coin->startutc && (bp->hdrsi == 0 || ((prevbp= coin->bundles[bp->hdrsi-1]) != 0 && prevbp->emitfinish >= coin->startutc)) ) if ( bp->hdrsi == 0 || ((prevbp= coin->bundles[bp->hdrsi-1]) != 0 && prevbp->ramchain.Xspendptr != 0) )
{ {
if ( bp->startutxo == 0 ) if ( bp->startutxo == 0 )
{ {

24
iguana/iguana_unspents.c

@ -105,8 +105,8 @@ struct iguana_bundle *iguana_spent(struct iguana_info *coin,uint32_t *unspentind
} }
if ( hdrsi > spend_hdrsi || (spentbp= coin->bundles[hdrsi]) == 0 ) if ( hdrsi > spend_hdrsi || (spentbp= coin->bundles[hdrsi]) == 0 )
printf("illegal hdrsi.%d when [%d] spentbp.%p\n",hdrsi,spend_hdrsi,spentbp);//, getchar(); printf("illegal hdrsi.%d when [%d] spentbp.%p\n",hdrsi,spend_hdrsi,spentbp);//, getchar();
else if ( spentbp->ramchain.spents[unspentind].ind != 0 || hdrsi < 0 ) //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(); // 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 ) 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(); printf("illegal unspentind.%d vs max.%d spentbp.%p[%d]\n",unspentind,spentbp->ramchain.H.data->numunspents,spentbp,hdrsi);//, getchar();
else return(spentbp); else return(spentbp);
@ -315,7 +315,7 @@ uint8_t *iguana_rmdarray(struct iguana_info *coin,int32_t *numrmdsp,cJSON *array
int32_t iguana_utxogen(struct iguana_info *coin,struct iguana_bundle *bp) int32_t iguana_utxogen(struct iguana_info *coin,struct iguana_bundle *bp)
{ {
int32_t spendind,n,emit=0; uint32_t unspentind; struct iguana_bundle *spentbp; int32_t spendind,n,emit=0; uint32_t unspentind; struct iguana_bundle *spentbp;
FILE *fp; char fname[1024],str[65]; int32_t hdrsi,retval = -1; bits256 zero,sha256; FILE *fp; char fname[1024],str[65],dirname[128]; int32_t hdrsi,retval = -1; bits256 zero,sha256;
struct iguana_spend *S,*s; struct iguana_bundleind *ptr; struct iguana_ramchain *ramchain; struct iguana_spend *S,*s; struct iguana_bundleind *ptr; struct iguana_ramchain *ramchain;
ramchain = &bp->ramchain; ramchain = &bp->ramchain;
S = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Soffset); S = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Soffset);
@ -326,8 +326,8 @@ int32_t iguana_utxogen(struct iguana_info *coin,struct iguana_bundle *bp)
printf("iguana_utxogen: already have Xspendinds[%d]\n",ramchain->numXspends); printf("iguana_utxogen: already have Xspendinds[%d]\n",ramchain->numXspends);
return(0); return(0);
} }
printf("start UTXOGEN.%d max.%d\n",bp->bundleheight,n);
ptr = malloc(sizeof(*ptr) * n); ptr = malloc(sizeof(*ptr) * n);
printf("start UTXOGEN.%d max.%d ptr.%p\n",bp->bundleheight,n,ptr);
for (spendind=ramchain->H.data->firsti; spendind<n; spendind++) for (spendind=ramchain->H.data->firsti; spendind<n; spendind++)
{ {
s = &S[spendind]; s = &S[spendind];
@ -335,9 +335,8 @@ int32_t iguana_utxogen(struct iguana_info *coin,struct iguana_bundle *bp)
{ {
if ( (spentbp= iguana_spent(coin,&unspentind,ramchain,bp->hdrsi,s)) != 0 ) if ( (spentbp= iguana_spent(coin,&unspentind,ramchain,bp->hdrsi,s)) != 0 )
{ {
ptr->ind = unspentind; ptr[emit].ind = unspentind;
ptr->hdrsi = spentbp->hdrsi; ptr[emit].hdrsi = spentbp->hdrsi;
ptr++;
emit++; emit++;
//spentbp->ramchain.spents[unspentind].ind = spendind; //spentbp->ramchain.spents[unspentind].ind = spendind;
//spentbp->ramchain.spents[unspentind].hdrsi = bp->hdrsi; //spentbp->ramchain.spents[unspentind].hdrsi = bp->hdrsi;
@ -346,11 +345,12 @@ int32_t iguana_utxogen(struct iguana_info *coin,struct iguana_bundle *bp)
} else printf("unresolved spendind.%d hdrsi.%d\n",spendind,bp->hdrsi); } else printf("unresolved spendind.%d hdrsi.%d\n",spendind,bp->hdrsi);
} }
} }
if ( emit != 0 ) if ( emit >= 0 )
{ {
memset(zero.bytes,0,sizeof(zero)); memset(zero.bytes,0,sizeof(zero));
sprintf(dirname,"DB/%s/utxo",coin->symbol);
vcalc_sha256(0,sha256.bytes,(void *)ptr,(int32_t)(sizeof(*ptr) * emit)); vcalc_sha256(0,sha256.bytes,(void *)ptr,(int32_t)(sizeof(*ptr) * emit));
if ( iguana_peerfname(coin,&hdrsi,"DB/utxo",fname,0,bp->hashes[0],zero,bp->n) >= 0 ) if ( iguana_peerfname(coin,&hdrsi,dirname,fname,0,bp->hashes[0],zero,bp->n) >= 0 )
{ {
if ( (fp= fopen(fname,"wb")) != 0 ) if ( (fp= fopen(fname,"wb")) != 0 )
{ {
@ -360,7 +360,13 @@ int32_t iguana_utxogen(struct iguana_info *coin,struct iguana_bundle *bp)
printf("error writing %d of %d -> (%s)\n",emit,n,fname); printf("error writing %d of %d -> (%s)\n",emit,n,fname);
else retval = 0; else retval = 0;
fclose(fp); fclose(fp);
if ( iguana_Xspendmap(coin,ramchain,bp) < 0 )
{
printf("error mapping Xspendmap.(%s)\n",fname);
retval = -1;
} }
//printf("filesize %ld Xspendptr.%p %p num.%d\n",ftell(fp),ramchain->Xspendptr,ramchain->Xspendinds,ramchain->numXspends);
} else printf("Error creating.(%s)\n",fname);
} else printf("error getting utxo fname\n"); } else printf("error getting utxo fname\n");
} }
free(ptr); free(ptr);

Loading…
Cancel
Save