From 223244c88c7692e0708fd62dac3c6df4ffe210fb Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 18 Nov 2016 14:30:41 -0300 Subject: [PATCH] revert parallel sync changes --- deprecated/obsolete.h | 87 +++++++++++++++++++++++++++++++++ gecko/gecko_blocks.c | 2 +- iguana/iguana_blocks.c | 2 +- iguana/iguana_bundles.c | 12 ++--- iguana/iguana_ramchain.c | 103 ++++++++++++++++++--------------------- iguana/iguana_recv.c | 6 +-- includes/iguana_funcs.h | 4 +- 7 files changed, 147 insertions(+), 69 deletions(-) diff --git a/deprecated/obsolete.h b/deprecated/obsolete.h index 0993ba879..a3738137d 100755 --- a/deprecated/obsolete.h +++ b/deprecated/obsolete.h @@ -20110,4 +20110,91 @@ len = 0; dp->blocks[checkpoint.blockhash.height] = bp; }*/ + /*if ( Minerids[height] >= -1 ) + { + printf("cached[%d] -> %d\n",height,Minerids[height]); + return(Minerids[height]); + } + if ( depth < 1 ) + { + if ( (pindex= chainActive[height]) != 0 ) + { + depth++; + komodo_index2pubkey33(pubkey33,pindex,height); + komodo_chosennotary(¬aryid,height,pubkey33); + if ( notaryid >= -1 ) + { + Minerids[height] = notaryid; + if ( Minerfp != 0 ) + { + fseek(Minerfp,height,SEEK_SET); + fputc(Minerids[height],Minerfp); + fflush(Minerfp); + } + } + depth--; + return(notaryid); + } + } + return(-2);*/ + if ( Minerids[height-i] == -2 ) + { + Minerids[height-i] = komodo_minerid(height-i); + if ( Minerids[height - i] == -2 ) + { + fprintf(stderr,"second -2 for Minerids[%d] current.%d\n",height-i,height); + return(-2); + } + } + if ( Minerids[height-i] == notaryid ) + return(-1); + /*if ( i == 0 && j == 0 && komodo_chosennotary(&nid,height,scriptbuf + 1) >= 0 ) + { + if ( height < sizeof(Minerids)/sizeof(*Minerids) ) + { + if ( (Minerids[height]= nid) >= -1 ) + { + if ( Minerfp != 0 ) + { + fseek(Minerfp,height,SEEK_SET); + fputc(Minerids[height],Minerfp); + fflush(Minerfp); + } + } + } + }*/ + uint8_t pubkeys[64][33]; + if ( pindex->nHeight > 73673 && komodo_notaries(pubkeys,76000) == 35 ) + { + static int32_t didinit; + if ( didinit == 0 ) + { + if ( (pindex= chainActive[73673]) != 0 ) + { + komodo_connectpindex(pindex); + } + didinit = 73673; + } + } + if ( i != 0 && notaryid >= 0 && notaryid < 64 && voutmask != 0 ) + { + //komodo_stateupdate(height,0,0,notaryid,txhash,voutmask,numvouts,0,0,0,0,0,0,0); + } + + /*if ( (k= komodo_nutxofind(height,block.vtx[i].vin[j].prevout.hash,block.vtx[i].vin[j].prevout.n)) >= 0 ) + signedmask |= (1LL << k); + else if ( signedmask != 0 ) + printf("signedmask.%llx but ht.%d i.%d j.%d not found (%s %d)\n",(long long)signedmask,height,i,j,block.vtx[i].vin[j].prevout.hash.ToString().c_str(),block.vtx[i].vin[j].prevout.n);*/ + /*memset(Minerids,0xfe,sizeof(Minerids)); + if ( (Minerfp= fopen(fname2,"rb+")) == 0 ) + { + if ( (Minerfp= fopen(fname2,"wb")) != 0 ) + { + fwrite(Minerids,1,sizeof(Minerids),Minerfp); + fclose(Minerfp); + } + Minerfp = fopen(fname2,"rb+"); + } + if ( Minerfp != 0 && fread(Minerids,1,sizeof(Minerids),Minerfp) != sizeof(Minerids) ) + printf("read error Minerids\n");*/ diff --git a/gecko/gecko_blocks.c b/gecko/gecko_blocks.c index a8c5583aa..a48dba97d 100755 --- a/gecko/gecko_blocks.c +++ b/gecko/gecko_blocks.c @@ -132,7 +132,7 @@ int32_t gecko_hwmset(struct supernet_info *myinfo,struct iguana_info *virt,struc printf("no bundle for %s.%d\n",virt->symbol,block->height); return(-1); } - if ( iguana_ramchain_data(myinfo,virt,addr,txdata,txarray,block->RO.txn_count,data,datalen,bp,block,0) >= 0 ) + if ( iguana_ramchain_data(myinfo,virt,addr,txdata,txarray,block->RO.txn_count,data,datalen,bp,block) >= 0 ) { block->fpipbits = (uint32_t)addr->ipbits; block->RO.recvlen = datalen; diff --git a/iguana/iguana_blocks.c b/iguana/iguana_blocks.c index 6a5974613..64bf189d2 100755 --- a/iguana/iguana_blocks.c +++ b/iguana/iguana_blocks.c @@ -355,7 +355,7 @@ int32_t iguana_blockvalidate(struct supernet_info *myinfo,struct iguana_info *co { static uint32_t counter; if ( (counter++ % 10000) == 9999 ) - printf("iguana_blockvalidate: %s miscompare.%d (%s) vs (%s)\n",coin->symbol,counter,bits256_str(str,hash2),bits256_str(str2,block->RO.hash2)); + printf("iguana_blockvalidate.%d: %s miscompare.%d (%s) vs (%s)\n",block->height,coin->symbol,counter,bits256_str(str,hash2),bits256_str(str2,block->RO.hash2)); //getchar(); } return(-1); diff --git a/iguana/iguana_bundles.c b/iguana/iguana_bundles.c index 8290df6a4..be66da25f 100755 --- a/iguana/iguana_bundles.c +++ b/iguana/iguana_bundles.c @@ -421,7 +421,7 @@ struct iguana_txid *iguana_bundletx(struct iguana_info *coin,struct iguana_bundl static const bits256 zero; int32_t hdrsi,iter; struct iguana_txid *T; int64_t Toffset; char fname[1024]; FILE *fp; struct iguana_ramchaindata rdata,*rptr; portable_mutex_lock(&coin->special_mutex); - if ( (rptr= bp->ramchain.H.data) != 0 ) + if ( (rptr= bp->ramchain.H.data) != 0 )//|| (bp == coin->current && (rptr= coin->RTramchain.H.data) != 0) ) { T = RAMCHAIN_PTR(rptr,Toffset); *tx = T[txidind]; @@ -1035,16 +1035,16 @@ int64_t iguana_bundlecalcs(struct supernet_info *myinfo,struct iguana_info *coin int32_t iguana_bundlefinalize(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_bundle *bp,struct OS_memspace *mem,struct OS_memspace *memB) { - int32_t i; struct iguana_bundle *tmpbp; //struct iguana_blockreq *breq; + int32_t i; struct iguana_bundle *tmpbp; struct iguana_blockreq *breq; if ( coin->firstRTheight == 0 && iguana_bundleready(myinfo,coin,bp,0) == bp->n ) { printf(">>>>>>>>>>>>>> EMIT.[%3d] %s | 1st.%-3d h.%-3d c.%-3d s.[%3d] maxB.%d NET.(h%d b%d) %u:%02u\n",bp->hdrsi,coin->symbol,coin->current!=0?coin->current->hdrsi:-1,coin->current!=0?coin->current->numhashes:-1,coin->current!=0?coin->current->numcached:-1,coin->current!=0?coin->current->numsaved:-1,coin->MAXBUNDLES,HDRnet,queue_size(&coin->priorityQ),(uint32_t)(time(NULL)-coin->startutc)/60,(uint32_t)(time(NULL)-coin->startutc)%60); - /*if ( queue_size(&coin->priorityQ) > 10000 ) + if ( queue_size(&coin->priorityQ) > 10000 ) { while ( (breq= queue_dequeue(&coin->priorityQ)) != 0 ) myfree(breq,sizeof(*breq)); //printf("cleared priorityQ\n"); - }*/ + } if ( bp->emitfinish != 0 ) { printf("already EMIT for bundle.%d\n",bp->hdrsi); @@ -1560,11 +1560,11 @@ void iguana_bundlestats(struct supernet_info *myinfo,struct iguana_info *coin,ch iguana_setmaxbundles(coin); strcpy(coin->statusstr,str); coin->estsize = estsize; - /*if ( queue_size(&coin->priorityQ) > 10000 ) + if ( queue_size(&coin->priorityQ) > 10000 ) { while ( (breq= queue_dequeue(&coin->priorityQ)) != 0 ) myfree(breq,sizeof(*breq)); //printf("cleared priorityQ\n"); - }*/ + } } diff --git a/iguana/iguana_ramchain.c b/iguana/iguana_ramchain.c index cbf82656b..16ed68bd5 100755 --- a/iguana/iguana_ramchain.c +++ b/iguana/iguana_ramchain.c @@ -324,8 +324,6 @@ uint32_t iguana_ramchain_addunspent20(struct iguana_info *coin,struct iguana_pee if ( scriptlen > 0 && script != 0 ) { memset(&V,0,sizeof(V)); - if ( scriptlen == 35 && script[scriptlen-1] == 0xac && script[0] == 33 ) - memcpy(V.signers[0].pubkey,script+1,33); V.spendlen = iguana_scriptgen(coin,&V.M,&V.N,V.coinaddr,V.spendscript,asmstr,u->rmd160,type,(const struct vin_info *)&V,vout); if ( V.spendlen != scriptlen || memcmp(V.spendscript,script,scriptlen) != 0 ) { @@ -1032,13 +1030,10 @@ long iguana_ramchain_save(struct iguana_info *coin,RAMCHAIN_FUNC,uint32_t ipbits return(-1); } OS_compatible_path(fname); - /*static portable_mutex_t mutex; static int didinit; - if ( didinit == 0 ) - { - portable_mutex_init(&mutex); - didinit = 1; - } - portable_mutex_lock(&mutex);*/ +#ifdef __PNACL__ + //static portable_mutex_t mutex; + //portable_mutex_lock(&mutex); +#endif if ( (fp= fopen(fname,"wb")) == 0 ) printf("iguana_ramchain_save: couldnt create.(%s) errno.%d\n",fname,errno); else if ( coin->peers != 0 ) @@ -1062,7 +1057,9 @@ long iguana_ramchain_save(struct iguana_info *coin,RAMCHAIN_FUNC,uint32_t ipbits fclose(fp); //sleep(3); } +#ifdef __PNACL__ //portable_mutex_unlock(&mutex); +#endif return(fpos); } @@ -1324,8 +1321,6 @@ int32_t iguana_ramchain_extras(struct supernet_info *myinfo,struct iguana_info * int32_t iguana_Xspendmap(struct iguana_info *coin,struct iguana_ramchain *ramchain,struct iguana_bundle *bp) { int32_t iter; bits256 sha256; char str[65],fname[1024]; void *ptr; long filesize; - if ( ramchain->Xspendinds != 0 ) - return(ramchain->numXspends); for (iter=0; iter<2; iter++) { sprintf(fname,"%s/%s%s/spends/%s.%d",GLOBAL_DBDIR,iter==0?"ro/":"",coin->symbol,bits256_str(str,bp->hashes[0]),bp->bundleheight); @@ -1346,10 +1341,10 @@ int32_t iguana_Xspendmap(struct iguana_info *coin,struct iguana_ramchain *ramcha printf("[%d] filesize %ld Xspendptr.%p %p num.%d\n",bp->hdrsi,filesize,ramchain->Xspendptr,ramchain->Xspendinds,ramchain->numXspends); bp->Xvalid = 1; } - //printf("mapped utxo vector[%d] from (%s)\n",ramchain->numXspends,fname); return(ramchain->numXspends); //int32_t i; for (i=0; inumXspends; i++) // printf("(%d u%d) ",ramchain->Xspendinds[i].hdrsi,ramchain->Xspendinds[i].ind); + //printf("mapped utxo vector[%d] from (%s)\n",ramchain->numXspends,fname); } else { @@ -1500,7 +1495,7 @@ struct iguana_ramchain *_iguana_ramchain_map(struct supernet_info *myinfo,struct return(0); } -struct iguana_ramchain *iguana_ramchain_map(struct supernet_info *myinfo,struct iguana_info *coin,char *fname,struct iguana_bundle *bp,int32_t numblocks,struct iguana_ramchain *ramchain,struct OS_memspace *hashmem,uint32_t ipbits,bits256 hash2,bits256 prevhash2,int32_t bundlei,long fpos,int32_t allocextras,int32_t expanded,uint8_t zcash) +struct iguana_ramchain *iguana_ramchain_map(struct supernet_info *myinfo,struct iguana_info *coin,char *fname,struct iguana_bundle *bp,int32_t numblocks,struct iguana_ramchain *ramchain,struct OS_memspace *hashmem,uint32_t ipbits,bits256 hash2,bits256 prevhash2,int32_t bundlei,long fpos,int32_t allocextras,int32_t expanded) { struct iguana_ramchain *retptr; #ifdef __PNACL__ @@ -1508,7 +1503,7 @@ struct iguana_ramchain *iguana_ramchain_map(struct supernet_info *myinfo,struct //portable_mutex_lock(&mutex); #endif ramchain->height = bp->bundleheight; - retptr = _iguana_ramchain_map(myinfo,coin,fname,bp,numblocks,ramchain,hashmem,ipbits,hash2,prevhash2,bundlei,fpos,allocextras,expanded,zcash); + retptr = _iguana_ramchain_map(myinfo,coin,fname,bp,numblocks,ramchain,hashmem,ipbits,hash2,prevhash2,bundlei,fpos,allocextras,expanded,coin->chain->zcash); #ifdef __PNACL__ //portable_mutex_unlock(&mutex); #endif @@ -1822,24 +1817,23 @@ int32_t iguana_ramchain_iterate(struct supernet_info *myinfo,struct iguana_info return(0); } -long iguana_ramchain_data(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_peer *addr,struct iguana_txblock *origtxdata,struct iguana_msgtx *txarray,int32_t txn_count,uint8_t *data,int32_t recvlen,struct iguana_bundle *bp,struct iguana_block *block,uint8_t zcash) +long iguana_ramchain_data(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_peer *addr,struct iguana_txblock *origtxdata,struct iguana_msgtx *txarray,int32_t txn_count,uint8_t *data,int32_t recvlen,struct iguana_bundle *bp,struct iguana_block *block) { int32_t verifyflag = 0; - RAMCHAIN_DECLARE; struct iguana_ramchain R,*mapchain,*ramchain = &addr->ramchain; struct iguana_msgtx *tx; char fname[1024]; uint8_t rmd160[20]; struct iguana_ramchaindata *rdata; int32_t i,j,fpos,pubkeysize,sigsize,hdrsi,subdir,firsti=1,err,flag,bundlei=-1; uint32_t scriptspace,stackspace; struct iguana_blockRO RO; + RAMCHAIN_DECLARE; struct iguana_ramchain R,*mapchain,*ramchain = &addr->ramchain; struct iguana_msgtx *tx; char fname[1024]; uint8_t rmd160[20]; struct iguana_ramchaindata *rdata; int32_t i,j,fpos,pubkeysize,sigsize,subdir,firsti=1,err,flag,bundlei; uint32_t scriptspace,stackspace; struct iguana_blockRO RO; if ( block == 0 || bp == 0 || addr == 0 || (block != 0 && (bundlei= block->bundlei) < 0) ) { - //printf("iguana_ramchain_data: null ptr %p %p %p bundlei.%d\n",block,bp,addr,bundlei); + //printf("iguana_ramchain_data: null ptr %p %p %p\n",block,bp,addr); return(-1); } #ifdef __PNACL__ //verifyflag = 1; #endif - iguana_peerfname(coin,&hdrsi,GLOBAL_TMPDIR,fname,0,origtxdata->zblock.RO.hash2,origtxdata->zblock.RO.prev_block,1,0); sigsize = pubkeysize = 0; scriptspace = 1;//iguana_scriptspaceraw(coin,&scriptsize,&sigsize,&pubkeysize,txarray,txn_count); for (i=0; idirty)/sizeof(*addr->dirty); i++) addr->dirty[i] = 0; - if ( iguana_ramchain_init(fname,ramchain,&addr->TXDATA,&addr->HASHMEM,1,txn_count,origtxdata->numunspents,origtxdata->numspends,0,0,(scriptspace+sigsize+pubkeysize)*1.1,0,1,zcash) == 0 ) + if ( iguana_ramchain_init(fname,ramchain,&addr->TXDATA,&addr->HASHMEM,1,txn_count,origtxdata->numunspents,origtxdata->numspends,0,0,(scriptspace+sigsize+pubkeysize)*1.1,0,1,coin->chain->zcash) == 0 ) { if ( block != 0 && block->fpipbits == 0 ) block->issued = block->RO.recvlen = 0, block->fpos = -1; @@ -1907,7 +1901,7 @@ long iguana_ramchain_data(struct supernet_info *myinfo,struct iguana_info *coin, rdata->prevhash2 = origtxdata->zblock.RO.prev_block; rdata->scriptspace = scriptspace = ramchain->H.scriptoffset; rdata->stackspace = stackspace = ramchain->H.stacksize; - iguana_ramchain_setsize(fname,ramchain,rdata,1,zcash); + iguana_ramchain_setsize(fname,ramchain,rdata,1,coin->chain->zcash); flag = 0; if ( ramchain->H.txidind != rdata->numtxids || ramchain->H.unspentind != rdata->numunspents || ramchain->H.spendind != rdata->numspends ) { @@ -1923,17 +1917,21 @@ long iguana_ramchain_data(struct supernet_info *myinfo,struct iguana_info *coin, { if ( (err= iguana_ramchain_verify(coin,ramchain)) == 0 ) { - *B = RO; + iguana_blockzcopyRO(coin->chain->zcash,B,0,&RO,0); rdata->scriptspace = ramchain->H.scriptoffset = scriptspace; rdata->stackspace = ramchain->H.stacksize = stackspace; - if ( (fpos= (int32_t)iguana_ramchain_save(coin,RAMCHAIN_ARG,(uint32_t)addr->ipbits,RO.hash2,RO.prev_block,bundlei,0,zcash)) >= 0 ) + if ( (fpos= (int32_t)iguana_ramchain_save(coin,RAMCHAIN_ARG,(uint32_t)addr->ipbits,RO.hash2,RO.prev_block,bundlei,0,coin->chain->zcash)) >= 0 ) { origtxdata->datalen = (int32_t)rdata->allocsize; //char str[65]; printf("saved.%s [%d:%d] fpos.%d datalen.%d\n",bits256_str(str,block->RO.hash2),bp->hdrsi,bundlei,fpos,origtxdata->datalen); ramchain->H.ROflag = 0; flag = 1; + if ( addr->dirty[0] != 0 && addr->voutsfp != 0 ) + fflush(addr->voutsfp); + if ( addr->dirty[1] != 0 && addr->vinsfp != 0 ) + fflush(addr->vinsfp); memset(&R,0,sizeof(R)); - if ( verifyflag != 0 && (mapchain= iguana_ramchain_map(myinfo,coin,fname,0,1,&R,&addr->HASHMEM,(uint32_t)addr->ipbits,RO.hash2,RO.prev_block,bundlei,fpos,0,0,zcash)) == 0 ) + if ( verifyflag != 0 && (mapchain= iguana_ramchain_map(myinfo,coin,fname,0,1,&R,0,(uint32_t)addr->ipbits,RO.hash2,RO.prev_block,bundlei,fpos,1,0)) == 0 ) { printf("delete unverified [%d:%d]\n",bp->hdrsi,bundlei); iguana_ramchain_free(coin,&R,1); @@ -1948,7 +1946,7 @@ long iguana_ramchain_data(struct supernet_info *myinfo,struct iguana_info *coin, } if ( block != 0 && fpos >= 0 ) block->fpos = fpos, block->fpipbits = (uint32_t)addr->ipbits; - } //else printf("save error\n"); + } else printf("save error\n"); } else { @@ -1957,13 +1955,6 @@ long iguana_ramchain_data(struct supernet_info *myinfo,struct iguana_info *coin, } } } - if ( addr != 0 ) - { - if ( addr->dirty[0] != 0 && addr->voutsfp != 0 ) - fflush(addr->voutsfp); - if ( addr->dirty[1] != 0 && addr->vinsfp != 0 ) - fflush(addr->vinsfp); - } if ( fpos < 0 && block != 0 ) iguana_blockunmark(coin,block,bp,bundlei,1); //fprintf(stderr,"finished with hdrsi.%d ht.%d scripts.%u:%u\n",bp->hdrsi,bp->bundleheight,ramchain->H.scriptoffset,rdata->scriptspace); @@ -2017,7 +2008,7 @@ void iguana_blockdelete(struct iguana_info *coin,bits256 hash2,int32_t i) void iguana_blockunmark(struct iguana_info *coin,struct iguana_block *block,struct iguana_bundle *bp,int32_t i,int32_t deletefile) { - void *ptr; int32_t recvlen,height = -1; uint8_t zcash = 0; + void *ptr; int32_t recvlen,height = -1; if ( 0 && bp != 0 ) printf("UNMARK.[%d:%d]\n",bp->hdrsi,i); if ( block != 0 ) @@ -2050,7 +2041,7 @@ void iguana_blockunmark(struct iguana_info *coin,struct iguana_block *block,stru { printf("reduce %s HWM height from %d to %d\n",coin->symbol,coin->blocks.hwmchain.height,height); if ( (block= iguana_blockfind("unmark",coin,iguana_blockhash(coin,height))) != 0 ) - iguana_blockcopy(zcash,coin->chain->auxpow,coin,(struct iguana_block *)&coin->blocks.hwmchain,block); + iguana_blockcopy(coin->chain->zcash,coin->chain->auxpow,coin,(struct iguana_block *)&coin->blocks.hwmchain,block); } } @@ -2193,7 +2184,7 @@ void iguana_bundlemapfree(struct iguana_info *coin,struct OS_memspace *mem,struc int32_t iguana_ramchain_expandedsave(struct supernet_info *myinfo,struct iguana_info *coin,RAMCHAIN_FUNC,struct iguana_ramchain *newchain,struct OS_memspace *hashmem,int32_t cmpflag,struct iguana_bundle *bp) { - static const bits256 zero; uint8_t zcash = 0; + static const bits256 zero; bits256 firsthash2; int32_t err,bundlei,hdrsi,numblocks,firsti,height,retval= -1; struct iguana_ramchain checkR,*mapchain; char fname[1024]; struct iguana_block *block; uint32_t scriptspace,scriptoffset,stacksize; uint8_t *destoffset,*srcoffset; struct iguana_ramchaindata *rdata; if ( (rdata= ramchain->H.data) == 0 ) return(-1); @@ -2215,7 +2206,7 @@ int32_t iguana_ramchain_expandedsave(struct supernet_info *myinfo,struct iguana_ rdata->prevhash2 = block->RO.prev_block; rdata->scriptspace = scriptoffset; ramchain->H.stacksize = rdata->stackspace = stacksize; - iguana_ramchain_setsize(fname,ramchain,rdata,bp->n,zcash); + iguana_ramchain_setsize(fname,ramchain,rdata,bp->n,coin->chain->zcash); //printf("Apresave T.%d U.%d S.%d P.%d X.%d -> size.%ld firsti.%d scriptoffset.%d stacksize.%d\n",rdata->numtxids,rdata->numunspents,rdata->numspends,rdata->numpkinds,rdata->numexternaltxids,(long)rdata->allocsize,firsti,ramchain->H.scriptoffset,ramchain->H.stacksize); *newchain = *ramchain; //memcpy(ramchain->roU2,ramchain->U2,sizeof(*ramchain->U2) * rdata->numunspents); @@ -2239,7 +2230,7 @@ int32_t iguana_ramchain_expandedsave(struct supernet_info *myinfo,struct iguana_ ramchain->H.scriptoffset = scriptoffset; rdata->scriptspace = scriptoffset; ramchain->H.stacksize = rdata->stackspace = stacksize; - if ( iguana_ramchain_save(coin,RAMCHAIN_ARG,0,firsthash2,zero,0,bp,zcash) < 0 ) + if ( iguana_ramchain_save(coin,RAMCHAIN_ARG,0,firsthash2,zero,0,bp,coin->chain->zcash) < 0 ) { printf("ERROR saving ramchain hdrsi.%d, deleting and will regenerate\n",hdrsi); iguana_mempurge(hashmem); @@ -2254,7 +2245,7 @@ int32_t iguana_ramchain_expandedsave(struct supernet_info *myinfo,struct iguana_ bundlei = 0; if ( cmpflag == 0 ) iguana_memreset(hashmem); - if ( (mapchain= iguana_ramchain_map(myinfo,coin,fname,bp,numblocks,&checkR,cmpflag==0?hashmem:0,0,firsthash2,zero,bundlei,0,0,1,zcash)) != 0 ) + if ( (mapchain= iguana_ramchain_map(myinfo,coin,fname,bp,numblocks,&checkR,cmpflag==0?hashmem:0,0,firsthash2,zero,bundlei,0,0,1)) != 0 ) { iguana_ramchain_link(mapchain,firsthash2,hdrsi,height,0,numblocks,firsti,1); iguana_ramchain_extras(myinfo,coin,mapchain,hashmem,0); @@ -2286,13 +2277,13 @@ int32_t iguana_ramchain_expandedsave(struct supernet_info *myinfo,struct iguana_ struct iguana_ramchain *iguana_bundleload(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_ramchain *ramchain,struct iguana_bundle *bp,int32_t extraflag) { - static const bits256 zero; uint8_t zcash = 0; + static const bits256 zero; struct iguana_blockRO *B; struct iguana_txid *T; int32_t i,firsti = 1; char fname[512]; struct iguana_block *block,*prev,*prev2; struct iguana_ramchain *mapchain; struct iguana_ramchaindata *rdata; uint32_t firsttxidind; if ( bp->emitfinish > 1 ) return(ramchain); memset(ramchain,0,sizeof(*ramchain)); - if ( (mapchain= iguana_ramchain_map(myinfo,coin,fname,bp,bp->n,ramchain,0,0,bp->hashes[0],zero,0,0,extraflag,1,zcash)) != 0 ) + if ( (mapchain= iguana_ramchain_map(myinfo,coin,fname,bp,bp->n,ramchain,0,0,bp->hashes[0],zero,0,0,extraflag,1)) != 0 ) { iguana_ramchain_link(mapchain,bp->hashes[0],bp->hdrsi,bp->bundleheight,0,bp->n,firsti,1); //char str[65]; printf("%s bp.%d: T.%d U.%d S.%d P%d X.%d MAPPED %s %p\n",coin->symbol,bp->hdrsi,mapchain->H.data->numtxids,mapchain->H.data->numunspents,mapchain->H.data->numspends,mapchain->H.data->numpkinds,mapchain->H.data->numexternaltxids,mbstr(str,mapchain->H.data->allocsize),mapchain->H.data); @@ -2319,7 +2310,7 @@ struct iguana_ramchain *iguana_bundleload(struct supernet_info *myinfo,struct ig block->hdrsi = bp->hdrsi; block->bundlei = i; block->fpipbits = (uint32_t)calc_ipbits("127.0.0.1"); - iguana_blockzcopyRO(zcash,&block->RO,0,B,i); + iguana_blockzcopyRO(coin->chain->zcash,&block->RO,0,B,i); //printf("%x ",(int32_t)B[i].hash2.ulongs[3]); bp->blocks[i] = block; bp->hashes[i] = block->RO.hash2; @@ -2365,7 +2356,7 @@ struct iguana_ramchain *iguana_bundleload(struct supernet_info *myinfo,struct ig int64_t iguana_ramchainopen(struct supernet_info *myinfo,char *fname,struct iguana_info *coin,struct iguana_ramchain *ramchain,struct OS_memspace *mem,struct OS_memspace *hashmem,int32_t bundleheight,bits256 hash2) { - RAMCHAIN_DECLARE; RAMCHAIN_ZEROES; uint8_t zcash = 0; int32_t i,numblocks = coin->chain->bundlesize; uint32_t numtxids,numunspents,numspends,numpkinds,numexternaltxids,scriptspace; struct iguana_bundle *bp; struct iguana_ramchaindata *rdata=0; int64_t hashsize,allocsize; + RAMCHAIN_DECLARE; RAMCHAIN_ZEROES; int32_t i,numblocks = coin->chain->bundlesize; uint32_t numtxids,numunspents,numspends,numpkinds,numexternaltxids,scriptspace; struct iguana_bundle *bp; struct iguana_ramchaindata *rdata=0; int64_t hashsize,allocsize; //B = 0, Ux = 0, Sx = 0, P = 0, A = 0, X = 0, Kspace = TXbits = PKbits = 0, U = 0, S = 0, T = 0; mem->alignflag = sizeof(uint32_t); hashmem->alignflag = sizeof(uint32_t); @@ -2393,7 +2384,7 @@ int64_t iguana_ramchainopen(struct supernet_info *myinfo,char *fname,struct igua //#endif if ( mem->ptr == 0 ) { - while ( (allocsize= _iguana_rdata_action(fname,0,0,0,0,1,numtxids,numunspents,numspends,numpkinds,numexternaltxids,scriptspace,0,0,0,0,0,RAMCHAIN_ARG,numblocks,zcash)) > 2*1024LL*1024L*1024L ) + while ( (allocsize= _iguana_rdata_action(fname,0,0,0,0,1,numtxids,numunspents,numspends,numpkinds,numexternaltxids,scriptspace,0,0,0,0,0,RAMCHAIN_ARG,numblocks,coin->chain->zcash)) > 2*1024LL*1024L*1024L ) { numtxids *= .9; numunspents *= .9; @@ -2410,7 +2401,7 @@ int64_t iguana_ramchainopen(struct supernet_info *myinfo,char *fname,struct igua iguana_meminit(hashmem,coin->symbol,0,hashsize + 65536*3,0); printf("%s hash meminit %lld\n",coin->symbol,(long long)hashmem->totalsize); } - if ( iguana_ramchain_init(fname,ramchain,mem,hashmem,1,numtxids,numunspents,numspends,numpkinds,numexternaltxids,scriptspace,1,numblocks,zcash) > 0 ) + if ( iguana_ramchain_init(fname,ramchain,mem,hashmem,1,numtxids,numunspents,numspends,numpkinds,numexternaltxids,scriptspace,1,numblocks,coin->chain->zcash) > 0 ) { iguana_ramchain_link(ramchain,hash2,bundleheight/coin->chain->bundlesize,bundleheight,0,0,1,0); ramchain->expanded = 1; @@ -2426,7 +2417,7 @@ int64_t iguana_ramchainopen(struct supernet_info *myinfo,char *fname,struct igua int32_t iguana_mapchaininit(char *fname,struct iguana_info *coin,struct iguana_ramchain *mapchain,struct iguana_bundle *bp,int32_t bundlei,struct iguana_block *block,void *ptr,long filesize) { - int32_t firsti = 1; RAMCHAIN_DECLARE; uint8_t zcash = 0; + int32_t firsti = 1; RAMCHAIN_DECLARE; memset(mapchain,0,sizeof(*mapchain)); mapchain->fileptr = ptr; mapchain->filesize = filesize; @@ -2438,9 +2429,9 @@ int32_t iguana_mapchaininit(char *fname,struct iguana_info *coin,struct iguana_r return(-1); } _iguana_ramchain_setptrs(MAPCHAIN_PTRS,mapchain->H.data); - if ( block->fpos+mapchain->H.data->allocsize > filesize || iguana_ramchain_size(fname,MAPCHAIN_ARG,1,mapchain->H.data->scriptspace,zcash) != mapchain->H.data->allocsize ) + if ( block->fpos+mapchain->H.data->allocsize > filesize || iguana_ramchain_size(fname,MAPCHAIN_ARG,1,mapchain->H.data->scriptspace,coin->chain->zcash) != mapchain->H.data->allocsize ) { - printf("iguana_mapchaininit.%d ipbits.%x size mismatch %ld vs %ld vs filesize.%ld fpos.%ld bundlei.%d expanded.%d soff.%d\n",bp->bundleheight,block->fpipbits,(long)iguana_ramchain_size(fname,MAPCHAIN_ARG,1,mapchain->H.data->scriptspace,zcash),(long)mapchain->H.data->allocsize,(long)filesize,(long)block->fpos,bundlei,mapchain->expanded,mapchain->H.data->scriptspace); + printf("iguana_mapchaininit.%d ipbits.%x size mismatch %ld vs %ld vs filesize.%ld fpos.%ld bundlei.%d expanded.%d soff.%d\n",bp->bundleheight,block->fpipbits,(long)iguana_ramchain_size(fname,MAPCHAIN_ARG,1,mapchain->H.data->scriptspace,coin->chain->zcash),(long)mapchain->H.data->allocsize,(long)filesize,(long)block->fpos,bundlei,mapchain->expanded,mapchain->H.data->scriptspace); //getchar(); return(-1); } @@ -2458,7 +2449,7 @@ int32_t iguana_mapchaininit(char *fname,struct iguana_info *coin,struct iguana_r // helper threads: NUM_HELPERS int32_t iguana_bundlesaveHT(struct supernet_info *myinfo,struct iguana_info *coin,struct OS_memspace *mem,struct OS_memspace *memB,struct iguana_bundle *bp,uint32_t starttime) // helper thread { - static int depth; uint8_t zcash = 0; + static int depth; RAMCHAIN_DESTDECLARE; RAMCHAIN_DECLARE; RAMCHAIN_ZEROES; void **ptrs; long *filesizes; uint32_t *ipbits; char fname[1024]; struct iguana_ramchain *R,*mapchain,*dest,newchain; uint32_t fpipbits; bits256 prevhash2; @@ -2541,7 +2532,7 @@ int32_t iguana_bundlesaveHT(struct supernet_info *myinfo,struct iguana_info *coi numexternaltxids = numspends; //printf("E.%d depth.%d start bundle ramchain %d at %u started.%u lag.%d\n",coin->numemitted,depth,bp->bundleheight,now,starttime,now-starttime); depth++; - if ( iguana_ramchain_alloc(fname,coin,dest,mem,&HASHMEM,numtxids,numunspents,numspends,numpkinds,numexternaltxids,scriptspace+sigspace,bp->bundleheight+starti,bp_n,zcash) < 0 ) + if ( iguana_ramchain_alloc(fname,coin,dest,mem,&HASHMEM,numtxids,numunspents,numspends,numpkinds,numexternaltxids,scriptspace+sigspace,bp->bundleheight+starti,bp_n,coin->chain->zcash) < 0 ) { printf("error iguana_ramchain_alloc for bundleheight.%d\n",bp->bundleheight); iguana_bundlemapfree(coin,mem,&HASHMEM,ipbits,ptrs,filesizes,num,R,starti,endi); @@ -2570,7 +2561,7 @@ int32_t iguana_bundlesaveHT(struct supernet_info *myinfo,struct iguana_info *coi iguana_blockunmark(coin,block,bp,i,1); return(-1); } - iguana_blockzcopyRO(zcash,destB,i,&block->RO,0); + iguana_blockzcopyRO(coin->chain->zcash,destB,i,&block->RO,0); //destB[i] = block->RO; } else printf("bundlesave error getting block (%d:%d) %p vs %p\n",bp->hdrsi,i,block,bp->blocks[i]); } @@ -2585,9 +2576,9 @@ int32_t iguana_bundlesaveHT(struct supernet_info *myinfo,struct iguana_info *coi { iguana_blocksetcounters(coin,block,dest); //coin->blocks.RO[bp->bundleheight+bundlei] = block->RO; - iguana_blockzcopyRO(zcash,destB,bundlei,&block->RO,0); + iguana_blockzcopyRO(coin->chain->zcash,destB,bundlei,&block->RO,0); //destB[bundlei] = block->RO; - //fprintf(stderr,"T.(%d %d u%d).%d ",R[bundlei].H.data->numtxids,dest->H.txidind,R[bundlei].H.data->numunspents,bundlei); + //fprintf(stderr,"(%d %d).%d ",R[bundlei].H.data->numtxids,dest->H.txidind,bundlei); if ( (err= iguana_ramchain_iterate(myinfo,coin,dest,&R[bundlei],bp,bundlei)) != 0 ) { if ( (block= bp->blocks[bundlei]) != 0 ) @@ -2617,7 +2608,7 @@ int32_t iguana_bundlesaveHT(struct supernet_info *myinfo,struct iguana_info *coi memset(&newchain,0,sizeof(newchain)); if ( bundlei == endi+1 && iguana_ramchain_expandedsave(myinfo,coin,RAMCHAIN_DESTARG,&newchain,&HASHMEM,0,bp) == 0 ) { - //char str[65]; printf("d.%d ht.%d %s saved\n",depth,dest->height,mbstr(str,dest->H.data->allocsize)); + //char str[65]; printf("d.%d ht.%d %s saved lag.%d elapsed.%ld\n",depth,dest->height,mbstr(str,dest->H.data->allocsize),now-starttime,time(NULL)-now); retval = 0; } else bp->generrs++; iguana_bundlemapfree(coin,mem,&HASHMEM,ipbits,ptrs,filesizes,num,R,starti,endi); @@ -2666,7 +2657,7 @@ void iguana_mergefree(struct iguana_info *coin,struct OS_memspace *mem,struct ig int32_t iguana_bundlemergeHT(struct supernet_info *myinfo,char *fname,struct iguana_info *coin,struct OS_memspace *mem,struct OS_memspace *memB,struct iguana_bundle *bp,struct iguana_bundle *nextbp,uint32_t starttime) { - static int32_t depth; static const bits256 zero; uint8_t zcash = 0; + static int32_t depth; static const bits256 zero; RAMCHAIN_DESTDECLARE; struct OS_memspace HASHMEM,HASHMEMA,HASHMEMB; uint32_t now = (uint32_t)time(NULL); char str[65],fnameA[1024],fnameB[1024]; struct iguana_ramchain _Achain,_Bchain,*A,*B,R,newchain,*dest = &R; int32_t err,retval = -1,firsti = 1; @@ -2677,11 +2668,11 @@ int32_t iguana_bundlemergeHT(struct supernet_info *myinfo,char *fname,struct igu iguana_meminit(&HASHMEMB,"hashmemB",0,iguana_hashmemsize(nextbp->ramchain.H.txidind,nextbp->ramchain.H.unspentind,nextbp->ramchain.H.spendind,nextbp->ramchain.pkind,nextbp->ramchain.externalind,nextbp->ramchain.H.data->scriptspace) + IGUANA_MAXSCRIPTSIZE,0); memset(&_Achain,0,sizeof(_Achain)); A = &_Achain; memset(&_Bchain,0,sizeof(_Bchain)); B = &_Bchain; - if ( (A= iguana_ramchain_map(myinfo,coin,fnameA,bp,bp->ramchain.numblocks,A,&HASHMEMA,0,bp->hashes[0],zero,0,0,1,1,zcash)) != 0 ) + if ( (A= iguana_ramchain_map(myinfo,coin,fnameA,bp,bp->ramchain.numblocks,A,&HASHMEMA,0,bp->hashes[0],zero,0,0,1,1)) != 0 ) { iguana_ramchain_link(A,bp->hashes[0],bp->hdrsi,bp->bundleheight,0,bp->ramchain.numblocks,firsti,1); } - if ( (B= iguana_ramchain_map(myinfo,coin,fnameB,bp,nextbp->ramchain.numblocks,B,&HASHMEMB,0,nextbp->hashes[0],zero,0,0,1,1,zcash)) != 0 ) + if ( (B= iguana_ramchain_map(myinfo,coin,fnameB,bp,nextbp->ramchain.numblocks,B,&HASHMEMB,0,nextbp->hashes[0],zero,0,0,1,1)) != 0 ) { iguana_ramchain_link(B,bp->hashes[0],nextbp->hdrsi,nextbp->bundleheight,0,nextbp->ramchain.numblocks,firsti,1); } @@ -2693,7 +2684,7 @@ int32_t iguana_bundlemergeHT(struct supernet_info *myinfo,char *fname,struct igu } if ( A->H.data != 0 && B->H.data != 0 && B->height == A->height+A->numblocks ) { - if ( iguana_ramchain_alloc(fname,coin,dest,mem,&HASHMEM,(A->H.data->numtxids+B->H.data->numtxids),(A->H.data->numunspents+B->H.data->numunspents),(A->H.data->numspends+B->H.data->numspends),(A->H.data->numpkinds+B->H.data->numpkinds),(A->H.data->numexternaltxids+B->H.data->numexternaltxids),A->H.data->scriptspace,A->height,A->numblocks + B->numblocks,zcash) < 0 ) + if ( iguana_ramchain_alloc(fname,coin,dest,mem,&HASHMEM,(A->H.data->numtxids+B->H.data->numtxids),(A->H.data->numunspents+B->H.data->numunspents),(A->H.data->numspends+B->H.data->numspends),(A->H.data->numpkinds+B->H.data->numpkinds),(A->H.data->numexternaltxids+B->H.data->numexternaltxids),A->H.data->scriptspace,A->height,A->numblocks + B->numblocks,coin->chain->zcash) < 0 ) { printf("depth.%d ht.%d fsize.%s ERROR alloc lag.%d elapsed.%d\n",depth,dest->height,mbstr(str,dest->H.data->allocsize),now-starttime,(int32_t)(time(NULL)-now)); iguana_mergefree(coin,mem,A,B,&HASHMEM,&HASHMEMA,&HASHMEMB); diff --git a/iguana/iguana_recv.c b/iguana/iguana_recv.c index 4e3c9f7a2..5c7224e5e 100755 --- a/iguana/iguana_recv.c +++ b/iguana/iguana_recv.c @@ -493,7 +493,7 @@ void iguana_oldgotblockM(struct supernet_info *myinfo,struct iguana_info *coin,s addr->recvblocks += 1.; addr->recvtotal += recvlen; } - if ( speculative == 0 && iguana_ramchain_data(myinfo,coin,addr,origtxdata,txarray,origtxdata->zblock.RO.txn_count,data,recvlen,bp,block,0) >= 0 ) + if ( speculative == 0 && iguana_ramchain_data(myinfo,coin,addr,origtxdata,txarray,origtxdata->zblock.RO.txn_count,data,recvlen,bp,block) >= 0 ) { txdata->zblock.fpipbits = (uint32_t)addr->ipbits; txdata->zblock.RO.recvlen = recvlen; @@ -851,7 +851,7 @@ void iguana_gotblockM(struct supernet_info *myinfo,struct iguana_info *coin,stru didinit = 1; } portable_mutex_lock(&mutex);*/ - if ( iguana_ramchain_data(myinfo,coin,addr,origtxdata,txarray,origtxdata->zblock.RO.txn_count,data,recvlen,bp,block,zcash) >= 0 ) + if ( iguana_ramchain_data(myinfo,coin,addr,origtxdata,txarray,origtxdata->zblock.RO.txn_count,data,recvlen,bp,block) >= 0 ) { txdata->zblock.fpipbits = (uint32_t)addr->ipbits; txdata->zblock.RO.recvlen = recvlen; @@ -886,7 +886,7 @@ void iguana_gotblockM(struct supernet_info *myinfo,struct iguana_info *coin,stru } else if ( bp->queued == 0 && bp->startutxo == 0 ) { - iguana_bundleQ(myinfo,coin,bp,0); + iguana_bundleQ(myinfo,coin,bp,1000); //printf("numsaved.%d [%d] %s\n",numsaved,bp->hdrsi,addr->ipaddr); } } diff --git a/includes/iguana_funcs.h b/includes/iguana_funcs.h index 57c9dd01b..96972ebdb 100755 --- a/includes/iguana_funcs.h +++ b/includes/iguana_funcs.h @@ -64,7 +64,7 @@ void iguana_syncramchain(struct iguana_info *coin); //int32_t iguana_validateramchain(struct iguana_info *coin,int64_t *netp,uint64_t *creditsp,uint64_t *debitsp,int32_t height,struct iguana_block *block,int32_t hwmheight,struct iguana_prevdep *lp); int32_t iguana_calcrmd160(struct iguana_info *coin,char *asmstr,struct vin_info *vp,uint8_t *pk_script,int32_t pk_scriptlen,bits256 debugtxid,int32_t vout,uint32_t sequence); uint32_t iguana_updatescript(struct iguana_info *coin,uint32_t blocknum,uint32_t txidind,uint32_t spendind,uint32_t unspentind,uint64_t value,uint8_t *script,int32_t scriptlen,uint32_t sequence); -void iguana_gotblockM(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_peer *addr,struct iguana_txblock *txdata,struct iguana_msgtx *txarray,struct iguana_msghdr *H,uint8_t *data,int32_t datalen,int32_t fromcache,uint8_t zcache); +void iguana_gotblockM(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_peer *addr,struct iguana_txblock *origtxdata,struct iguana_msgtx *txarray,struct iguana_msghdr *H,uint8_t *data,int32_t recvlen,int32_t fromcache,uint8_t zcash); int32_t iguana_parseblock(struct iguana_info *coin,struct iguana_block *block,struct iguana_msgtx *tx,int32_t numtx); uint32_t iguana_txidind(struct iguana_info *coin,uint32_t *firstvoutp,uint32_t *firstvinp,bits256 txid); bits256 iguana_txidstr(struct iguana_info *coin,uint32_t *firstvoutp,uint32_t *firstvinp,char *txidstr,uint32_t txidind); @@ -193,7 +193,7 @@ struct iguana_txblock *iguana_peertxdata(struct iguana_info *coin,int32_t *bundl int32_t iguana_peerfile_exists(struct iguana_info *coin,struct iguana_peer *addr,char *dirname,char *fname,bits256 hash2,bits256 prevhash2,int32_t numblocks); struct iguana_ramchain *iguana_ramchainset(struct iguana_info *coin,struct iguana_ramchain *ramchain,struct iguana_txblock *txdata); void *iguana_iAddriterator(struct iguana_info *coin,struct iguana_iAddr *iA,struct iguana_peer *addr); -long iguana_ramchain_data(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_peer *addr,struct iguana_txblock *origtxdata,struct iguana_msgtx *txarray,int32_t txn_count,uint8_t *data,int32_t recvlen,struct iguana_bundle *bp,struct iguana_block *block,uint8_t zcash); +long iguana_ramchain_data(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_peer *addr,struct iguana_txblock *origtxdata,struct iguana_msgtx *txarray,int32_t txn_count,uint8_t *data,int32_t recvlen,struct iguana_bundle *bp,struct iguana_block *block); int32_t iguana_bundlehash2add(struct iguana_info *coin,struct iguana_block **blockp,struct iguana_bundle *bp,int32_t bundlei,bits256 hash2); struct iguana_block *iguana_bundleblockadd(struct iguana_info *coin,struct iguana_bundle **bpp,int32_t *bundleip,struct iguana_block *origblock); int32_t iguana_chainextend(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_block *newblock);