diff --git a/iguana/iguana777.c b/iguana/iguana777.c index 719945caa..ea0668e31 100755 --- a/iguana/iguana777.c +++ b/iguana/iguana777.c @@ -424,7 +424,7 @@ void iguana_coinloop(void *arg) //printf("IDLE\n"); if ( str[0] != 0 ) { - if ( (rand() % 1000) == 0 ) + if ( (rand() % 10000) == 0 ) myallocated(0,0); } usleep(coin->polltimeout * 1000); diff --git a/iguana/iguana_bundles.c b/iguana/iguana_bundles.c index 4903b7f6f..2f48d7844 100755 --- a/iguana/iguana_bundles.c +++ b/iguana/iguana_bundles.c @@ -584,7 +584,7 @@ void iguana_bundleiters(struct iguana_info *coin,struct iguana_bundle *bp,int32_ { if ( (block= bp->blocks[i]) != 0 ) { - if ( block->fpipbits == 0 && (block->queued == 0 || bp->issued[i] == 0 || now > bp->issued[i]+1) ) + if ( block->fpipbits == 0 && (block->queued == 0 || bp->issued[i] == 0 || now > bp->issued[i]+60) ) { //if ( bp->bundleheight == 20000 ) // printf("(%d:%d) ",bp->hdrsi,i); diff --git a/iguana/iguana_ramchain.c b/iguana/iguana_ramchain.c index 0d2cd7a54..c2275755c 100755 --- a/iguana/iguana_ramchain.c +++ b/iguana/iguana_ramchain.c @@ -674,7 +674,16 @@ int64_t _iguana_rdata_action(FILE *fp,bits256 lhashes[IGUANA_NUMLHASHES],void *d continue; } offset = sizeof(struct iguana_ramchaindata); + char str[65]; + //if ( fparg != 0 && numblocks > 1 ) + // printf("%p B[0] %s -> ",B,bits256_str(str,B[0].hash2)); B = iguana_ramchain_offset(rdata,RAMCHAIN_LARG(IGUANA_LHASH_BLOCKS),fparg,fpos,B,&offset,(sizeof(struct iguana_blockRO) * numblocks),srcsize); + if ( 0 && fparg != 0 && numblocks > 1 ) + { + printf("%s %p\n",bits256_str(str,B[0].hash2),B); + if ( bits256_nonz(B[0].hash2) == 0 ) + getchar(); + } T = iguana_ramchain_offset(rdata,RAMCHAIN_LARG(IGUANA_LHASH_TXIDS),fparg,fpos,T,&offset,(sizeof(struct iguana_txid) * numtxids),srcsize); if ( expanded != 0 ) { @@ -1447,7 +1456,7 @@ long iguana_ramchain_data(struct iguana_info *coin,struct iguana_peer *addr,stru return(-1); iguana_ramchain_link(ramchain,origtxdata->block.RO.hash2,origtxdata->block.RO.hash2,bp->hdrsi,bp->bundleheight+bundlei,bundlei,1,firsti,0); _iguana_ramchain_setptrs(RAMCHAIN_PTRS,ramchain->H.data); - if ( T == 0 || U == 0 || S == 0 )// P == 0//|| X == 0 || A == 0 || U2 == 0 || P2 == 0 ) + if ( T == 0 || U == 0 || S == 0 || B == 0 )// P == 0//|| X == 0 || A == 0 || U2 == 0 || P2 == 0 ) { printf("fatal error getting txdataptrs\n"); return(-1); @@ -1483,6 +1492,7 @@ long iguana_ramchain_data(struct iguana_info *coin,struct iguana_peer *addr,stru { if ( (err= iguana_ramchain_verify(coin,ramchain)) == 0 ) { + B[0] = origtxdata->block.RO; if ( (fpos= (int32_t)iguana_ramchain_save(coin,RAMCHAIN_ARG,addr->ipbits,origtxdata->block.RO.hash2,origtxdata->block.RO.prev_block,bundlei,0)) >= 0 ) { //printf("set fpos.%d\n",fpos); @@ -1630,10 +1640,19 @@ void iguana_bundlemapfree(struct OS_memspace *mem,struct OS_memspace *hashmem,ui int32_t iguana_ramchain_expandedsave(struct iguana_info *coin,RAMCHAIN_FUNC,struct iguana_ramchain *newchain,struct OS_memspace *hashmem,int32_t cmpflag,struct iguana_bundle *bp) { static bits256 zero; - bits256 firsthash2,lasthash2; int32_t err,bundlei,hdrsi,numblocks,firsti,height,retval = -1; - struct iguana_ramchain checkR,*mapchain; char fname[1024]; + bits256 firsthash2,lasthash2; int32_t err,i,bundlei,hdrsi,numblocks,firsti,height,retval = -1; + struct iguana_ramchain checkR,*mapchain; char fname[1024]; struct iguana_block *block; firsthash2 = ramchain->H.data->firsthash2, lasthash2 = ramchain->H.data->lasthash2; height = ramchain->height, firsti = ramchain->H.data->firsti, hdrsi = ramchain->H.hdrsi, numblocks = ramchain->numblocks; + for (i=0; in; i++) + { + if ( (block= bp->blocks[i]) != 0 && block == iguana_blockfind(coin,bp->hashes[i]) ) + { + //printf("(%x:%x) ",(uint32_t)block->RO.hash2.ulongs[3],(uint32_t)bp->hashes[i].ulongs[3]); + B[i] = block->RO; + } else printf("error getting block (%d:%d) %p vs %p\n",bp->hdrsi,i,block,iguana_blockfind(coin,bp->hashes[i])); + } + //printf("B[] %p\n",B); //printf("Apresave 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); iguana_ramchain_setsize(ramchain,ramchain->H.data,bp->n); *newchain = *ramchain; @@ -1785,9 +1804,16 @@ int32_t iguana_bundlesaveHT(struct iguana_info *coin,struct OS_memspace *mem,str numtxids += (mapchain->H.data->numtxids - 1); numunspents += (mapchain->H.data->numunspents - 1); numspends += (mapchain->H.data->numspends - 1); + if ( (block= bp->blocks[bundlei]) == 0 || bits256_nonz(block->RO.hash2) == 0 || block != iguana_blockfind(coin,block->RO.hash2) || memcmp(block->RO.hash2.bytes,bp->hashes[bundlei].bytes,sizeof(bits256)) != 0 ) + { + printf("block.%p error vs %p\n",block,iguana_blockfind(coin,block->RO.hash2)); + break; + } + //printf("%x ",(uint32_t)block->RO.hash2.ulongs[3]); //printf("(%d %d %d) ",numtxids,numunspents,numspends); //printf("%d ",numtxids); } + //printf("RObits\n"); if ( bundlei != bp->n ) { iguana_bundlemapfree(0,0,ipbits,ptrs,filesizes,num,R,bp->n); diff --git a/iguana/main.c b/iguana/main.c index 4c2c73840..62006f3b0 100644 --- a/iguana/main.c +++ b/iguana/main.c @@ -37,7 +37,7 @@ static int32_t initflag; #ifdef __linux__ int32_t IGUANA_NUMHELPERS = 16; #else -int32_t IGUANA_NUMHELPERS = 4; +int32_t IGUANA_NUMHELPERS = 8; #endif char *hash_parser(struct supernet_info *myinfo,char *hashname,cJSON *json,char *remoteaddr)