From 78d6ff2bb335081c39fcc2f880e1ffff50c50222 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 30 Apr 2016 15:50:26 -0500 Subject: [PATCH] test --- crypto777/crypto777.sources | 2 +- iguana/iguana.sources | 2 +- iguana/iguana777.h | 1 + iguana/iguana_bundles.c | 12 +++++--- iguana/iguana_payments.c | 11 ++++--- iguana/iguana_ramchain.c | 60 ++++++++++++++++++++++++------------ iguana/iguana_realtime.c | 6 ++-- iguana/iguana_sign.c | 4 +-- iguana/iguana_spendvectors.c | 24 ++++++++++----- iguana/iguana_tx.c | 42 +++++++++++++++---------- iguana/iguana_txidfind.c | 13 +++++--- iguana/iguana_unspents.c | 23 +++++++++----- 12 files changed, 129 insertions(+), 71 deletions(-) diff --git a/crypto777/crypto777.sources b/crypto777/crypto777.sources index d9ce24dac..01003ba73 100755 --- a/crypto777/crypto777.sources +++ b/crypto777/crypto777.sources @@ -42,5 +42,5 @@ NANOMSG = $(NANOMSG_CORE) $(NANOMSG_AIO) $(NANOMSG_UTILS) $(NANOMSG_DEVICES) $(N JPEG_SRCS := ../crypto777/jpeg/jaricom.c ../crypto777/jpeg/jcapimin.c ../crypto777/jpeg/jcapistd.c ../crypto777/jpeg/jcarith.c ../crypto777/jpeg/jccoefct.c ../crypto777/jpeg/jccolor.c ../crypto777/jpeg/jcdctmgr.c ../crypto777/jpeg/jchuff.c ../crypto777/jpeg/jcinit.c ../crypto777/jpeg/jcmainct.c ../crypto777/jpeg/jcmarker.c ../crypto777/jpeg/jcmaster.c ../crypto777/jpeg/jcomapi.c ../crypto777/jpeg/jcparam.c ../crypto777/jpeg/jcprepct.c ../crypto777/jpeg/jcsample.c ../crypto777/jpeg/jctrans.c ../crypto777/jpeg/jdapimin.c ../crypto777/jpeg/jdapistd.c ../crypto777/jpeg/jdarith.c ../crypto777/jpeg/jdatadst.c ../crypto777/jpeg/jdatasrc.c ../crypto777/jpeg/jdcoefct.c ../crypto777/jpeg/jdcolor.c ../crypto777/jpeg/jddctmgr.c ../crypto777/jpeg/jdhuff.c ../crypto777/jpeg/jdinput.c ../crypto777/jpeg/jdmainct.c ../crypto777/jpeg/jdmarker.c ../crypto777/jpeg/jdmaster.c ../crypto777/jpeg/jdmerge.c ../crypto777/jpeg/jdpostct.c ../crypto777/jpeg/jdsample.c ../crypto777/jpeg/jdtrans.c ../crypto777/jpeg/jerror.c ../crypto777/jpeg/jfdctflt.c ../crypto777/jpeg/jfdctfst.c ../crypto777/jpeg/jfdctint.c ../crypto777/jpeg/jidctflt.c ../crypto777/jpeg/jidctfst.c ../crypto777/jpeg/jidctint.c ../crypto777/jpeg/jquant1.c ../crypto777/jpeg/jquant2.c ../crypto777/jpeg/jutils.c ../crypto777/jpeg/jmemmgr.c ../crypto777/jpeg/jmemnobs.c -CRYPTO777_SRCS := ../crypto777/tweetnacl.c ../crypto777/bitcoind_RPC.c ../crypto777/cJSON.c ../crypto777/iguana_utils.c ../crypto777/OS_nonportable.c ../crypto777/curve25519-donna.c ../crypto777/inet.c ../crypto777/OS_portable.c ../crypto777/curve25519.c ../crypto777/libgfshare.c ../crypto777/OS_time.c ../crypto777/hmac_sha512.c ../crypto777/ramcoder.c ../crypto777/SaM.c ../crypto777/iguana_OS.c ../crypto777/iguana_serdes.c $(JPEG_SRCS) # $(NANOMSG) +CRYPTO777_SRCS := ../crypto777/iguana_secp.c ../crypto777/tweetnacl.c ../crypto777/bitcoind_RPC.c ../crypto777/cJSON.c ../crypto777/iguana_utils.c ../crypto777/OS_nonportable.c ../crypto777/curve25519-donna.c ../crypto777/inet.c ../crypto777/OS_portable.c ../crypto777/curve25519.c ../crypto777/libgfshare.c ../crypto777/OS_time.c ../crypto777/hmac_sha512.c ../crypto777/ramcoder.c ../crypto777/SaM.c ../crypto777/iguana_OS.c ../crypto777/iguana_serdes.c $(JPEG_SRCS) # $(NANOMSG) diff --git a/iguana/iguana.sources b/iguana/iguana.sources index f0c09fc49..d35f62d7f 100755 --- a/iguana/iguana.sources +++ b/iguana/iguana.sources @@ -1,2 +1,2 @@ -SOURCES := SuperNET.c iguana_bundles.c main.c igana_payment.c iguana_spendvectors.c iguana_sign.c iguana_txidfind.c iguana_realtime.c iguana_volatiles.c peggy_price.c SuperNET_category.c iguana_chains.c iguana_ramchain.c pangea_api.c peggy_ramkv.c SuperNET_hexmsg.c iguana_exchanges.c iguana_recv.c pangea_bets.c peggy_serdes.c SuperNET_keys.c iguana_rpc.c pangea_hand.c peggy_tx.c cards777.c iguana_init.c iguana_scripts.c pangea_json.c peggy_txind.c iguana777.c iguana_instantdex.c iguana_tradebots.c pangea_summary.c peggy_update.c iguana_accept.c iguana_json.c iguana_tx.c peggy.c poker.c iguana_bitmap.c iguana_msg.c iguana_unspents.c peggy_accts.c ramchain_api.c iguana_blocks.c iguana_peers.c iguana_wallet.c peggy_consensus.c databases/iguana_DB.c \ No newline at end of file +SOURCES := SuperNET.c iguana_bundles.c main.c iguana_payments.c iguana_spendvectors.c iguana_sign.c iguana_txidfind.c iguana_realtime.c iguana_volatiles.c peggy_price.c SuperNET_category.c iguana_chains.c iguana_ramchain.c pangea_api.c peggy_ramkv.c SuperNET_hexmsg.c iguana_exchanges.c iguana_recv.c pangea_bets.c peggy_serdes.c SuperNET_keys.c iguana_rpc.c pangea_hand.c peggy_tx.c cards777.c iguana_init.c iguana_scripts.c pangea_json.c peggy_txind.c iguana777.c iguana_instantdex.c iguana_tradebots.c pangea_summary.c peggy_update.c iguana_accept.c iguana_json.c iguana_tx.c peggy.c poker.c iguana_bitmap.c iguana_msg.c iguana_unspents.c peggy_accts.c ramchain_api.c iguana_blocks.c iguana_peers.c iguana_wallet.c peggy_consensus.c databases/iguana_DB.c \ No newline at end of file diff --git a/iguana/iguana777.h b/iguana/iguana777.h index b18aa27f8..12d80f74c 100755 --- a/iguana/iguana777.h +++ b/iguana/iguana777.h @@ -376,6 +376,7 @@ struct iguana_txblock struct iguana_block block; }; +#define RAMCHAIN_PTR(rdata,offset) ((void *)(long)((long)(rdata) + (long)(rdata)->offset)) struct iguana_ramchaindata { bits256 sha256; diff --git a/iguana/iguana_bundles.c b/iguana/iguana_bundles.c index a183e08df..faf31f72c 100755 --- a/iguana/iguana_bundles.c +++ b/iguana/iguana_bundles.c @@ -389,7 +389,8 @@ struct iguana_txid *iguana_bundletx(struct iguana_info *coin,struct iguana_bundl int32_t hdrsi,iter; struct iguana_txid *T; int64_t Toffset; char fname[1024]; FILE *fp; struct iguana_ramchaindata rdata,*rptr; if ( (rptr= bp->ramchain.H.data) != 0 ) { - T = (void *)(long)((long)rptr + (long)rptr->Toffset); + //T = (void *)(long)((long)rptr + (long)rptr->Toffset); + T = RAMCHAIN_PTR(rptr,Toffset); *tx = T[txidind]; return(tx); } @@ -431,8 +432,10 @@ char *iguana_bundleaddrs(struct iguana_info *coin,int32_t hdrsi) { numpkinds = ramchain->H.data->numpkinds;//(bp->isRT != 0) ? ramchain->H.data->numpkinds : ramchain->pkind; retjson = cJSON_CreateArray(); - PKbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->PKoffset); - P = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Poffset); + PKbits = RAMCHAIN_PTR(ramchain->H.data,PKoffset); + P = RAMCHAIN_PTR(ramchain->H.data,Poffset); + //PKbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->PKoffset); + //P = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Poffset); for (pkind=0; pkindrmd160,20); @@ -743,7 +746,8 @@ int32_t iguana_bundleready(struct iguana_info *coin,struct iguana_bundle *bp,int { if ( iguana_mapchaininit(fname,coin,&R,bp,i,block,ptr,filesize) >= 0 ) { - B = (void *)(long)((long)R.H.data + R.H.data->Boffset); + B = RAMCHAIN_PTR(R.H.data,Boffset); + //B = (void *)(long)((long)R.H.data + R.H.data->Boffset); prevhash2 = B[0].prev_block; } munmap(ptr,filesize); diff --git a/iguana/iguana_payments.c b/iguana/iguana_payments.c index cc80ebb9f..e86a407db 100755 --- a/iguana/iguana_payments.c +++ b/iguana/iguana_payments.c @@ -347,9 +347,12 @@ HASH_AND_TWOINTS(bitcoinrpc,gettxout,txid,vout,mempool) ramchain = (bp == coin->current) ? &coin->RTramchain : &bp->ramchain; if ( (rdata= ramchain->H.data) != 0 ) { - U = (void *)(long)((long)rdata + rdata->Uoffset); - P = (void *)(long)((long)rdata + rdata->Poffset); - T = (void *)(long)((long)rdata + rdata->Toffset); + U = RAMCHAIN_PTR(rdata,Uoffset); + P = RAMCHAIN_PTR(rdata,Poffset); + T = RAMCHAIN_PTR(rdata,Toffset); + //U = (void *)(long)((long)rdata + rdata->Uoffset); + //P = (void *)(long)((long)rdata + rdata->Poffset); + //T = (void *)(long)((long)rdata + rdata->Toffset); RTspend = 0; if ( iguana_spentflag(coin,&RTspend,&spentheight,ramchain,bp->hdrsi,unspentind,height,minconf,coin->longestchain,U[unspentind].value) == 0 ) { @@ -528,7 +531,7 @@ cJSON *iguana_createvins(struct supernet_info *myinfo,struct iguana_info *coin,c jaddistr(pubkeys,pubkeystr); } } - if ( spendscript != 0 && spendlen > 0 ) + if ( spendlen > 0 ) { init_hexbytes_noT(scriptstr,spendscript,spendlen); jaddstr(newvin,"scriptPub",scriptstr); diff --git a/iguana/iguana_ramchain.c b/iguana/iguana_ramchain.c index 011a327bb..ff47cb72e 100755 --- a/iguana/iguana_ramchain.c +++ b/iguana/iguana_ramchain.c @@ -626,18 +626,26 @@ void *_iguana_ramchain_setptrs(RAMCHAIN_PTRPS,struct iguana_ramchaindata *rdata) return(0); } //printf("rdata.%p\n",rdata); - *B = (void *)(long)((long)rdata + (long)rdata->Boffset); - *T = (void *)(long)((long)rdata + (long)rdata->Toffset); - *Kspace = (void *)(long)((long)rdata + (long)rdata->Koffset); + *B = RAMCHAIN_PTR(rdata,Boffset); + *T = RAMCHAIN_PTR(rdata,Toffset); + //*B = (void *)(long)((long)rdata + (long)rdata->Boffset); + //*T = (void *)(long)((long)rdata + (long)rdata->Toffset); + *Kspace = RAMCHAIN_PTR(rdata,Koffset); + //*Kspace = (void *)(long)((long)rdata + (long)rdata->Koffset); if ( ramchain->expanded != 0 ) { - *Ux = (void *)(long)((long)rdata + (long)rdata->Uoffset); - *Sx = (void *)(long)((long)rdata + (long)rdata->Soffset); - *P = (void *)(long)((long)rdata + (long)rdata->Poffset); - *X = (void *)(long)((long)rdata + (long)rdata->Xoffset); + *Ux = RAMCHAIN_PTR(rdata,Uoffset); + *Sx = RAMCHAIN_PTR(rdata,Soffset); + *P = RAMCHAIN_PTR(rdata,Poffset); + *X = RAMCHAIN_PTR(rdata,Xoffset); + //*Ux = (void *)(long)((long)rdata + (long)rdata->Uoffset); + //*Sx = (void *)(long)((long)rdata + (long)rdata->Soffset); + //*P = (void *)(long)((long)rdata + (long)rdata->Poffset); + //*X = (void *)(long)((long)rdata + (long)rdata->Xoffset); //ramchain->roU2 = (void *)(long)((long)rdata + (long)rdata->U2offset); //ramchain->roP2 = (void *)(long)((long)rdata + (long)rdata->P2offset); - ramchain->creditsA = (void *)(long)(long)((long)rdata + (long)rdata->Aoffset); + ramchain->creditsA = RAMCHAIN_PTR(rdata,Aoffset); + //ramchain->creditsA = (void *)(long)(long)((long)rdata + (long)rdata->Aoffset); //if ( (*U2= ramchain->U2) == 0 ) // *U2 = ramchain->U2 = ramchain->roU2; //if ( (*P2= ramchain->P2) == 0 ) @@ -645,14 +653,18 @@ void *_iguana_ramchain_setptrs(RAMCHAIN_PTRPS,struct iguana_ramchaindata *rdata) if ( (*A= ramchain->A) == 0 ) *A = ramchain->A = ramchain->creditsA; //printf("T.%p Ux.%p Sx.%p P.%p\n",*T,*Ux,*Sx,*P); - *TXbits = (void *)(long)((long)rdata + (long)rdata->TXoffset); - *PKbits = (void *)(long)((long)rdata + (long)rdata->PKoffset); + *TXbits = RAMCHAIN_PTR(rdata,TXoffset); + *PKbits = RAMCHAIN_PTR(rdata,PKoffset); + //*TXbits = (void *)(long)((long)rdata + (long)rdata->TXoffset); + //*PKbits = (void *)(long)((long)rdata + (long)rdata->PKoffset); *U = 0, *S = 0; } else { - *U = (void *)(long)((long)rdata + (long)rdata->Uoffset); - *S = (void *)(long)((long)rdata + (long)rdata->Soffset); + *U = RAMCHAIN_PTR(rdata,Uoffset); + *S = RAMCHAIN_PTR(rdata,Soffset); + //*U = (void *)(long)((long)rdata + (long)rdata->Uoffset); + //*S = (void *)(long)((long)rdata + (long)rdata->Soffset); *Ux = 0, *Sx = 0, *P = 0, *X = 0, *A = 0, *TXbits = 0, *PKbits = 0; //*U2 = 0, *P2 = 0, } return(rdata); @@ -726,9 +738,12 @@ int32_t iguana_ramchain_prefetch(struct iguana_info *coin,struct iguana_ramchain else if ( (flag & 1) != 0 ) { //printf("nonz.%d of %d\n",nonz,(int32_t)ramchain->filesize); - X = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Xoffset); - T = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Toffset); - TXbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->TXoffset); + X = RAMCHAIN_PTR(ramchain->H.data,Xoffset); + T = RAMCHAIN_PTR(ramchain->H.data,Toffset); + TXbits = RAMCHAIN_PTR(ramchain->H.data,TXoffset); + //X = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Xoffset); + //T = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Toffset); + //TXbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->TXoffset); numtxids = ramchain->H.data->numtxids; numexternal = ramchain->H.data->numexternaltxids; tlen = (ramchain->H.data->numtxsparse * ramchain->H.data->txsparsebits) >> 3; @@ -750,7 +765,8 @@ int32_t iguana_ramchain_prefetch(struct iguana_info *coin,struct iguana_ramchain } else if ( (flag & 2) != 0 ) { - U = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Uoffset); + U = RAMCHAIN_PTR(ramchain->H.data,Uoffset); + //U = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Uoffset); numunspents = ramchain->H.data->numunspents; for (i=0; iH.data + ramchain->H.data->Poffset); - PKbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->PKoffset); + P = RAMCHAIN_PTR(ramchain->H.data,Poffset); + PKbits = RAMCHAIN_PTR(ramchain->H.data,PKoffset); + //P = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Poffset); + //PKbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->PKoffset); numpkinds = ramchain->H.data->numpkinds; plen = (ramchain->H.data->numpksparse * ramchain->H.data->pksparsebits) >> 3; for (i=0; ihashes[0],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); + B = RAMCHAIN_PTR(ramchain->H.data,Boffset); + T = RAMCHAIN_PTR(ramchain->H.data,Toffset); + //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++) { if ( (block= bp->blocks[i]) != 0 || (block= iguana_blockhashset("bundleload",coin,bp->bundleheight+i,bp->hashes[i],1)) != 0 ) diff --git a/iguana/iguana_realtime.c b/iguana/iguana_realtime.c index 29258c3ae..32c81d7f1 100755 --- a/iguana/iguana_realtime.c +++ b/iguana/iguana_realtime.c @@ -74,7 +74,8 @@ void iguana_RTramchainalloc(char *fname,struct iguana_info *coin,struct iguana_b changed++; else { - B = (void *)(long)((long)rdata + rdata->Boffset); + B = RAMCHAIN_PTR(rdata,Boffset); + //B = (void *)(long)((long)rdata + rdata->Boffset); for (i=0; inumblocks; i++) if ( bits256_cmp(B[i].hash2,bp->hashes[i]) != 0 ) { @@ -277,7 +278,8 @@ int32_t iguana_realtime_update(struct iguana_info *coin) if ( coin->RTdatabad != 0 ) break; dest = &coin->RTramchain; - B = (void *)(long)((long)rdata + rdata->Boffset); + B = RAMCHAIN_PTR(rdata,Boffset); + //B = (void *)(long)((long)rdata + rdata->Boffset); bundlei = (coin->RTheight % coin->chain->bundlesize); if ( (block= iguana_bundleblock(coin,&hash2,bp,bundlei)) != 0 ) iguana_bundlehashadd(coin,bp,bundlei,block); diff --git a/iguana/iguana_sign.c b/iguana/iguana_sign.c index 7d3ef78b9..bf4fff5b2 100755 --- a/iguana/iguana_sign.c +++ b/iguana/iguana_sign.c @@ -188,7 +188,7 @@ cJSON *iguana_vinjson(struct iguana_info *coin,struct iguana_msgvin *vin) iguana_addscript(coin,json,vin->spendscript,vin->spendlen,"scriptPubKey"); if ( vin->p2shlen > 0 ) iguana_addscript(coin,json,vin->redeemscript,vin->p2shlen,"redeemScript"); - if ( vin->pubkeys != 0 && vin->numpubkeys > 0 ) + if ( vin->numpubkeys > 0 ) jadd(json,"pubkeys",iguana_pubkeysjson(vin->pubkeys,vin->numpubkeys)); } return(json); @@ -821,7 +821,7 @@ cJSON *iguana_signtx(struct supernet_info *myinfo,struct iguana_info *coin,bits2 memcpy(vp->spendscript,spend->inputs[i].spendscript,spend->inputs[i].spendlen); vp->spendlen = spend->inputs[i].spendlen; }*/ - if ( spend->inputs[i].p2shscript != 0 && spend->inputs[i].p2shlen > 0 ) + if ( spend->inputs[i].p2shlen > 0 ) { memcpy(vp->p2shscript,spend->inputs[i].p2shscript,spend->inputs[i].p2shlen); vp->p2shlen = spend->inputs[i].p2shlen; diff --git a/iguana/iguana_spendvectors.c b/iguana/iguana_spendvectors.c index d664bf033..22bb2387d 100755 --- a/iguana/iguana_spendvectors.c +++ b/iguana/iguana_spendvectors.c @@ -39,7 +39,8 @@ uint32_t iguana_spendvectorconv(struct iguana_info *coin,struct iguana_spendvect { if ( ptr->hdrsi >= 0 && ptr->hdrsi < coin->bundlescount && (spentbp= coin->bundles[ptr->hdrsi]) != 0 ) { - spentU = (void *)(long)((long)spentbp->ramchain.H.data + spentbp->ramchain.H.data->Uoffset); + spentU = RAMCHAIN_PTR(spentbp->ramchain.H.data,Uoffset); + //spentU = (void *)(long)((long)spentbp->ramchain.H.data + spentbp->ramchain.H.data->Uoffset); if ( (spent_pkind= _iguana_spendvectorconv(ptr,&spentU[ptr->unspentind],spentbp->ramchain.H.data->numpkinds,ptr->hdrsi,ptr->unspentind)) != 0 ) converted++; else printf("illegal [%d].u%u pkind.%u vs %u\n",ptr->hdrsi,ptr->unspentind,spent_pkind,spentbp->ramchain.H.data->numpkinds); @@ -101,8 +102,10 @@ struct iguana_bundle *iguana_externalspent(struct iguana_info *coin,bits256 *pre { int32_t prev_vout,height,hdrsi; uint32_t sequenceid,unspentind; char str[65]; struct iguana_bundle *spentbp=0; struct iguana_txid *T,TX,*tp; bits256 *X; bits256 prev_hash; - X = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Xoffset); - T = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Toffset); + X = RAMCHAIN_PTR(ramchain->H.data,Xoffset); + T = RAMCHAIN_PTR(ramchain->H.data,Toffset); + //X = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Xoffset); + //T = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Toffset); //printf("external X.%p %ld num.%d\n",X,(long)ramchain->H.data->Xoffset,(int32_t)ramchain->H.data->numexternaltxids); sequenceid = s->sequenceid; hdrsi = spent_hdrsi; @@ -198,7 +201,8 @@ struct iguana_bundle *iguana_fastexternalspent(struct iguana_info *coin,bits256 if ( ind < rdata->numexternaltxids ) { char str[65]; //double duration,startmillis = OS_milliseconds(); - X = (void *)(long)((long)rdata + rdata->Xoffset); + X = RAMCHAIN_PTR(rdata,Xoffset); + //X = (void *)(long)((long)rdata + rdata->Xoffset); *prevhashp = prev_hash = X[ind]; if ( (unspentind= iguana_unspentindfind(coin,0,0,0,0,&height,prev_hash,prev_vout,spent_hdrsi-1)) != 0 ) //if ( (firstvout= iguana_txidfastfind(coin,&height,prev_hash,spent_hdrsi-1)) >= 0 ) @@ -221,7 +225,8 @@ struct iguana_bundle *iguana_fastexternalspent(struct iguana_info *coin,bits256 } else if ( ind < rdata->numtxids ) { - T = (void *)(long)((long)rdata + rdata->Toffset); + T = RAMCHAIN_PTR(rdata,Toffset); + //T = (void *)(long)((long)rdata + rdata->Toffset); *prevhashp = T[ind].txid; *unspentindp = T[ind].firstvout + s->prevout; return(coin->bundles[hdrsi]); @@ -334,7 +339,8 @@ int32_t iguana_spendvectors(struct iguana_info *coin,struct iguana_bundle *bp,st iguana_ramchain_prefetch(coin,&spentbp->ramchain,2); spentbp->lastprefetch = now; } - spentU = (void *)(long)((long)spentbp->ramchain.H.data + spentbp->ramchain.H.data->Uoffset); + spentU = RAMCHAIN_PTR(spentbp->ramchain.H.data,Uoffset); + //spentU = (void *)(long)((long)spentbp->ramchain.H.data + spentbp->ramchain.H.data->Uoffset); u = &spentU[spent_unspentind]; if ( (spent_pkind= u->pkind) != 0 && spent_pkind < spentbp->ramchain.H.data->numpkinds ) { @@ -512,7 +518,8 @@ int32_t iguana_balancegen(struct iguana_info *coin,int32_t incremental,struct ig if ( s->spendtxidind != 0 && s->spendtxidind < rdata->numtxids ) { spent_unspentind = T[s->spendtxidind].firstvout + s->prevout; - spentU = (void *)(long)((long)rdata + rdata->Uoffset); + spentU = RAMCHAIN_PTR(rdata,Uoffset); + //spentU = (void *)(long)((long)rdata + rdata->Uoffset); u = &spentU[spent_unspentind]; if ( (spent_pkind= u->pkind) != 0 && spent_pkind < rdata->numpkinds ) spent_value = u->value; @@ -959,7 +966,8 @@ int32_t iguana_spendvectorconvs(struct iguana_info *coin,struct iguana_bundle *s spent_hdrsi = spentbp->hdrsi; ramchain = &spentbp->ramchain; numpkinds = rdata->numpkinds; - spentU = (void *)(long)((long)rdata + rdata->Uoffset); + spentU = RAMCHAIN_PTR(rdata,Uoffset); + //spentU = (void *)(long)((long)rdata + rdata->Uoffset); for (i=converted=0; ibundles[i]) != 0 && bp->tmpspends != 0 ) diff --git a/iguana/iguana_tx.c b/iguana/iguana_tx.c index 284e5c66e..bf426d26e 100755 --- a/iguana/iguana_tx.c +++ b/iguana/iguana_tx.c @@ -26,20 +26,23 @@ int32_t iguana_scriptdata(struct iguana_info *coin,uint8_t *scriptspace,long fil { FILE *fp; long err; int32_t retval = scriptlen; #ifndef __PNACL__ - if ( fileptr[0] == 0 ) - fileptr[0] = (uint64_t)OS_mapfile(fname,&fileptr[1],0); - if ( fileptr[0] != 0 ) + if ( scriptpos < 0xffffffff ) { - if ( (scriptpos + scriptlen) <= fileptr[1] ) + if ( fileptr[0] == 0 ) + fileptr[0] = (long)OS_mapfile(fname,&fileptr[1],0); + if ( fileptr[0] != 0 ) { - memcpy(scriptspace,(void *)(fileptr[0] + scriptpos),scriptlen); - return(retval); - } - else if ( 0 ) - { - printf("munmap (%s)\n",fname); - munmap((void *)fileptr[0],fileptr[1]); - fileptr[0] = fileptr[1] = 0; + if ( (scriptpos + scriptlen) <= fileptr[1] ) + { + memcpy(scriptspace,(void *)(fileptr[0] + (uint32_t)scriptpos),scriptlen); + return(retval); + } + else if ( 0 ) + { + printf("munmap (%s)\n",fname); + munmap((void *)fileptr[0],fileptr[1]); + fileptr[0] = fileptr[1] = 0; + } } } #else @@ -69,9 +72,12 @@ int32_t iguana_vinset(struct iguana_info *coin,uint8_t *scriptspace,int32_t heig memset(vin,0,sizeof(*vin)); if ( height >= 0 && height < coin->chain->bundlesize*coin->bundlescount && (bp= coin->bundles[height / coin->chain->bundlesize]) != 0 && (rdata= bp->ramchain.H.data) != 0 ) { - S = (void *)(long)((long)rdata + rdata->Soffset); - X = (void *)(long)((long)rdata + rdata->Xoffset); - T = (void *)(long)((long)rdata + rdata->Toffset); + S = RAMCHAIN_PTR(rdata,Soffset); + X = RAMCHAIN_PTR(rdata,Xoffset); + T = RAMCHAIN_PTR(rdata,Toffset); + //S = (void *)(long)((long)rdata + rdata->Soffset); + //X = (void *)(long)((long)rdata + rdata->Xoffset); + //T = (void *)(long)((long)rdata + rdata->Toffset); spendind = (tx->firstvin + i); s = &S[spendind]; vin->sequence = s->sequenceid; @@ -115,8 +121,10 @@ int32_t iguana_voutset(struct iguana_info *coin,uint8_t *scriptspace,char *asmst memset(vout,0,sizeof(*vout)); if ( height >= 0 && height < coin->chain->bundlesize*coin->bundlescount && (bp= coin->bundles[height / coin->chain->bundlesize]) != 0 && (rdata= bp->ramchain.H.data) != 0 && i < tx->numvouts ) { - U = (void *)(long)((long)rdata + rdata->Uoffset); - P = (void *)(long)((long)rdata + rdata->Poffset); + U = RAMCHAIN_PTR(rdata,Uoffset); + P = RAMCHAIN_PTR(rdata,Poffset); + //U = (void *)(long)((long)rdata + rdata->Uoffset); + //P = (void *)(long)((long)rdata + rdata->Poffset); unspentind = (tx->firstvout + i); u = &U[unspentind]; if ( u->txidind != tx->txidind || u->vout != i || u->hdrsi != height / coin->chain->bundlesize ) diff --git a/iguana/iguana_txidfind.c b/iguana/iguana_txidfind.c index 74ca3c499..7fd5fe8a9 100755 --- a/iguana/iguana_txidfind.c +++ b/iguana/iguana_txidfind.c @@ -20,7 +20,9 @@ int32_t iguana_alloctxbits(struct iguana_info *coin,struct iguana_ramchain *ramc static int64_t total; if ( ramchain->txbits == 0 ) { - int32_t tlen; uint8_t *TXbits = (uint8_t *)((long)ramchain->H.data + ramchain->H.data->TXoffset); + int32_t tlen; uint8_t *TXbits; + TXbits = RAMCHAIN_PTR(ramchain->H.data,TXoffset); + //TXbits = (uint8_t *)((long)ramchain->H.data + ramchain->H.data->TXoffset); tlen = (int32_t)hconv_bitlen(ramchain->H.data->numtxsparse * ramchain->H.data->txsparsebits); ramchain->txbits = calloc(1,tlen); memcpy(ramchain->txbits,TXbits,tlen); @@ -278,7 +280,8 @@ struct iguana_txid *iguana_txidfind(struct iguana_info *coin,int32_t *heightp,st if ( (TXbits= ramchain->txbits) == 0 ) { //printf("use memory mapped.[%d]\n",ramchain->H.data->height/coin->chain->bundlesize); - TXbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->TXoffset); + TXbits = RAMCHAIN_PTR(ramchain->H.data,TXoffset); + //TXbits = (void *)(long)((long)ramchain->H.data + ramchain->H.data->TXoffset); } } if ( (T= ramchain->cacheT) == 0 ) @@ -286,7 +289,8 @@ struct iguana_txid *iguana_txidfind(struct iguana_info *coin,int32_t *heightp,st //if ( coin->fastfind == 0 ) // iguana_alloccacheT(coin,ramchain); //if ( (T= ramchain->cacheT) == 0 ) - T = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Toffset); + T = RAMCHAIN_PTR(ramchain->H.data,Toffset); + //T = (void *)(long)((long)ramchain->H.data + ramchain->H.data->Toffset); } if ( (txidind= iguana_sparseaddtx(TXbits,ramchain->H.data->txsparsebits,ramchain->H.data->numtxsparse,txid,T,0,ramchain)) > 0 ) { @@ -409,7 +413,8 @@ int64_t iguana_fastfindinitbundle(struct iguana_info *coin,struct iguana_bundle int32_t i; struct iguana_txid *T; struct iguana_ramchaindata *rdata; int64_t n = 0; if ( (rdata= bp->ramchain.H.data) != 0 ) { - T = (void *)(long)((long)rdata + rdata->Toffset); + T = RAMCHAIN_PTR(rdata,Toffset); + //T = (void *)(long)((long)rdata + rdata->Toffset); n = rdata->numtxids; if ( iter == 1 ) { diff --git a/iguana/iguana_unspents.c b/iguana/iguana_unspents.c index f8769d560..33ade53cb 100755 --- a/iguana/iguana_unspents.c +++ b/iguana/iguana_unspents.c @@ -33,8 +33,10 @@ int32_t iguana_unspentindfind(struct iguana_info *coin,char *coinaddr,uint8_t *s unspentind = (tp->firstvout + vout); if ( coinaddr != 0 && unspentind > 0 && (hdrsi= *heightp/coin->chain->bundlesize) >= 0 && hdrsi < coin->bundlescount && (bp= coin->bundles[hdrsi]) != 0 && (rdata= bp->ramchain.H.data) != 0 && unspentind < rdata->numunspents ) { - U = (void *)(long)((long)rdata + rdata->Uoffset); - P = (void *)(long)((long)rdata + rdata->Poffset); + U = RAMCHAIN_PTR(rdata,Uoffset); + P = RAMCHAIN_PTR(rdata,Poffset); + //U = (void *)(long)((long)rdata + rdata->Uoffset); + //P = (void *)(long)((long)rdata + rdata->Poffset); pkind = U[unspentind].pkind; if ( pkind > 0 && pkind < rdata->numpkinds ) { @@ -123,11 +125,13 @@ struct iguana_pkhash *iguana_pkhashfind(struct iguana_info *coin,struct iguana_r if ( (rdata= ramchain->H.data) != 0 ) { numpkinds = rdata->numpkinds; - PKbits = (void *)(long)((long)rdata + rdata->PKoffset); - P = (void *)(long)((long)rdata + rdata->Poffset); + PKbits = RAMCHAIN_PTR(rdata,PKoffset); + P = RAMCHAIN_PTR(rdata,Poffset); + //PKbits = (void *)(long)((long)rdata + rdata->PKoffset); + //P = (void *)(long)((long)rdata + rdata->Poffset); if ( bp == coin->current ) ACCTS = ramchain->A; - else ACCTS = (void *)(long)((long)rdata + rdata->Aoffset); + else ACCTS = RAMCHAIN_PTR(rdata,Aoffset); //ACCTS = (void *)(long)((long)rdata + rdata->Aoffset); if ( (pkind= iguana_sparseaddpk(PKbits,rdata->pksparsebits,rdata->numpksparse,rmd160,P,0,ramchain)) > 0 && pkind < numpkinds ) { *ramchainp = ramchain; @@ -168,8 +172,10 @@ int64_t iguana_pkhashbalance(struct supernet_info *myinfo,struct iguana_info *co return(0); } unspentind = lastunspentind; - U = (void *)(long)((long)rdata + rdata->Uoffset); - T = (void *)(long)((long)rdata + rdata->Toffset); + U = RAMCHAIN_PTR(rdata,Uoffset); + T = RAMCHAIN_PTR(rdata,Toffset); + //U = (void *)(long)((long)rdata + rdata->Uoffset); + //T = (void *)(long)((long)rdata + rdata->Toffset); RTspend = 0; if ( lastheight == 0 ) lastheight = IGUANA_MAXHEIGHT; @@ -195,7 +201,8 @@ int64_t iguana_pkhashbalance(struct supernet_info *myinfo,struct iguana_info *co } if ( lastheight > 0 && (A2= ramchain->A2) != 0 && (U2= ramchain->Uextras) != 0 ) { - S = (void *)(long)((long)rdata + rdata->Soffset); + S = RAMCHAIN_PTR(rdata,Soffset); + //S = (void *)(long)((long)rdata + rdata->Soffset); unspentind = A2[pkind].lastunspentind; checkval = 0; while ( unspentind > 0 )