diff --git a/iguana/iguana777.h b/iguana/iguana777.h index 76c92dc85..8b736fae4 100755 --- a/iguana/iguana777.h +++ b/iguana/iguana777.h @@ -713,7 +713,7 @@ void peggy(); int32_t opreturns_init(uint32_t blocknum,uint32_t blocktimestamp,char *path); struct iguana_info *iguana_coinfind(const char *symbol); struct iguana_info *iguana_coinadd(const char *symbol,cJSON *json); -struct iguana_ramchain *iguana_bundleload(struct iguana_info *coin,struct iguana_bundle *bp); +struct iguana_ramchain *iguana_bundleload(struct iguana_info *coin,struct iguana_ramchain *ramchain,struct iguana_bundle *bp); int32_t iguana_sendblockreq(struct iguana_info *coin,struct iguana_peer *addr,struct iguana_bundle *bp,int32_t bundlei,bits256 hash2,int32_t iamthreadsafe); int32_t iguana_send_supernet(struct iguana_info *coin,struct iguana_peer *addr,char *jsonstr,int32_t delay); diff --git a/iguana/iguana_init.c b/iguana/iguana_init.c index 011864794..0c342a13c 100755 --- a/iguana/iguana_init.c +++ b/iguana/iguana_init.c @@ -269,7 +269,7 @@ void iguana_parseline(struct iguana_info *coin,int32_t iter,FILE *fp) lastbundle = hash2; if ( (block= iguana_blockfind(coin,hash2)) != 0 ) block->mainchain = 1, block->height = height; - if ( iguana_bundleload(coin,bp) != 0 ) + if ( iguana_bundleload(coin,&bp->ramchain,bp) != 0 ) { bp->emitfinish = (uint32_t)time(NULL) + 1; //printf("LOADED bundle.%d\n",bp->bundleheight); diff --git a/iguana/iguana_ramchain.c b/iguana/iguana_ramchain.c index cd753c9ed..22977ebec 100755 --- a/iguana/iguana_ramchain.c +++ b/iguana/iguana_ramchain.c @@ -2075,17 +2075,17 @@ int32_t iguana_ramchain_expandedsave(struct iguana_info *coin,RAMCHAIN_FUNC,stru return(retval); } -struct iguana_ramchain *iguana_bundleload(struct iguana_info *coin,struct iguana_bundle *bp) +struct iguana_ramchain *iguana_bundleload(struct iguana_info *coin,struct iguana_ramchain *ramchain,struct iguana_bundle *bp) { static bits256 zero; struct iguana_blockRO *B; struct iguana_txid *T; int32_t i,firsti = 1; char fname[512]; struct iguana_block *block; struct iguana_ramchain *mapchain; - memset(&bp->ramchain,0,sizeof(bp->ramchain)); - if ( (mapchain= iguana_ramchain_map(coin,fname,bp,bp->n,&bp->ramchain,0,0,bp->hashes[0],zero,0,0,0,1)) != 0 ) + memset(ramchain,0,sizeof(*ramchain)); + if ( (mapchain= iguana_ramchain_map(coin,fname,bp,bp->n,ramchain,0,0,bp->hashes[0],zero,0,0,0,1)) != 0 ) { - iguana_ramchain_link(mapchain,bp->hashes[0],bp->ramchain.lasthash2,bp->hdrsi,bp->bundleheight,0,bp->ramchain.numblocks,firsti,1); - char str[65]; printf("bp.%d: T.%d U.%d S.%d P%d X.%d MAPPED %s %p\n",bp->hdrsi,bp->ramchain.H.data->numtxids,bp->ramchain.H.data->numunspents,bp->ramchain.H.data->numspends,bp->ramchain.H.data->numpkinds,bp->ramchain.H.data->numexternaltxids,mbstr(str,bp->ramchain.H.data->allocsize),bp->ramchain.H.data); - //ramcoder_test(bp->ramchain.H.data,bp->ramchain.H.data->allocsize); + iguana_ramchain_link(mapchain,bp->hashes[0],bp->hashes[bp->n-1],bp->hdrsi,bp->bundleheight,0,bp->n,firsti,1); + char str[65]; printf("bp.%d: T.%d U.%d S.%d P%d X.%d MAPPED %s %p\n",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); + //ramcoder_test(mapchain->H.data,mapchain->H.data->allocsize); B = (void *)(long)((long)mapchain->H.data + mapchain->H.data->Boffset); T = (void *)(long)((long)mapchain->H.data + mapchain->H.data->Toffset); for (i=0; in; i++) @@ -2110,7 +2110,7 @@ struct iguana_ramchain *iguana_bundleload(struct iguana_info *coin,struct iguana } } } - printf("mapped bundle.%d\n",bp->bundleheight); + //printf("mapped bundle.%d\n",bp->bundleheight); bp->emitfinish = (uint32_t)time(NULL) + 1; /*for (i=1; iH.data->numtxids; i++) {break; @@ -2323,10 +2323,11 @@ int32_t iguana_bundlesaveHT(struct iguana_info *coin,struct OS_memspace *mem,str sprintf(dirname,"%s/%s/%d",GLOBALTMPDIR,coin->symbol,bp->bundleheight), OS_portable_rmdir(dirname,1); //bp->ramchain = newchain; printf("load bundle.%d\n",bp->bundleheight); - iguana_bundleload(coin,bp); - printf("loaded bundle.%d data.%p\n",bp->bundleheight,bp->ramchain.H.data); + iguana_bundleload(coin,&newchain,bp); + printf("loaded bundle.%d data.%p\n",bp->bundleheight,newchain.H.data); } iguana_ramchain_free(dest,0); + bp->ramchain = newchain; return(retval); }