Browse Source

skip validation of join splits

release/v0.1
jl777 8 years ago
parent
commit
6622f13c2f
  1. 3
      iguana/iguana_blocks.c
  2. 2
      iguana/iguana_chains.c
  3. 16
      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);
}
*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);
block->valid = *validp;
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");
chain->bundlesize = _IGUANA_BLOCKHASHES;
}
if ( chain->zcash != 0 )
chain->bundlesize = 500;
if ( strcmp(chain->symbol,"BTC") == 0 )
chain->bundlesize = 100;
decode_hex((uint8_t *)chain->genesis_hashdata,32,(char *)chain->genesis_hash);

16
iguana/iguana_msg.c

@ -113,7 +113,6 @@ int32_t iguana_rwblockhdr(int32_t rwflag,uint8_t zcash,uint8_t *serialized,struc
}
else
{
zmsg = (void *)msg;
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.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]);
if ( tmp != ZCASH_SOLUTION_ELEMENTS )
{
//int32_t i; for (i=0; i<157; i++)
// printf("%02x",serialized[i]);
int32_t i; for (i=0; i<157; 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);
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.bignonce = zblock->zRO.bignonce;
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]);
{
// 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]);
}
if ( zblock->zRO.numelements == ZCASH_SOLUTION_ELEMENTS )
{
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);
}
@ -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 )
iguana_possible_peer(coin,ipport);
if ( 0 && strncmp("BTC",coin->symbol,3) != 0 )
printf("%s\n",ipaddr);
if ( 0 && strcmp("TAZ",coin->symbol) == 0 )
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)

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);
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);
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");
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);
if ( (port= (uint16_t)(addr->ipbits >> 32)) == 0 )
port = coin->chain->portp2p;
@ -746,7 +740,7 @@ void iguana_startconnection(void *arg)
if ( addr->usock < 0 || (coin->peers != 0 && coin->peers->shuttingdown != 0) )
{
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);
}
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);
}
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 )
return(0);
if ( iA != 0 && iA->ipbits != 0 && iguana_numthreads(coin,1 << IGUANA_CONNTHREAD) < IGUANA_MAXCONNTHREADS && iA->status == IGUANA_PEER_ELIGIBLE )
{
//printf("%x\n",iA->ipbits);
//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;
//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)
{
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 )
return(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));
else if ( (ipaddr= queue_dequeue(&coin->possibleQ,1)) == 0 )
return((uint32_t)time(NULL));
safecopy(_ipaddr,ipaddr,sizeof(_ipaddr));
free_queueitem(ipaddr);
ipaddr = _ipaddr;
#ifdef IGUANA_DISABLEPEERS
if ( strcmp(ipaddr,"127.0.0.1") != 0 )
{
free_queueitem(ipaddr);
return((uint32_t)time(NULL));
}
#endif
ipbits = (uint32_t)calc_ipbits(ipaddr);
//printf("%s check possible peer.(%s)\n",coin->symbol,ipaddr);
if ( iguana_peerslot(coin,(uint32_t)ipbits,0) != 0 )
if ( (addr= iguana_peerslot(coin,(uint32_t)ipbits,0)) == 0 )
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 )
{
//printf("(%s) already active\n",ipaddr);
free_queueitem(ipaddr);
return((uint32_t)time(NULL));
}
else if ( coin->peers->active[i].ipaddr[0] != 0 )
n++;
}
}*/
n = coin->peers->numranked;
if ( n >= coin->MAXPEERS-(coin->MAXPEERS>>3)-1 || coin->peers->numranked >= coin->MAXPEERS )
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 )
@ -937,6 +926,7 @@ uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr)
ipaddr[i] = 0;
break;
}
//printf("%s check possible peer.(%s)\n",coin->symbol,ipaddr);
if ( (ipbits= calc_ipbits(ipaddr)) != 0 )
{
expand_ipbits(checkaddr,ipbits);
@ -952,14 +942,13 @@ uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr)
iA->status = IGUANA_PEER_ELIGIBLE;
if ( iguana_rwiAddrind(coin,1,iA,iA->hh.itemind) == 0 )
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("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("%s reject ipaddr.(%s) vs checkaddr.(%s)\n",coin->symbol,ipaddr,checkaddr);
}
}
free_queueitem(ipaddr);
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 )
{
//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;
}
//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;
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;
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 )
{
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);
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);
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);
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);

Loading…
Cancel
Save