Browse Source

skip validation of join splits

release/v0.1
jl777 9 years ago
parent
commit
6622f13c2f
  1. 3
      iguana/iguana_blocks.c
  2. 2
      iguana/iguana_chains.c
  3. 24
      iguana/iguana_msg.c
  4. 41
      iguana/iguana_peers.c
  5. 2
      iguana/iguana_ramchain.c
  6. 5
      iguana/iguana_spendvectors.c
  7. 2
      includes/iguana_funcs.h

3
iguana/iguana_blocks.c

@ -362,7 +362,8 @@ int32_t iguana_blockvalidate(struct supernet_info *myinfo,struct iguana_info *co
return(0); return(0);
} }
*validp = 0; *validp = 0;
iguana_serialize_block(myinfo,coin->chain,&hash2,serialized,block); if ( iguana_serialize_block(myinfo,coin->chain,&hash2,serialized,block) < 0 )
return(-1);
*validp = (memcmp(hash2.bytes,block->RO.hash2.bytes,sizeof(hash2)) == 0); *validp = (memcmp(hash2.bytes,block->RO.hash2.bytes,sizeof(hash2)) == 0);
block->valid = *validp; block->valid = *validp;
iguana_blocksizecheck("blockvalidate",coin->chain->zcash,block); iguana_blocksizecheck("blockvalidate",coin->chain->zcash,block);

2
iguana/iguana_chains.c

@ -498,6 +498,8 @@ void iguana_chaininit(struct supernet_info *myinfo,struct iguana_chain *chain,in
strcpy(chain->gethdrsmsg,"getblocks"); strcpy(chain->gethdrsmsg,"getblocks");
chain->bundlesize = _IGUANA_BLOCKHASHES; chain->bundlesize = _IGUANA_BLOCKHASHES;
} }
if ( chain->zcash != 0 )
chain->bundlesize = 500;
if ( strcmp(chain->symbol,"BTC") == 0 ) if ( strcmp(chain->symbol,"BTC") == 0 )
chain->bundlesize = 100; chain->bundlesize = 100;
decode_hex((uint8_t *)chain->genesis_hashdata,32,(char *)chain->genesis_hash); decode_hex((uint8_t *)chain->genesis_hashdata,32,(char *)chain->genesis_hash);

24
iguana/iguana_msg.c

@ -113,7 +113,6 @@ int32_t iguana_rwblockhdr(int32_t rwflag,uint8_t zcash,uint8_t *serialized,struc
} }
else else
{ {
zmsg = (void *)msg;
len += iguana_rwnum(rwflag,&serialized[len],sizeof(zmsg->zH.version),&zmsg->zH.version); len += iguana_rwnum(rwflag,&serialized[len],sizeof(zmsg->zH.version),&zmsg->zH.version);
len += iguana_rwbignum(rwflag,&serialized[len],sizeof(zmsg->zH.prev_block),zmsg->zH.prev_block.bytes); len += iguana_rwbignum(rwflag,&serialized[len],sizeof(zmsg->zH.prev_block),zmsg->zH.prev_block.bytes);
len += iguana_rwbignum(rwflag,&serialized[len],sizeof(zmsg->zH.merkle_root),zmsg->zH.merkle_root.bytes); len += iguana_rwbignum(rwflag,&serialized[len],sizeof(zmsg->zH.merkle_root),zmsg->zH.merkle_root.bytes);
@ -131,8 +130,8 @@ int32_t iguana_rwblockhdr(int32_t rwflag,uint8_t zcash,uint8_t *serialized,struc
printf("rw.%d unexpected varint size for zmsg.zH.numelements <- %d %d %d\n",rwflag,zmsg->zH.var_numelements[0],zmsg->zH.var_numelements[1],zmsg->zH.var_numelements[2]); printf("rw.%d unexpected varint size for zmsg.zH.numelements <- %d %d %d\n",rwflag,zmsg->zH.var_numelements[0],zmsg->zH.var_numelements[1],zmsg->zH.var_numelements[2]);
if ( tmp != ZCASH_SOLUTION_ELEMENTS ) if ( tmp != ZCASH_SOLUTION_ELEMENTS )
{ {
//int32_t i; for (i=0; i<157; i++) int32_t i; for (i=0; i<157; i++)
// printf("%02x",serialized[i]); printf("%02x",serialized[i]);
printf(" rw.%d unexpected ZCASH_SOLUTION_ELEMENTS, (%02x %02x %02x) expected %d tmp.%d len.%d\n",rwflag,zmsg->zH.var_numelements[0],zmsg->zH.var_numelements[1],zmsg->zH.var_numelements[2],ZCASH_SOLUTION_ELEMENTS,tmp,len); printf(" rw.%d unexpected ZCASH_SOLUTION_ELEMENTS, (%02x %02x %02x) expected %d tmp.%d len.%d\n",rwflag,zmsg->zH.var_numelements[0],zmsg->zH.var_numelements[1],zmsg->zH.var_numelements[2],ZCASH_SOLUTION_ELEMENTS,tmp,len);
return(-1); return(-1);
} }
@ -252,11 +251,16 @@ int32_t iguana_serialize_block(struct supernet_info *myinfo,struct iguana_chain
zmsg.zH.bits = zblock->RO.bits; zmsg.zH.bits = zblock->RO.bits;
zmsg.zH.bignonce = zblock->zRO.bignonce; zmsg.zH.bignonce = zblock->zRO.bignonce;
if ( iguana_rwvarint32(1,zmsg.zH.var_numelements,(uint32_t *)&zblock->zRO.numelements) != sizeof(zmsg.zH.var_numelements) ) if ( iguana_rwvarint32(1,zmsg.zH.var_numelements,(uint32_t *)&zblock->zRO.numelements) != sizeof(zmsg.zH.var_numelements) )
printf("unexpected varint size for zmsg.zH.numelements <- %d %d %d\n",zmsg.zH.var_numelements[0],zmsg.zH.var_numelements[1],zmsg.zH.var_numelements[2]); {
for (i=0; i<ZCASH_SOLUTION_ELEMENTS; i++) // printf("unexpected varint size for zmsg.zH.numelements <- %d %d %d\n",zmsg.zH.var_numelements[0],zmsg.zH.var_numelements[1],zmsg.zH.var_numelements[2]);
zmsg.zH.solution[i] = zblock->zRO.solution[i]; }
zmsg.txn_count = block->RO.txn_count; if ( zblock->zRO.numelements == ZCASH_SOLUTION_ELEMENTS )
len = iguana_rwblock(myinfo,chain->symbol,chain->zcash,chain->auxpow,chain->hashalgo,1,hash2p,serialized,(void *)&zmsg,IGUANA_MAXPACKETSIZE); {
for (i=0; i<ZCASH_SOLUTION_ELEMENTS; i++)
zmsg.zH.solution[i] = zblock->zRO.solution[i];
zmsg.txn_count = block->RO.txn_count;
len = iguana_rwblock(myinfo,chain->symbol,chain->zcash,chain->auxpow,chain->hashalgo,1,hash2p,serialized,(void *)&zmsg,IGUANA_MAXPACKETSIZE);
} else return(-1);
} }
return(len); return(len);
} }
@ -451,8 +455,8 @@ void iguana_gotaddr(struct iguana_info *coin,struct iguana_peer *addr,struct igu
} }
if ( strcmp(coin->symbol,"BTC") != 0 || (rand() % 10) == 0 ) if ( strcmp(coin->symbol,"BTC") != 0 || (rand() % 10) == 0 )
iguana_possible_peer(coin,ipport); iguana_possible_peer(coin,ipport);
if ( 0 && strncmp("BTC",coin->symbol,3) != 0 ) if ( 0 && strcmp("TAZ",coin->symbol) == 0 )
printf("%s\n",ipaddr); printf("iguana_gotaddr: %s from %s\n",ipaddr,addr->ipaddr);
} }
void iguana_gotping(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_peer *addr,uint64_t nonce,uint8_t *data) void iguana_gotping(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_peer *addr,uint64_t nonce,uint8_t *data)

41
iguana/iguana_peers.c

@ -724,12 +724,6 @@ void iguana_startconnection(void *arg)
printf("iguana_startconnection.%s:%04x mismatched coin.%p (%s) vs (%s)\n",addr->ipaddr,coin->chain->portp2p,coin,coin->symbol,addr->coinname); printf("iguana_startconnection.%s:%04x mismatched coin.%p (%s) vs (%s)\n",addr->ipaddr,coin->chain->portp2p,coin,coin->symbol,addr->coinname);
return; return;
} }
/*if ( strcmp("85.25.217.233",addr->ipaddr) == 0 )
{
printf("temp blacklist %s\n",addr->ipaddr);
iguana_iAkill(coin,addr,1);
return;
}*/
//printf("%s iguana_startconnection.%s:%04x\n",coin->symbol,addr->ipaddr,coin->chain->portp2p); //printf("%s iguana_startconnection.%s:%04x\n",coin->symbol,addr->ipaddr,coin->chain->portp2p);
if ( strcmp("127.0.0.1",addr->ipaddr) == 0 )//&& (coin->myservices & NODE_NETWORK) != 0 ) if ( strcmp("127.0.0.1",addr->ipaddr) == 0 )//&& (coin->myservices & NODE_NETWORK) != 0 )
{ {
@ -737,7 +731,7 @@ void iguana_startconnection(void *arg)
printf("avoid self-loopback\n"); printf("avoid self-loopback\n");
return; return;
} }
//printf(">>>>>>>> startconnection.(%s) pending.%u usock.%d addrind.%d\n",addr->ipaddr,addr->pending,addr->usock,addr->addrind); printf(">>>>>>>> startconnection.(%s) pending.%u usock.%d addrind.%d\n",addr->ipaddr,addr->pending,addr->usock,addr->addrind);
addr->pending = (uint32_t)time(NULL); addr->pending = (uint32_t)time(NULL);
if ( (port= (uint16_t)(addr->ipbits >> 32)) == 0 ) if ( (port= (uint16_t)(addr->ipbits >> 32)) == 0 )
port = coin->chain->portp2p; port = coin->chain->portp2p;
@ -746,7 +740,7 @@ void iguana_startconnection(void *arg)
if ( addr->usock < 0 || (coin->peers != 0 && coin->peers->shuttingdown != 0) ) if ( addr->usock < 0 || (coin->peers != 0 && coin->peers->shuttingdown != 0) )
{ {
strcpy(ipaddr,addr->ipaddr); strcpy(ipaddr,addr->ipaddr);
//printf("%s refused PEER KILLED. slot.%d for %s:%d usock.%d\n",coin->symbol,addr->addrind,ipaddr,coin->chain->portp2p,addr->usock); printf("%s refused PEER KILLED. slot.%d for %s:%d usock.%d\n",coin->symbol,addr->addrind,ipaddr,coin->chain->portp2p,addr->usock);
iguana_iAkill(coin,addr,1); iguana_iAkill(coin,addr,1);
} }
else else
@ -845,16 +839,15 @@ void iguana_launchpeer(struct iguana_info *coin,char *ipaddr,int32_t forceflag)
else printf("iguana_launchpeer skip %s\n",ipaddr); else printf("iguana_launchpeer skip %s\n",ipaddr);
} }
void *iguana_iAddriterator(struct iguana_info *coin,struct iguana_iAddr *iA) void *iguana_iAddriterator(struct iguana_info *coin,struct iguana_iAddr *iA,struct iguana_peer *addr)
{ {
struct iguana_peer *addr = 0;
if ( coin->virtualchain != 0 ) if ( coin->virtualchain != 0 )
return(0); return(0);
if ( iA != 0 && iA->ipbits != 0 && iguana_numthreads(coin,1 << IGUANA_CONNTHREAD) < IGUANA_MAXCONNTHREADS && iA->status == IGUANA_PEER_ELIGIBLE ) if ( iA != 0 && iA->ipbits != 0 && iguana_numthreads(coin,1 << IGUANA_CONNTHREAD) < IGUANA_MAXCONNTHREADS && iA->status == IGUANA_PEER_ELIGIBLE )
{ {
//printf("%x\n",iA->ipbits); //printf("%x\n",iA->ipbits);
//portable_mutex_unlock(&coin->peers_mutex); //portable_mutex_unlock(&coin->peers_mutex);
if ( (addr= iguana_peerslot(coin,iA->ipbits,0)) != 0 ) if ( addr != 0 || (addr= iguana_peerslot(coin,iA->ipbits,0)) != 0 )
{ {
addr->ipbits = iA->ipbits; addr->ipbits = iA->ipbits;
//printf("pend.%d status.%d possible peer.(%s).%x threads %d %d %d %d\n",addr->pending,iA->status,addr->ipaddr,(uint32_t)addr->ipbits,iguana_numthreads(coin,0),iguana_numthreads(coin,1),iguana_numthreads(coin,2),iguana_numthreads(coin,3)); //printf("pend.%d status.%d possible peer.(%s).%x threads %d %d %d %d\n",addr->pending,iA->status,addr->ipaddr,(uint32_t)addr->ipbits,iguana_numthreads(coin,0),iguana_numthreads(coin,1),iguana_numthreads(coin,2),iguana_numthreads(coin,3));
@ -884,7 +877,7 @@ void *iguana_iAddriterator(struct iguana_info *coin,struct iguana_iAddr *iA)
uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr) uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr)
{ {
char checkaddr[64]; uint64_t ipbits; uint32_t now = (uint32_t)time(NULL); int32_t i,n; struct iguana_iAddr *iA; char checkaddr[64],_ipaddr[64]; uint64_t ipbits; uint32_t now = (uint32_t)time(NULL); int32_t i,n; struct iguana_iAddr *iA; struct iguana_peer *addr;
if ( coin->virtualchain != 0 || coin->peers == 0 ) if ( coin->virtualchain != 0 || coin->peers == 0 )
return(0); return(0);
if ( ipaddr != 0 && ipaddr[0] != 0 && coin->peers != 0 ) if ( ipaddr != 0 && ipaddr[0] != 0 && coin->peers != 0 )
@ -905,28 +898,24 @@ uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr)
return((uint32_t)time(NULL)); return((uint32_t)time(NULL));
else if ( (ipaddr= queue_dequeue(&coin->possibleQ,1)) == 0 ) else if ( (ipaddr= queue_dequeue(&coin->possibleQ,1)) == 0 )
return((uint32_t)time(NULL)); return((uint32_t)time(NULL));
safecopy(_ipaddr,ipaddr,sizeof(_ipaddr));
free_queueitem(ipaddr);
ipaddr = _ipaddr;
#ifdef IGUANA_DISABLEPEERS #ifdef IGUANA_DISABLEPEERS
if ( strcmp(ipaddr,"127.0.0.1") != 0 ) if ( strcmp(ipaddr,"127.0.0.1") != 0 )
{
free_queueitem(ipaddr);
return((uint32_t)time(NULL)); return((uint32_t)time(NULL));
}
#endif #endif
ipbits = (uint32_t)calc_ipbits(ipaddr); ipbits = (uint32_t)calc_ipbits(ipaddr);
//printf("%s check possible peer.(%s)\n",coin->symbol,ipaddr); if ( (addr= iguana_peerslot(coin,(uint32_t)ipbits,0)) == 0 )
if ( iguana_peerslot(coin,(uint32_t)ipbits,0) != 0 )
return((uint32_t)time(NULL)); return((uint32_t)time(NULL));
for (i=n=0; i<IGUANA_MAXPEERS; i++) /*for (i=n=0; i<IGUANA_MAXPEERS; i++)
{ {
if ( strcmp(ipaddr,coin->peers->active[i].ipaddr) == 0 ) if ( strcmp(ipaddr,coin->peers->active[i].ipaddr) == 0 )
{
//printf("(%s) already active\n",ipaddr);
free_queueitem(ipaddr);
return((uint32_t)time(NULL)); return((uint32_t)time(NULL));
}
else if ( coin->peers->active[i].ipaddr[0] != 0 ) else if ( coin->peers->active[i].ipaddr[0] != 0 )
n++; n++;
} }*/
n = coin->peers->numranked;
if ( n >= coin->MAXPEERS-(coin->MAXPEERS>>3)-1 || coin->peers->numranked >= coin->MAXPEERS ) if ( n >= coin->MAXPEERS-(coin->MAXPEERS>>3)-1 || coin->peers->numranked >= coin->MAXPEERS )
return((uint32_t)time(NULL)); return((uint32_t)time(NULL));
if ( strncmp("0.0.0",ipaddr,5) != 0 && strcmp("0.0.255.255",ipaddr) != 0 && strcmp("1.0.0.0",ipaddr) != 0 ) if ( strncmp("0.0.0",ipaddr,5) != 0 && strcmp("0.0.255.255",ipaddr) != 0 && strcmp("1.0.0.0",ipaddr) != 0 )
@ -937,6 +926,7 @@ uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr)
ipaddr[i] = 0; ipaddr[i] = 0;
break; break;
} }
//printf("%s check possible peer.(%s)\n",coin->symbol,ipaddr);
if ( (ipbits= calc_ipbits(ipaddr)) != 0 ) if ( (ipbits= calc_ipbits(ipaddr)) != 0 )
{ {
expand_ipbits(checkaddr,ipbits); expand_ipbits(checkaddr,ipbits);
@ -952,14 +942,13 @@ uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr)
iA->status = IGUANA_PEER_ELIGIBLE; iA->status = IGUANA_PEER_ELIGIBLE;
if ( iguana_rwiAddrind(coin,1,iA,iA->hh.itemind) == 0 ) if ( iguana_rwiAddrind(coin,1,iA,iA->hh.itemind) == 0 )
printf("error updating status for (%s) ind.%d\n",ipaddr,iA->hh.itemind); printf("error updating status for (%s) ind.%d\n",ipaddr,iA->hh.itemind);
iguana_iAddriterator(coin,iA); iguana_iAddriterator(coin,iA,addr);
} else printf("ignore.(%s) lastconnect.%u lastkilled.%u numconnects.%d\n",ipaddr,iA->lastconnect,iA->lastkilled,iA->numconnects); } else printf("ignore.(%s) lastconnect.%u lastkilled.%u numconnects.%d\n",ipaddr,iA->lastconnect,iA->lastkilled,iA->numconnects);
} // else printf("skip.(%s) ind.%d status.%d\n",ipaddr,iA->hh.itemind,iA->status); } else printf("skip.(%s) ind.%d status.%d\n",ipaddr,iA->hh.itemind,iA->status);
} else printf("cant find (%s) which should have been created\n",ipaddr); } else printf("cant find (%s) which should have been created\n",ipaddr);
} else printf("%s reject ipaddr.(%s) vs checkaddr.(%s)\n",coin->symbol,ipaddr,checkaddr); } else printf("%s reject ipaddr.(%s) vs checkaddr.(%s)\n",coin->symbol,ipaddr,checkaddr);
} }
} }
free_queueitem(ipaddr);
return((uint32_t)time(NULL)); return((uint32_t)time(NULL));
} }

2
iguana/iguana_ramchain.c

@ -1240,7 +1240,7 @@ int32_t iguana_ramchain_free(struct iguana_info *coin,struct iguana_ramchain *ra
if ( ramchain->A != ramchain->creditsA ) if ( ramchain->A != ramchain->creditsA )
{ {
//printf("hashmem.%p Free A %p %p, numpkinds.%d %ld\n",ramchain->hashmem,ramchain->A,ramchain->creditsA,rdata->numpkinds,sizeof(*ramchain->A) * rdata->numpkinds); //printf("hashmem.%p Free A %p %p, numpkinds.%d %ld\n",ramchain->hashmem,ramchain->A,ramchain->creditsA,rdata->numpkinds,sizeof(*ramchain->A) * rdata->numpkinds);
if ( deleteflag != 0 ) if ( deleteflag != 0 && ramchain->A != 0 )
myfree(ramchain->A,sizeof(*ramchain->A) * rdata->numpkinds), ramchain->A = 0; myfree(ramchain->A,sizeof(*ramchain->A) * rdata->numpkinds), ramchain->A = 0;
} }
//if ( ramchain->U2 != ramchain->roU2 ) //if ( ramchain->U2 != ramchain->roU2 )

5
iguana/iguana_spendvectors.c

@ -1101,6 +1101,11 @@ int32_t iguana_bundlevalidate(struct supernet_info *myinfo,struct iguana_info *c
static int32_t totalerrs,totalvalidated; static int32_t totalerrs,totalvalidated;
FILE *fp; char fname[1024]; uint8_t *blockspace; //uint32_t now = (uint32_t)time(NULL); FILE *fp; char fname[1024]; uint8_t *blockspace; //uint32_t now = (uint32_t)time(NULL);
int32_t i,max,len,errs = 0; struct sha256_vstate vstate; bits256 validatehash; int64_t total = 0; int32_t i,max,len,errs = 0; struct sha256_vstate vstate; bits256 validatehash; int64_t total = 0;
if ( coin->chain->zcash != 0 )
{
printf("need to process joinsplits before can validate.%s\n",coin->symbol);
return(bp->n);
}
if ( (coin->MAXPEERS > 1 && coin->VALIDATENODE == 0 && coin->FULLNODE == 0) || bp->ramchain.from_ro != 0 || bp == coin->current ) if ( (coin->MAXPEERS > 1 && coin->VALIDATENODE == 0 && coin->FULLNODE == 0) || bp->ramchain.from_ro != 0 || bp == coin->current )
{ {
bp->validated = (uint32_t)time(NULL); bp->validated = (uint32_t)time(NULL);

2
includes/iguana_funcs.h

@ -192,7 +192,7 @@ int32_t iguana_peerfname(struct iguana_info *coin,int32_t *hdrsip,char *dirname,
struct iguana_txblock *iguana_peertxdata(struct iguana_info *coin,int32_t *bundleip,char *fname,struct OS_memspace *mem,uint32_t ipbits,bits256 hash2); struct iguana_txblock *iguana_peertxdata(struct iguana_info *coin,int32_t *bundleip,char *fname,struct OS_memspace *mem,uint32_t ipbits,bits256 hash2);
int32_t iguana_peerfile_exists(struct iguana_info *coin,struct iguana_peer *addr,char *dirname,char *fname,bits256 hash2,bits256 prevhash2,int32_t numblocks); 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); 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); void *iguana_iAddriterator(struct iguana_info *coin,struct iguana_iAddr *iA,struct iguana_peer *addr);
long iguana_ramchain_data(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); long iguana_ramchain_data(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); 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); struct iguana_block *iguana_bundleblockadd(struct iguana_info *coin,struct iguana_bundle **bpp,int32_t *bundleip,struct iguana_block *origblock);

Loading…
Cancel
Save