Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
6919f2bac0
  1. 1
      iguana/iguana777.h
  2. 40
      iguana/iguana_init.c
  3. 6
      iguana/iguana_ramchain.c

1
iguana/iguana777.h

@ -378,6 +378,7 @@ struct iguana_ramchain
struct iguana_kvitem *txids,*pkhashes; struct iguana_kvitem *txids,*pkhashes;
struct OS_memspace *hashmem; long filesize,sigsfilesize,debitsfilesize,lastspendsfilesize; struct OS_memspace *hashmem; long filesize,sigsfilesize,debitsfilesize,lastspendsfilesize;
void *fileptr,*sigsfileptr,*Xspendptr,*debitsfileptr,*lastspendsfileptr; void *fileptr,*sigsfileptr,*Xspendptr,*debitsfileptr,*lastspendsfileptr;
char from_ro,from_roX,from_roA,from_roU;
struct iguana_account *A,*creditsA; struct iguana_spendvector *Xspendinds; struct iguana_account *A,*creditsA; struct iguana_spendvector *Xspendinds;
struct iguana_utxo *Uextras; struct iguana_utxo *Uextras;
//struct iguana_Uextra *U2,*roU2; struct iguana_pkextra *P2,*roP2; //struct iguana_Uextra *U2,*roU2; struct iguana_pkextra *P2,*roP2;

40
iguana/iguana_init.c

@ -214,7 +214,7 @@ void iguana_truncatebalances(struct iguana_info *coin)
void iguana_parseline(struct iguana_info *coin,int32_t iter,FILE *fp) void iguana_parseline(struct iguana_info *coin,int32_t iter,FILE *fp)
{ {
int32_t i,j,k,m,c,height,flag,bundlei; char checkstr[1024],line[1024]; int32_t i,j,k,m,c,height,flag,bundlei,from_ro; char checkstr[1024],line[1024];
struct iguana_peer *addr; struct iguana_bundle *bp; bits256 allhash,hash2,zero,lastbundle; struct iguana_peer *addr; struct iguana_bundle *bp; bits256 allhash,hash2,zero,lastbundle;
struct iguana_block *block; struct iguana_block *block;
memset(&zero,0,sizeof(zero)); memset(&zero,0,sizeof(zero));
@ -330,9 +330,14 @@ void iguana_parseline(struct iguana_info *coin,int32_t iter,FILE *fp)
{ {
if ( coin->balanceswritten > 0 ) if ( coin->balanceswritten > 0 )
{ {
from_ro = 1;
for (i=0; i<coin->balanceswritten; i++) for (i=0; i<coin->balanceswritten; i++)
{
if ( (bp= coin->bundles[i]) == 0 || bp->emitfinish <= 1 || bp->utxofinish <= 1 ) if ( (bp= coin->bundles[i]) == 0 || bp->emitfinish <= 1 || bp->utxofinish <= 1 )
break; break;
if ( bp->ramchain.from_ro == 0 || bp->ramchain.from_roX == 0 || bp->ramchain.from_roA == 0 || bp->ramchain.from_roU == 0 )
from_ro = 0;
}
if ( i != coin->balanceswritten ) if ( i != coin->balanceswritten )
{ {
printf("TRUNCATE balances written.%d -> %d\n",coin->balanceswritten,i); printf("TRUNCATE balances written.%d -> %d\n",coin->balanceswritten,i);
@ -356,24 +361,27 @@ void iguana_parseline(struct iguana_info *coin,int32_t iter,FILE *fp)
} }
if ( filecrc != 0 ) if ( filecrc != 0 )
printf("have filecrc.%08x for %s milli.%.0f\n",filecrc,bits256_str(str,balancehash),OS_milliseconds()); printf("have filecrc.%08x for %s milli.%.0f\n",filecrc,bits256_str(str,balancehash),OS_milliseconds());
if ( filecrc == 0 ) if ( from_ro == 0 )
vupdate_sha256(balancehash.bytes,&vstate,0,0);
for (i=crc=0; i<coin->balanceswritten; i++)
{ {
numpkinds = numunspents = 0; if ( filecrc == 0 )
Aptr = 0, Uptr = 0; vupdate_sha256(balancehash.bytes,&vstate,0,0);
if ( (bp= coin->bundles[i]) != 0 && bp->ramchain.H.data != 0 && (numpkinds= bp->ramchain.H.data->numpkinds) > 0 && (numunspents= bp->ramchain.H.data->numunspents) > 0 && (Aptr= bp->ramchain.A) != 0 && (Uptr= bp->ramchain.Uextras) != 0 ) for (i=crc=0; i<coin->balanceswritten; i++)
{ {
if ( filecrc == 0 ) numpkinds = numunspents = 0;
Aptr = 0, Uptr = 0;
if ( (bp= coin->bundles[i]) != 0 && bp->ramchain.H.data != 0 && (numpkinds= bp->ramchain.H.data->numpkinds) > 0 && (numunspents= bp->ramchain.H.data->numunspents) > 0 && (Aptr= bp->ramchain.A) != 0 && (Uptr= bp->ramchain.Uextras) != 0 )
{ {
vupdate_sha256(balancehash.bytes,&vstate,(void *)Aptr,sizeof(*Aptr)*numpkinds); if ( filecrc == 0 )
vupdate_sha256(balancehash.bytes,&vstate,(void *)Uptr,sizeof(*Uptr)*numunspents); {
} vupdate_sha256(balancehash.bytes,&vstate,(void *)Aptr,sizeof(*Aptr)*numpkinds);
crc = calc_crc32(crc,(void *)Aptr,(int32_t)(sizeof(*Aptr) * numpkinds)); vupdate_sha256(balancehash.bytes,&vstate,(void *)Uptr,sizeof(*Uptr)*numunspents);
crc = calc_crc32(crc,(void *)Uptr,(int32_t)(sizeof(*Uptr) * numunspents)); }
} else printf("missing hdrs.[%d] data.%p num.(%u %d) %p %p\n",i,bp->ramchain.H.data,numpkinds,numunspents,Aptr,Uptr); crc = calc_crc32(crc,(void *)Aptr,(int32_t)(sizeof(*Aptr) * numpkinds));
} crc = calc_crc32(crc,(void *)Uptr,(int32_t)(sizeof(*Uptr) * numunspents));
printf("millis %.0f written.%d crc.%08x/%08x balancehash.(%s) vs (%s)\n",OS_milliseconds(),coin->balanceswritten,crc,filecrc,bits256_str(str,balancehash),bits256_str(str2,coin->balancehash)); } else printf("missing hdrs.[%d] data.%p num.(%u %d) %p %p\n",i,bp->ramchain.H.data,numpkinds,numunspents,Aptr,Uptr);
}
} else crc = filecrc;
printf("millis %.0f from_ro.%d written.%d crc.%08x/%08x balancehash.(%s) vs (%s)\n",OS_milliseconds(),from_ro,coin->balanceswritten,crc,filecrc,bits256_str(str,balancehash),bits256_str(str2,coin->balancehash));
if ( (filecrc != 0 && filecrc != crc) || memcmp(balancehash.bytes,coin->balancehash.bytes,sizeof(balancehash)) != 0 ) if ( (filecrc != 0 && filecrc != crc) || memcmp(balancehash.bytes,coin->balancehash.bytes,sizeof(balancehash)) != 0 )
{ {
printf("balancehash or crc mismatch\n"); printf("balancehash or crc mismatch\n");

6
iguana/iguana_ramchain.c

@ -1365,6 +1365,7 @@ int32_t iguana_ramchain_extras(struct iguana_info *coin,struct iguana_ramchain *
sprintf(fname,"DB/%s%s/accounts/debits.%d",iter==0?"ro":"",coin->symbol,ramchain->H.data->height); sprintf(fname,"DB/%s%s/accounts/debits.%d",iter==0?"ro":"",coin->symbol,ramchain->H.data->height);
if ( (ramchain->debitsfileptr= OS_mapfile(fname,&ramchain->debitsfilesize,0)) != 0 && ramchain->debitsfilesize == sizeof(int32_t) + sizeof(bits256) + sizeof(*ramchain->A) * ramchain->H.data->numpkinds ) if ( (ramchain->debitsfileptr= OS_mapfile(fname,&ramchain->debitsfilesize,0)) != 0 && ramchain->debitsfilesize == sizeof(int32_t) + sizeof(bits256) + sizeof(*ramchain->A) * ramchain->H.data->numpkinds )
{ {
ramchain->from_roA = (iter == 0);
numhdrsi = *(int32_t *)ramchain->debitsfileptr; numhdrsi = *(int32_t *)ramchain->debitsfileptr;
memcpy(balancehash.bytes,(void *)((long)ramchain->debitsfileptr + sizeof(numhdrsi)),sizeof(balancehash)); memcpy(balancehash.bytes,(void *)((long)ramchain->debitsfileptr + sizeof(numhdrsi)),sizeof(balancehash));
if ( coin->balanceswritten == 0 ) if ( coin->balanceswritten == 0 )
@ -1383,6 +1384,7 @@ int32_t iguana_ramchain_extras(struct iguana_info *coin,struct iguana_ramchain *
if ( numhdrsi == coin->balanceswritten || memcmp(balancehash.bytes,coin->balancehash.bytes,sizeof(balancehash)) == 0 ) if ( numhdrsi == coin->balanceswritten || memcmp(balancehash.bytes,coin->balancehash.bytes,sizeof(balancehash)) == 0 )
{ {
ramchain->Uextras = (void *)((long)ramchain->lastspendsfileptr + sizeof(numhdrsi) + sizeof(bits256)); ramchain->Uextras = (void *)((long)ramchain->lastspendsfileptr + sizeof(numhdrsi) + sizeof(bits256));
ramchain->from_roU = (iter == 0);
err = 0; err = 0;
} else printf("ramchain map error2 balanceswritten %d vs %d hashes %x %x\n",coin->balanceswritten,numhdrsi,coin->balancehash.uints[0],balancehash.uints[0]); } else printf("ramchain map error2 balanceswritten %d vs %d hashes %x %x\n",coin->balanceswritten,numhdrsi,coin->balancehash.uints[0],balancehash.uints[0]);
} else printf("ramchain map error3 %s\n",fname); } else printf("ramchain map error3 %s\n",fname);
@ -1430,6 +1432,7 @@ int32_t iguana_Xspendmap(struct iguana_info *coin,struct iguana_ramchain *ramcha
bp->startutxo = bp->utxofinish = (uint32_t)time(NULL); bp->startutxo = bp->utxofinish = (uint32_t)time(NULL);
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));
ramchain->from_roX = (iter == 0);
return(ramchain->numXspends); return(ramchain->numXspends);
//int32_t i; for (i=0; i<ramchain->numXspends; i++) //int32_t i; for (i=0; i<ramchain->numXspends; i++)
// printf("(%d u%d) ",ramchain->Xspendinds[i].hdrsi,ramchain->Xspendinds[i].ind); // printf("(%d u%d) ",ramchain->Xspendinds[i].hdrsi,ramchain->Xspendinds[i].ind);
@ -1474,6 +1477,7 @@ struct iguana_ramchain *iguana_ramchain_map(struct iguana_info *coin,char *fname
memset(ramchain,0,sizeof(*ramchain)); memset(ramchain,0,sizeof(*ramchain));
if ( (ptr= OS_mapfile(fname,&filesize,0)) == 0 ) if ( (ptr= OS_mapfile(fname,&filesize,0)) == 0 )
continue; continue;
ramchain->from_ro = (iter == 0);
ramchain->fileptr = ptr; ramchain->fileptr = ptr;
ramchain->filesize = (long)filesize; ramchain->filesize = (long)filesize;
if ( (ramchain->hashmem= hashmem) != 0 ) if ( (ramchain->hashmem= hashmem) != 0 )
@ -1543,7 +1547,7 @@ struct iguana_ramchain *iguana_ramchain_map(struct iguana_info *coin,char *fname
if ( iguana_ramchain_extras(coin,ramchain,ramchain->hashmem,allocextras) == 0 && bp != 0 ) if ( iguana_ramchain_extras(coin,ramchain,ramchain->hashmem,allocextras) == 0 && bp != 0 )
{ {
bp->balancefinish = (uint32_t)time(NULL); bp->balancefinish = (uint32_t)time(NULL);
printf("found balances for %d\n",bp->hdrsi); //printf("found balances for %d\n",bp->hdrsi);
} else printf("error with extras\n"); } else printf("error with extras\n");
} }
} }

Loading…
Cancel
Save