diff --git a/basilisk/basilisk.c b/basilisk/basilisk.c index cd3bfff76..578a97b04 100755 --- a/basilisk/basilisk.c +++ b/basilisk/basilisk.c @@ -86,7 +86,7 @@ uint8_t *basilisk_jsondata(int32_t extraoffset,uint8_t **ptrp,uint8_t *space,int if ( (hexstr= jstr(sendjson,"data")) != 0 ) { hexdata = get_dataptr(0,&allocptr,&hexlen,hexspace,sizeof(hexspace),hexstr); - printf("delete data.%s from sendjson\n",hexstr); + //printf("delete data.%s from sendjson\n",hexstr); jdelete(sendjson,"data"); } *ptrp = 0; @@ -409,24 +409,6 @@ char *basilisk_standardservice(char *CMD,struct supernet_info *myinfo,bits256 ha return(jprint(retjson,1)); } -int32_t basilisk_blocksubmit(struct supernet_info *myinfo,struct iguana_info *btcd,struct iguana_info *virt,char *blockstr,bits256 hash2) -{ - int32_t datalen; uint8_t *data,space[16384],*allocptr; cJSON *valsobj; char *str; - if ( (data= get_dataptr(sizeof(struct iguana_msghdr) + BASILISK_HDROFFSET,&allocptr,&datalen,space,sizeof(space),blockstr)) != 0 ) - { - gecko_blockarrived(myinfo,virt,"127.0.0.1",data,datalen,hash2); - valsobj = cJSON_CreateObject(); - jaddnum(valsobj,"fanout",-1); - jaddstr(valsobj,"symbol",virt->symbol); - if ( (str= basilisk_standardservice("BLK",myinfo,hash2,valsobj,blockstr,0)) != 0 ) - free(str); - free_json(valsobj); - } - if ( allocptr != 0 ) - free(allocptr); - return(0); -} - #include "basilisk_bitcoin.c" #include "basilisk_nxt.c" #include "basilisk_ether.c" diff --git a/gecko/gecko.c b/gecko/gecko.c index 22b7ec255..f973034e2 100755 --- a/gecko/gecko.c +++ b/gecko/gecko.c @@ -39,6 +39,34 @@ #include "gecko_miner.c" #include "gecko_blocks.c" +int32_t basilisk_blocksubmit(struct supernet_info *myinfo,struct iguana_info *btcd,struct iguana_info *virt,char *blockstr,bits256 hash2) +{ + int32_t datalen; uint8_t *data,space[16384],*allocptr; cJSON *valsobj=0,*retjson; char *str,*str2; + if ( (data= get_dataptr(sizeof(struct iguana_msghdr) + BASILISK_HDROFFSET,&allocptr,&datalen,space,sizeof(space),blockstr)) != 0 ) + { + if ( (str= gecko_blockarrived(myinfo,virt,"127.0.0.1",data,datalen,hash2)) != 0 ) + { + if ( (retjson= cJSON_Parse(str)) != 0 ) + { + if ( jobj(retjson,"error") == 0 ) + { + valsobj = cJSON_CreateObject(); + jaddnum(valsobj,"fanout",-1); + jaddstr(valsobj,"symbol",virt->symbol); + if ( (str2= basilisk_standardservice("BLK",myinfo,hash2,valsobj,blockstr,0)) != 0 ) + free(str2); + free_json(valsobj); + } + free_json(retjson); + } + free(str); + } + } + if ( allocptr != 0 ) + free(allocptr); + return(0); +} + int32_t iguana_ROallocsize(struct iguana_info *virt) { return(virt->chain->zcash != 0 ? sizeof(struct iguana_zblock) : sizeof(struct iguana_block)); diff --git a/gecko/gecko_blocks.c b/gecko/gecko_blocks.c index c3218d141..b7c5af432 100755 --- a/gecko/gecko_blocks.c +++ b/gecko/gecko_blocks.c @@ -169,7 +169,7 @@ char *gecko_blockarrived(struct supernet_info *myinfo,struct iguana_info *virt,c { printf("gecko_blockarrived: duplicate.[%d] txid.%s\n",i,bits256_str(str,txid)); return(clonestr("{\"error\":\"gecko block duplicate txid\"}")); - } + } else printf("%s is new txid\n",bits256_str(str,txid)); } txdata.zblock.RO.allocsize = iguana_ROallocsize(virt); if ( iguana_blockvalidate(virt,&valid,(struct iguana_block *)&txdata.zblock,1) < 0 ) @@ -213,20 +213,24 @@ char *gecko_blockarrived(struct supernet_info *myinfo,struct iguana_info *virt,c } } prev = block; - for (j=0; j<=i; j++) + for (j=0; j<=i+1; j++) { - if ( (prev= iguana_blockfind("geckoprev",virt,prev->RO.prev_block)) == 0 ) - return(clonestr("{\"error\":\"gecko block mainchain link error\"}")); if ( prev->protected == 0 || prev->height == (adjacent + 1 - j) ) { - prev->mainchain = 1; - prev->height = (adjacent + 1 - j); + if ( prev->mainchain != 1 ) + prev->mainchain = 1; + if ( prev->height != (adjacent + 1 - j) ) + prev->height = (adjacent + 1 - j); + if ( prev->height == 0 ) + break; } else { printf("REJECT block: cant change height of protected block: ht.%d vs %d\n",adjacent + 1 - j, prev->height); return(clonestr("{\"error\":\"gecko block cant override protected block's height\"}")); } + if ( (prev= iguana_blockfind("geckoprev",virt,prev->RO.prev_block)) == 0 ) + return(clonestr("{\"error\":\"gecko block mainchain link error\"}")); } txdata.zblock.height = block->height; txdata.zblock.mainchain = block->mainchain = 1; diff --git a/iguana/iguana_peers.c b/iguana/iguana_peers.c index 4d979e6b8..f771f606b 100755 --- a/iguana/iguana_peers.c +++ b/iguana/iguana_peers.c @@ -463,7 +463,7 @@ int32_t iguana_send(struct iguana_info *coin,struct iguana_peer *addr,uint8_t *s remains = len; if ( strncmp(cmdstr+1,"uperNET",strlen("uperNET")) == 0 || strncmp(cmdstr+1,"uperNet",strlen("uperNet")) == 0 ) { - printf(" >>>>>>> send.(%s) %d bytes to %s:%u supernet.%d\n",cmdstr,len,addr->ipaddr,addr->A.port,addr->supernet); + printf(" >>>>>>> send.(%s) crc.%x %d bytes to %s:%u supernet.%d\n",cmdstr,calc_crc32(0,serialized,len),len,addr->ipaddr,addr->A.port,addr->supernet); } else if ( addr->msgcounts.verack == 0 && (strcmp(cmdstr,"version") != 0 && strcmp(cmdstr,"ConnectTo") != 0 && strcmp(cmdstr,"verack") != 0) != 0 ) { diff --git a/iguana/main.c b/iguana/main.c index ad1ada25f..5ddc63b5f 100755 --- a/iguana/main.c +++ b/iguana/main.c @@ -1150,7 +1150,7 @@ void iguana_appletests(struct supernet_info *myinfo) bitcoin_sharedsecret(myinfo->ctx,hash2,pubkey,33); printf("secp256k1 elapsed %.3f for %d iterations\n",OS_milliseconds() - startmillis,i); getchar();**/ - if ( 1 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"protover\":70002,\"RELAY\":0,\"VALIDATE\":0,\"portp2p\":14631,\"rpc\":14632,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":64,\"endpend\":64,\"services\":129,\"maxpeers\":128,\"newcoin\":\"BTCD\",\"active\":1,\"numhelpers\":4,\"poll\":1}"),0,myinfo->rpcport)) != 0 ) + if ( 1 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"protover\":70002,\"RELAY\":1,\"VALIDATE\":0,\"portp2p\":14631,\"rpc\":14632,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":64,\"endpend\":64,\"services\":129,\"maxpeers\":128,\"newcoin\":\"BTCD\",\"active\":1,\"numhelpers\":4,\"poll\":1}"),0,myinfo->rpcport)) != 0 ) { free(str); if ( 0 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"portp2p\":8333,\"RELAY\":0,\"VALIDATE\":0,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":1,\"endpend\":1,\"services\":128,\"maxpeers\":64,\"newcoin\":\"BTC\",\"active\":0,\"numhelpers\":4,\"poll\":100}"),0,myinfo->rpcport)) != 0 )