Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
ecc4f4e26b
  1. 99
      basilisk/basilisk.c
  2. 2
      basilisk/basilisk.h
  3. 40
      basilisk/basilisk_bitcoin.c
  4. 2
      iguana/SuperNET.c
  5. 4
      iguana/iguana_sign.c

99
basilisk/basilisk.c

@ -17,20 +17,21 @@
char *basilisk_finish(struct basilisk_item *ptr,int32_t besti,char *errstr) char *basilisk_finish(struct basilisk_item *ptr,int32_t besti,char *errstr)
{ {
int32_t i; char *retstr = 0; char *retstr = 0; struct basilisk_item *parent;
for (i=0; i<ptr->numresults; i++) if ( besti >= 0 && besti < ptr->numresults )
{ {
if ( besti >= 0 && i != besti ) retstr = ptr->results[besti];
{ ptr->results[besti] = 0;
if ( ptr->results[i] != 0 )
free(ptr->results[i]);
} else retstr = ptr->results[i];
ptr->results[i] = 0;
} }
if ( retstr == 0 ) if ( retstr == 0 )
retstr = clonestr(errstr); retstr = clonestr(errstr);
ptr->retstr = retstr; ptr->retstr = retstr;
ptr->finished = (uint32_t)time(NULL); ptr->finished = (uint32_t)time(NULL);
if ( (parent= ptr->parent) != 0 )
{
ptr->parent = 0;
parent->childrendone++;
}
return(retstr); return(retstr);
} }
@ -102,7 +103,7 @@ int32_t basilisk_submit(struct supernet_info *myinfo,cJSON *reqjson,int32_t time
int32_t i,j,k,l,r2,r,n; struct iguana_peer *addr; struct iguana_info *coin; char *reqstr; cJSON *tmpjson; int32_t i,j,k,l,r2,r,n; struct iguana_peer *addr; struct iguana_info *coin; char *reqstr; cJSON *tmpjson;
tmpjson = basilisk_json(myinfo,reqjson,ptr->basilisktag,timeout); tmpjson = basilisk_json(myinfo,reqjson,ptr->basilisktag,timeout);
reqstr = jprint(tmpjson,1); reqstr = jprint(tmpjson,1);
printf("basilisk_submit.(%s)\n",reqstr); //printf("basilisk_submit.(%s)\n",reqstr);
if ( fanout <= 0 ) if ( fanout <= 0 )
fanout = BASILISK_MINFANOUT; fanout = BASILISK_MINFANOUT;
else if ( fanout > BASILISK_MAXFANOUT ) else if ( fanout > BASILISK_MAXFANOUT )
@ -250,13 +251,15 @@ char *basilisk_block(struct supernet_info *myinfo,struct iguana_info *coin,char
} }
if ( numvalid < ptr->numrequired ) if ( numvalid < ptr->numrequired )
{ {
usleep(10000); usleep(1000000);
printf("%u: numvalid.%d < required.%d\n",ptr->basilisktag,numvalid,ptr->numrequired);
continue; continue;
} }
if ( ptr->uniqueflag == 0 && ptr->numexact <= (ptr->numresults >> 1) ) if ( ptr->uniqueflag == 0 && ptr->numexact <= (ptr->numresults >> 1) )
besti = -1, errstr = "{\"error\":\"basilisk non-consensus results\"}"; besti = -1, errstr = "{\"error\":\"basilisk non-consensus results\"}";
else besti = basilisk_besti(ptr), errstr = "{\"error\":\"basilisk no valid results\"}"; else besti = basilisk_besti(ptr), errstr = "{\"error\":\"basilisk no valid results\"}";
retstr = basilisk_finish(ptr,besti,errstr); retstr = basilisk_finish(ptr,besti,errstr);
printf("besti.%d numexact.%d numresults.%d -> (%s)\n",besti,ptr->numexact,ptr->numresults,retstr);
break; break;
} }
if ( retstr == 0 ) if ( retstr == 0 )
@ -267,6 +270,7 @@ char *basilisk_block(struct supernet_info *myinfo,struct iguana_info *coin,char
hexobj = cJSON_CreateObject(); hexobj = cJSON_CreateObject();
jaddstr(hexobj,"agent","basilisk"); jaddstr(hexobj,"agent","basilisk");
jaddstr(hexobj,"method","result"); jaddstr(hexobj,"method","result");
jaddnum(hexobj,"basilisktag",ptr->basilisktag);
if ( (valsobj= cJSON_Parse(retstr)) != 0 ) if ( (valsobj= cJSON_Parse(retstr)) != 0 )
{ {
if ( jobj(valsobj,"coin") == 0 ) if ( jobj(valsobj,"coin") == 0 )
@ -287,7 +291,7 @@ char *basilisk_block(struct supernet_info *myinfo,struct iguana_info *coin,char
{ {
if ( addr->supernet != 0 && strcmp(addr->ipaddr,remoteaddr) == 0 ) if ( addr->supernet != 0 && strcmp(addr->ipaddr,remoteaddr) == 0 )
{ {
printf("send back.%d basilisk_result addr->supernet.%u to (%s).%d\n",(int32_t)strlen(retstr),addr->supernet,addr->ipaddr,addr->A.port); printf("send back.%s basilisk_result addr->supernet.%u to (%s).%d\n",retstr,addr->supernet,addr->ipaddr,addr->A.port);
iguana_send_supernet(addr,retstr,0); iguana_send_supernet(addr,retstr,0);
return(retstr); return(retstr);
} }
@ -410,7 +414,7 @@ INT_AND_ARRAY(basilisk,result,basilisktag,vals)
ptr = calloc(1,sizeof(*ptr)); ptr = calloc(1,sizeof(*ptr));
ptr->retstr = jprint(vals,0); ptr->retstr = jprint(vals,0);
ptr->basilisktag = basilisktag; ptr->basilisktag = basilisktag;
printf("Q.%u results vals.(%s)\n",basilisktag,ptr->retstr); //printf("Q.%u results vals.(%s)\n",basilisktag,ptr->retstr);
queue_enqueue("resultsQ",&myinfo->basilisks.resultsQ,&ptr->DL,0); queue_enqueue("resultsQ",&myinfo->basilisks.resultsQ,&ptr->DL,0);
return(clonestr("{\"result\":\"queued basilisk return\"}")); return(clonestr("{\"result\":\"queued basilisk return\"}"));
} else printf("null vals.(%s) or no hexmsg.%p\n",jprint(vals,0),vals); } else printf("null vals.(%s) or no hexmsg.%p\n",jprint(vals,0),vals);
@ -424,7 +428,7 @@ char *basilisk_hexmsg(struct supernet_info *myinfo,struct category_info *cat,voi
array = 0; array = 0;
if ( (remotejson= cJSON_Parse(ptr)) != 0 ) if ( (remotejson= cJSON_Parse(ptr)) != 0 )
{ {
printf("basilisk.(%s)\n",jprint(remotejson,0)); //printf("basilisk.(%s)\n",jprint(remotejson,0));
agent = jstr(remotejson,"agent"); agent = jstr(remotejson,"agent");
method = jstr(remotejson,"method"); method = jstr(remotejson,"method");
if ( agent != 0 && method != 0 && strcmp(agent,"SuperNET") == 0 && strcmp(method,"DHT") == 0 && (hexmsg= jstr(remotejson,"hexmsg")) != 0 ) if ( agent != 0 && method != 0 && strcmp(agent,"SuperNET") == 0 && strcmp(method,"DHT") == 0 && (hexmsg= jstr(remotejson,"hexmsg")) != 0 )
@ -444,7 +448,6 @@ char *basilisk_hexmsg(struct supernet_info *myinfo,struct category_info *cat,voi
agent = jstr(remotejson,"agent"); agent = jstr(remotejson,"agent");
method = jstr(remotejson,"method"); method = jstr(remotejson,"method");
} }
//basilisk.({"agent":"basilisk","basilisktag":462531728,"method":"rawtx","activecoin":"BTC","vals":{"changeaddr":"1FNhoaBYzf7safMBjoCsJYgxtah3K95sep","addresses":["1Hgzt5xsnbfc8UTWqWKSTLRm5bEYHYBoCE"],"timeout":5000,"amount":"20000","spendscript":"76a914b7128d2ee837cf03e30a2c0e3e0181f7b9669bb688ac"},"basilisktag":462531728})
basilisktag = juint(remotejson,"basilisktag"); basilisktag = juint(remotejson,"basilisktag");
if ( strcmp(agent,"basilisk") == 0 && (valsobj= jobj(remotejson,"vals")) != 0 ) if ( strcmp(agent,"basilisk") == 0 && (valsobj= jobj(remotejson,"vals")) != 0 )
{ {
@ -452,7 +455,7 @@ char *basilisk_hexmsg(struct supernet_info *myinfo,struct category_info *cat,voi
coin = iguana_coinfind(jstr(valsobj,"coin")); coin = iguana_coinfind(jstr(valsobj,"coin"));
else if ( jstr(remotejson,"activecoin") != 0 ) else if ( jstr(remotejson,"activecoin") != 0 )
coin = iguana_coinfind(jstr(remotejson,"activecoin")); coin = iguana_coinfind(jstr(remotejson,"activecoin"));
printf("coin.%p agent.%s method.%s vals.%p\n",coin,agent,method,valsobj); //printf("coin.%p agent.%s method.%s vals.%p\n",coin,agent,method,valsobj);
if ( coin != 0 ) if ( coin != 0 )
{ {
if ( coin->RELAYNODE != 0 || coin->VALIDATENODE != 0 ) if ( coin->RELAYNODE != 0 || coin->VALIDATENODE != 0 )
@ -477,13 +480,13 @@ char *basilisk_hexmsg(struct supernet_info *myinfo,struct category_info *cat,voi
} }
free_json(remotejson); free_json(remotejson);
} }
printf("unhandled bitcoin_hexmsg.(%d) from %s (%s/%s)\n",len,remoteaddr,agent,method); printf("unhandled bitcoin_hexmsg.(%d) from %s (%s)\n",len,remoteaddr,(char *)ptr);
return(retstr); return(retstr);
} }
void basilisks_loop(void *arg) void basilisks_loop(void *arg)
{ {
basilisk_metricfunc metricfunc; struct basilisk_item *ptr,*tmp,*pending; int32_t i,flag,n; struct supernet_info *myinfo = arg; basilisk_metricfunc metricfunc; struct basilisk_item *ptr,*tmp,*pending,*parent; int32_t i,flag,n; struct supernet_info *myinfo = arg;
//uint8_t *blockspace; struct OS_memspace RAWMEM; //uint8_t *blockspace; struct OS_memspace RAWMEM;
//memset(&RAWMEM,0,sizeof(RAWMEM)); //memset(&RAWMEM,0,sizeof(RAWMEM));
//blockspace = calloc(1,IGUANA_MAXPACKETSIZE); //blockspace = calloc(1,IGUANA_MAXPACKETSIZE);
@ -507,8 +510,9 @@ void basilisks_loop(void *arg)
if ( (n= pending->numresults) < sizeof(pending->results)/sizeof(*pending->results) ) if ( (n= pending->numresults) < sizeof(pending->results)/sizeof(*pending->results) )
{ {
pending->results[n] = ptr->retstr; pending->results[n] = ptr->retstr;
printf("%p Add results[%d] <- (%s)\n",&pending->results[n],n,ptr->retstr);
pending->numresults++; pending->numresults++;
if ( (metricfunc= ptr->metricfunc) == 0 ) if ( (metricfunc= pending->metricfunc) == 0 )
pending->metrics[n] = n + 1; pending->metrics[n] = n + 1;
else pending->metrics[n] = (*metricfunc)(myinfo,pending,pending->results[n]); else pending->metrics[n] = (*metricfunc)(myinfo,pending,pending->results[n]);
} }
@ -521,33 +525,50 @@ void basilisks_loop(void *arg)
flag = 0; flag = 0;
HASH_ITER(hh,myinfo->basilisks.issued,pending,tmp) HASH_ITER(hh,myinfo->basilisks.issued,pending,tmp)
{ {
if ( pending->finished != 0 && pending->parent == 0 ) for (i=0; i<pending->numresults; i++)
{ if ( pending->metrics[i] == 0. )
HASH_DELETE(hh,myinfo->basilisks.issued,pending); {
if ( pending->vals != 0 ) if ( (metricfunc= pending->metricfunc) != 0 )
free_json(pending->vals); {
if ( pending->dependents != 0 ) pending->metrics[i] = (*metricfunc)(myinfo,pending,pending->results[i]);
free(pending->dependents); printf("poll metrics\n");
free(pending); }
flag++; flag++;
} }
else if ( OS_milliseconds() > pending->expiration ) if ( OS_milliseconds() > pending->expiration )
{ {
pending->finished = (uint32_t)time(NULL); if ( pending->finished == 0 )
pending->retstr = clonestr("{\"error\":\"basilisk timeout\"}"); {
if ( (parent= pending->parent) != 0 )
{
pending->parent = 0;
parent->childrendone++;
}
pending->finished = (uint32_t)time(NULL);
}
if ( pending->retstr == 0 )
pending->retstr = clonestr("{\"error\":\"basilisk timeout\"}");
printf("timeout call metrics.%u\n",pending->basilisktag);
for (i=0; i<pending->numresults; i++) for (i=0; i<pending->numresults; i++)
if ( (metricfunc= pending->metricfunc) != 0 ) if ( (metricfunc= pending->metricfunc) != 0 )
pending->metrics[i] = (*metricfunc)(myinfo,pending,pending->results[i]); pending->metrics[i] = (*metricfunc)(myinfo,pending,pending->results[i]);
} }
else if ( pending->finished != 0 )
{ {
for (i=0; i<pending->numresults; i++) if ( pending->dependents == 0 || pending->childrendone >= pending->numchildren )
if ( pending->metrics[i] == 0. ) {
{ HASH_DELETE(hh,myinfo->basilisks.issued,pending);
if ( (metricfunc= pending->metricfunc) != 0 ) if ( pending->dependents != 0 )
pending->metrics[i] = (*metricfunc)(myinfo,pending,pending->results[i]); free(pending->dependents);
flag++; printf("free ptr.%u\n",pending->basilisktag);
} for (i=0; i<pending->numresults; i++)
if ( pending->results[i] != 0 )
free(pending->results[i]);
if ( pending->vals != 0 )
free_json(pending->vals);
free(pending);
flag++;
}
} }
} }
if ( flag == 0 ) if ( flag == 0 )

2
basilisk/basilisk.h

@ -27,7 +27,7 @@ struct basilisk_value { bits256 txid; int64_t value; int32_t height; int16_t vou
struct basilisk_item struct basilisk_item
{ {
struct queueitem DL; UT_hash_handle hh; struct basilisk_item *parent; void *dependents; struct queueitem DL; UT_hash_handle hh; struct basilisk_item *parent; void *dependents;
uint32_t submit,finished,basilisktag,numresults,numexact,uniqueflag,numrequired; uint32_t submit,finished,basilisktag,numresults,numexact,uniqueflag,numrequired,childrendone,numchildren;
char symbol[32]; double expiration; cJSON *vals; int32_t metricdir; void *metricfunc; char symbol[32]; double expiration; cJSON *vals; int32_t metricdir; void *metricfunc;
char *retstr,*results[BASILISK_MAXFANOUT]; double metrics[BASILISK_MAXFANOUT]; char *retstr,*results[BASILISK_MAXFANOUT]; double metrics[BASILISK_MAXFANOUT];
}; };

40
basilisk/basilisk_bitcoin.c

@ -403,12 +403,14 @@ void *basilisk_bitcoinvalue(struct basilisk_item *Lptr,struct supernet_info *myi
txid = jbits256(valsobj,"txid"); txid = jbits256(valsobj,"txid");
vout = jint(valsobj,"vout"); vout = jint(valsobj,"vout");
coinaddr = jstr(valsobj,"address"); coinaddr = jstr(valsobj,"address");
printf("bitcoinvalue\n");
if ( coin != 0 && basilisk_bitcoinavail(coin) != 0 && coinaddr != 0 && coinaddr[0] != 0 ) if ( coin != 0 && basilisk_bitcoinavail(coin) != 0 && coinaddr != 0 && coinaddr[0] != 0 )
{ {
if ( coin->VALIDATENODE != 0 || coin->RELAYNODE != 0 ) if ( coin->VALIDATENODE != 0 || coin->RELAYNODE != 0 )
{ {
if ( iguana_unspentindfind(coin,coinaddr,0,0,&value,&height,txid,vout,coin->bundlescount) > 0 ) if ( iguana_unspentindfind(coin,coinaddr,0,0,&value,&height,txid,vout,coin->bundlescount) > 0 )
{ {
printf("bitcoinvalue found iguana\n");
Lptr->retstr = basilisk_valuestr(coin,coinaddr,value,height,txid,vout); Lptr->retstr = basilisk_valuestr(coin,coinaddr,value,height,txid,vout);
return(Lptr); return(Lptr);
} }
@ -421,11 +423,13 @@ void *basilisk_bitcoinvalue(struct basilisk_item *Lptr,struct supernet_info *myi
{ {
if ( v->vout == vout && bits256_cmp(txid,v->txid) == 0 && strcmp(v->coinaddr,coinaddr) == 0 ) if ( v->vout == vout && bits256_cmp(txid,v->txid) == 0 && strcmp(v->coinaddr,coinaddr) == 0 )
{ {
printf("bitcoinvalue local\n");
Lptr->retstr = basilisk_valuestr(coin,coinaddr,value,height,txid,vout); Lptr->retstr = basilisk_valuestr(coin,coinaddr,value,height,txid,vout);
return(Lptr); return(Lptr);
} }
} }
} }
printf("bitcoinvalue issue remote\n");
return(basilisk_issueremote(myinfo,"value",coin->symbol,valsobj,0,juint(valsobj,"fanout"),juint(valsobj,"minresults"),basilisktag)); return(basilisk_issueremote(myinfo,"value",coin->symbol,valsobj,0,juint(valsobj,"fanout"),juint(valsobj,"minresults"),basilisktag));
} }
@ -437,7 +441,14 @@ double basilisk_bitcoin_rawtxmetric_dependents(struct supernet_info *myinfo,stru
if ( (child= dependents->ptrs[i]) != 0 ) if ( (child= dependents->ptrs[i]) != 0 )
{ {
if ( ptr->finished != 0 ) if ( ptr->finished != 0 )
child->finished = (uint32_t)time(NULL); {
printf("parent finished\n");
if ( child->finished == 0 )
{
ptr->childrendone++;
child->finished = (uint32_t)time(NULL);
}
}
else if ( child->finished == 0 ) else if ( child->finished == 0 )
notfinished++; notfinished++;
} }
@ -445,11 +456,8 @@ double basilisk_bitcoin_rawtxmetric_dependents(struct supernet_info *myinfo,stru
if ( notfinished != 0 ) if ( notfinished != 0 )
{ {
if ( ptr->finished != 0 ) if ( ptr->finished != 0 )
{ return(-1.);
if ( ptr->metricdir < 0 ) else return(0.);
return(1.);
else return(-1.);
} else return(0.);
} }
else if ( ptr->vals != 0 ) else if ( ptr->vals != 0 )
{ {
@ -470,7 +478,7 @@ double basilisk_bitcoin_rawtxmetric_dependents(struct supernet_info *myinfo,stru
if ( j == numaddrs ) if ( j == numaddrs )
{ {
printf("spend of invalid input address.(%s)\n",coinaddr); printf("spend of invalid input address.(%s)\n",coinaddr);
metric = 3. + i; metric = -(3. + i);
} }
printf("Valid spend %.8f to %s\n",dstr(value),coinaddr); printf("Valid spend %.8f to %s\n",dstr(value),coinaddr);
} }
@ -483,10 +491,10 @@ double basilisk_bitcoin_rawtxmetric_dependents(struct supernet_info *myinfo,stru
if ( (inputsum - dependents->outputsum) != txfee ) if ( (inputsum - dependents->outputsum) != txfee )
{ {
printf("inputsum %.8f - outputsum %.8f = %.8f != txfee %.8f\n",dstr(inputsum),dstr(dependents->outputsum),dstr(inputsum)-dstr(dependents->outputsum),dstr(txfee)); printf("inputsum %.8f - outputsum %.8f = %.8f != txfee %.8f\n",dstr(inputsum),dstr(dependents->outputsum),dstr(inputsum)-dstr(dependents->outputsum),dstr(txfee));
return(1001.); // error return(-1001.); // error
} }
return(dstr(dependents->cost)); return(dstr(dependents->cost));
} else return(666.); // no vals?? } else return(-666.); // no vals??
} }
double basilisk_bitcoin_rawtxmetric(struct supernet_info *myinfo,struct basilisk_item *ptr,char *resultstr) double basilisk_bitcoin_rawtxmetric(struct supernet_info *myinfo,struct basilisk_item *ptr,char *resultstr)
@ -504,11 +512,12 @@ double basilisk_bitcoin_rawtxmetric(struct supernet_info *myinfo,struct basilisk
} }
return(metric); return(metric);
} }
if ( (resultsobj= cJSON_Parse(resultstr)) == 0 || (vins= jobj(resultsobj,"vins")) != 0 || (rawtx= jstr(resultsobj,"rawtx")) != 0 ) if ( (resultsobj= cJSON_Parse(resultstr)) == 0 || (vins= jobj(resultsobj,"vins")) == 0 || (rawtx= jstr(resultsobj,"rawtx")) == 0 )
{ {
if ( resultsobj != 0 ) if ( resultsobj != 0 )
free_json(resultsobj); free_json(resultsobj);
return(1.); // error printf("resultstr error.(%s)\n",resultstr);
return(-1.); // error
} }
spendscriptstr = jstr(ptr->vals,"spendscript"); spendscriptstr = jstr(ptr->vals,"spendscript");
changeaddr = jstr(ptr->vals,"changeaddr"); changeaddr = jstr(ptr->vals,"changeaddr");
@ -523,7 +532,7 @@ double basilisk_bitcoin_rawtxmetric(struct supernet_info *myinfo,struct basilisk
if ( juint(txobj,"locktime") != locktime ) if ( juint(txobj,"locktime") != locktime )
{ {
printf("locktime mismatch %u != %u\n",juint(txobj,"locktime"),locktime); printf("locktime mismatch %u != %u\n",juint(txobj,"locktime"),locktime);
return(2.); // error return(-2.); // error
} }
else if ( jobj(txobj,"error") == 0 && cJSON_GetArraySize(vins) == msgtx.tx_in ) else if ( jobj(txobj,"error") == 0 && cJSON_GetArraySize(vins) == msgtx.tx_in )
{ {
@ -532,6 +541,7 @@ double basilisk_bitcoin_rawtxmetric(struct supernet_info *myinfo,struct basilisk
dependents->coinaddrs = (void *)&dependents->results[msgtx.tx_in]; dependents->coinaddrs = (void *)&dependents->results[msgtx.tx_in];
dependents->numptrs = msgtx.tx_in; dependents->numptrs = msgtx.tx_in;
ptr->dependents = dependents; ptr->dependents = dependents;
ptr->numchildren = dependents->numptrs;
for (i=0; i<msgtx.tx_in; i++) for (i=0; i<msgtx.tx_in; i++)
{ {
vin = jitem(vins,i); vin = jitem(vins,i);
@ -577,7 +587,7 @@ double basilisk_bitcoin_rawtxmetric(struct supernet_info *myinfo,struct basilisk
if ( m == 1 && strcmp(jstri(addrs,0),changeaddr) == 0 ) if ( m == 1 && strcmp(jstri(addrs,0),changeaddr) == 0 )
{ {
dependents->change = msgtx.vouts[i].value; dependents->change = msgtx.vouts[i].value;
printf("verify it is normal spend for %s\n",changeaddr); printf("verify it is normal spend for %s %.8f\n",changeaddr,dstr(msgtx.vouts[i].value));
continue; continue;
} }
} }
@ -592,12 +602,12 @@ double basilisk_bitcoin_rawtxmetric(struct supernet_info *myinfo,struct basilisk
if ( dependents->spentsatoshis != amount ) if ( dependents->spentsatoshis != amount )
{ {
printf("spentsatoshis %.8f != expected %.8f, change %.8f\n",dstr(dependents->spentsatoshis),dstr(amount),dstr(dependents->change)); printf("spentsatoshis %.8f != expected %.8f, change %.8f\n",dstr(dependents->spentsatoshis),dstr(amount),dstr(dependents->change));
return(1000.); // error return(-1000.); // error
} }
if ( (dependents->outputsum= outputsum) <= 0 ) if ( (dependents->outputsum= outputsum) <= 0 )
{ {
printf("illegal outputsum %.8f\n",dstr(outputsum)); printf("illegal outputsum %.8f\n",dstr(outputsum));
return(1001.); // error return(-1001.); // error
} }
dependents->cost = cost; dependents->cost = cost;
return(0.); return(0.);

2
iguana/SuperNET.c

@ -492,7 +492,7 @@ int32_t iguana_send_supernet(struct iguana_peer *addr,char *jsonstr,int32_t dela
printf("SUPERSEND -> (%s) (%s) delaymillis.%d datalen.%d checkc.%x\n",jprint(SuperNET_bits2json(&serialized[sizeof(struct iguana_msghdr)],datalen),1),addr->ipaddr,delaymillis,datalen,checkc); printf("SUPERSEND -> (%s) (%s) delaymillis.%d datalen.%d checkc.%x\n",jprint(SuperNET_bits2json(&serialized[sizeof(struct iguana_msghdr)],datalen),1),addr->ipaddr,delaymillis,datalen,checkc);
if ( 1 && memcmp(destpub.bytes,GENESIS_PUBKEY.bytes,sizeof(destpub)) == 0 ) if ( 1 && memcmp(destpub.bytes,GENESIS_PUBKEY.bytes,sizeof(destpub)) == 0 )
{ {
qlen = iguana_queue_send(addr,delaymillis,serialized,"SuperNET",datalen,0,0); qlen = iguana_queue_send(addr,delaymillis,serialized,"SuperNET",datalen+1,0,0);
//printf("send broadcast\n"); //printf("send broadcast\n");
} }
else else

4
iguana/iguana_sign.c

@ -341,7 +341,7 @@ int32_t iguana_rwmsgtx(struct iguana_info *coin,int32_t rwflag,cJSON *json,uint8
array = cJSON_CreateArray(); array = cJSON_CreateArray();
if ( rwflag == 0 ) if ( rwflag == 0 )
sigser = calloc(1,maxsize); sigser = calloc(1,maxsize);
printf("json.%p array.%p sigser.%p\n",json,array,sigser); //printf("json.%p array.%p sigser.%p\n",json,array,sigser);
} }
//printf("version.%d\n",msg->version); //printf("version.%d\n",msg->version);
if ( coin->chain->hastimestamp != 0 ) if ( coin->chain->hastimestamp != 0 )
@ -561,7 +561,7 @@ char *bitcoin_json2hex(struct supernet_info *myinfo,struct iguana_info *coin,bit
cJSON *bitcoin_hex2json(struct iguana_info *coin,bits256 *txidp,struct iguana_msgtx *msgtx,char *txbytes,uint8_t *extraspace,int32_t extralen) cJSON *bitcoin_hex2json(struct iguana_info *coin,bits256 *txidp,struct iguana_msgtx *msgtx,char *txbytes,uint8_t *extraspace,int32_t extralen)
{ {
int32_t n,len; char vpnstr[64]; struct iguana_msgtx M; uint8_t *serialized; cJSON *txobj; int32_t n,len; char vpnstr[64]; struct iguana_msgtx M; uint8_t *serialized; cJSON *txobj;
if ( coin == 0 ) if ( coin == 0 || txbytes == 0 )
return(0); return(0);
txobj = cJSON_CreateObject(); txobj = cJSON_CreateObject();
if ( msgtx == 0 ) if ( msgtx == 0 )

Loading…
Cancel
Save