From 48cec0c3a22788560999973755a022e4869ab019 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 7 Jul 2016 12:21:03 -0300 Subject: [PATCH] test --- basilisk/basilisk.c | 4 +-- basilisk/basilisk.h | 2 +- basilisk/basilisk_MSG.c | 2 +- basilisk/basilisk_swap.c | 38 ++++++++++----------- iguana/iguana_interpreter.c | 54 +++++++++++++++++++++++------- iguana/iguana_sign.c | 8 ++++- iguana/tests/decoderawtransactionB | 2 +- 7 files changed, 70 insertions(+), 40 deletions(-) diff --git a/basilisk/basilisk.c b/basilisk/basilisk.c index b1256c4fb..1fa867886 100755 --- a/basilisk/basilisk.c +++ b/basilisk/basilisk.c @@ -639,7 +639,7 @@ void basilisk_msgprocess(struct supernet_info *myinfo,void *_addr,uint32_t sende CMD[i] = toupper((int32_t)CMD[i]); cmd[i] = tolower((int32_t)CMD[i]); } - if ( 1 && strcmp(CMD,"RID") != 0 ) + if ( 1 && strcmp(CMD,"RID") != 0 && strcmp(CMD,"MSG") != 0 ) printf("MSGPROCESS %s.(%s) tag.%d\n",CMD,(char *)data,basilisktag); myinfo->basilisk_busy = 1; if ( valsobj != 0 ) @@ -893,7 +893,7 @@ void basilisks_loop(void *arg) } //printf("my RELAYID.%d\n",myinfo->RELAYID); //portable_mutex_unlock(&myinfo->allcoins_mutex); - if ( (rand() % 10) == 0 && myinfo->RELAYID >= 0 ) + if ( (rand() % 100) == 0 && myinfo->RELAYID >= 0 ) basilisk_ping_send(myinfo,btcd); } //fprintf(stderr,"i "); diff --git a/basilisk/basilisk.h b/basilisk/basilisk.h index 4cbade539..e4008b3dc 100755 --- a/basilisk/basilisk.h +++ b/basilisk/basilisk.h @@ -23,7 +23,7 @@ #define BASILISK_MAXFANOUT 64 #define BASILISK_DEFAULTDIFF 0x1effffff #define BASILISK_MAXRELAYS 64 -#define BASILISK_DEXDURATION 60 +#define BASILISK_DEXDURATION 300 #define BASILISK_MAXFUTUREBLOCK 60 //#define BASILISK_MAXBLOCKLAG 600 diff --git a/basilisk/basilisk_MSG.c b/basilisk/basilisk_MSG.c index 9fb81d826..ec8ce2911 100755 --- a/basilisk/basilisk_MSG.c +++ b/basilisk/basilisk_MSG.c @@ -180,7 +180,7 @@ int32_t basilisk_channelsend(struct supernet_info *myinfo,bits256 hash,uint32_t valsobj = cJSON_CreateObject(); jaddnum(valsobj,"channel",channel); jaddnum(valsobj,"msgid",msgid); - char str[65]; printf("sendmessage.[%d] channel.%u msgid.%x -> %s\n",datalen,channel,msgid,bits256_str(str,hash)); + //char str[65]; printf("sendmessage.[%d] channel.%u msgid.%x -> %s\n",datalen,channel,msgid,bits256_str(str,hash)); if ( (retstr= basilisk_sendmessage(myinfo,0,0,0,hash,valsobj,hexstr)) != 0 ) { retval = 0; diff --git a/basilisk/basilisk_swap.c b/basilisk/basilisk_swap.c index 877fe7d17..5f8e55679 100755 --- a/basilisk/basilisk_swap.c +++ b/basilisk/basilisk_swap.c @@ -287,7 +287,7 @@ int32_t basilisk_numconfirms(struct supernet_info *myinfo,struct basilisk_rawtx return(10); } -bits256 basilisk_swap_broadcast(struct supernet_info *myinfo,struct basilisk_swap *swap,struct iguana_info *coin,uint8_t *data,int32_t datalen) +bits256 basilisk_swap_broadcast(char *name,struct supernet_info *myinfo,struct basilisk_swap *swap,struct iguana_info *coin,uint8_t *data,int32_t datalen) { bits256 txid; memset(txid.bytes,0,sizeof(txid)); @@ -296,7 +296,7 @@ bits256 basilisk_swap_broadcast(struct supernet_info *myinfo,struct basilisk_swa txid = bits256_doublesha256(0,data,datalen); int32_t i; for (i=0; iactualtxid = basilisk_swap_broadcast(myinfo,swap,rawtx->coin,rawtx->txbytes,rawtx->datalen); - char str[65],str2[65]; printf("rawtxsend %s vs %s\n",bits256_str(str,rawtx->signedtxid),bits256_str(str2,rawtx->actualtxid)); + rawtx->actualtxid = basilisk_swap_broadcast(rawtx->name,myinfo,swap,rawtx->coin,rawtx->txbytes,rawtx->datalen); + //char str[65],str2[65]; printf("rawtxsend %s vs %s\n",bits256_str(str,rawtx->signedtxid),bits256_str(str2,rawtx->actualtxid)); if ( bits256_nonz(rawtx->actualtxid) != 0 && msgbits != 0 ) return(basilisk_swapsend(myinfo,swap,msgbits,rawtx->txbytes,rawtx->datalen,nextbits)); else return(nextbits); @@ -1047,21 +1047,18 @@ void basilisk_swaploop(void *_swap) { swap->sleeptime = 1; swap->statebits |= 0x40000; - if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->bobspend,0) == 0 ) - { + if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->bobspend,0x40000) == 0 ) printf("Bob error spending alice payment\n"); - break; - } + else printf("Bob spend alicepayment\n"); + break; } else if ( basilisk_privAm_extract(myinfo,swap) == 0 ) { swap->sleeptime = 1; swap->statebits |= 0x40000; - if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->bobspend,0) == 0 ) - { - printf("Bob error spending alice payment\n"); - break; - } + if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->bobspend,0x40000) == 0 ) + printf("Bob error spending alice payment after privAm\n"); + else printf("Bob spends alicepayment\n"); } else if ( swap->bobpayment.locktime != 0 && time(NULL) > swap->bobpayment.locktime ) { @@ -1069,10 +1066,9 @@ void basilisk_swaploop(void *_swap) swap->sleeptime = 1; swap->statebits |= (0x40000 | 0x80000); if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->bobreclaim,0) == 0 ) - { printf("Bob error reclaiming own payment after alice timed out\n"); - break; - } + else printf("Bob reclaimed own payment\n"); + break; } } else if ( (swap->statebits & 0x80000) == 0 ) @@ -1102,17 +1098,17 @@ void basilisk_swaploop(void *_swap) if ( swap->bobdeposit.locktime != 0 && time(NULL) > swap->bobdeposit.locktime ) { if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->aliceclaim,0) == 0 ) - printf("Alice claims deposit\n"); - else printf("Alice couldnt claim deposit\n"); + printf("Alice couldnt claim deposit\n"); + else printf("Alice claimed deposit\n"); break; } else if ( basilisk_privBn_extract(myinfo,swap,data,maxlen) == 0 ) { swap->sleeptime = 1; swap->statebits |= 0x80000000; - if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->alicereclaim,0) == 0 ) + if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->alicereclaim,0x80000000) == 0 ) printf("Alice error sending alicereclaim\n"); - else printf("Alice couldnt reclaim her payment\n"); + else printf("Alice reclaimed her payment\n"); break; } else if ( (swap->statebits & 0x200) == 0 ) @@ -1173,7 +1169,7 @@ void basilisk_swaploop(void *_swap) swap->sleeptime = 1; swap->statebits |= 0x40000; printf("Alice confirms spend of Bob's payment\n"); - //break; + break; } } } diff --git a/iguana/iguana_interpreter.c b/iguana/iguana_interpreter.c index e1517fad5..f21215d54 100755 --- a/iguana/iguana_interpreter.c +++ b/iguana/iguana_interpreter.c @@ -498,7 +498,7 @@ static int32_t iguana_pushdata(struct iguana_interpreter *stacks,int64_t num64,u struct iguana_stackdata Snum; cJSON *item = 0; char tmpstr[2048]; int32_t num = (int32_t)num64; if ( stacks->lastpath[stacks->ifdepth] < 0 ) return(0); - printf("PUSH.(%lld %p %d)\n",(long long)num64,numbuf,numlen); + //printf("PUSH.(%lld %p %d)\n",(long long)num64,numbuf,numlen); if ( stacks->maxstackdepth > 0 ) { /*if ( numbuf != 0 ) @@ -632,9 +632,9 @@ static int32_t iguana_dataparse(struct iguana_interpreter *stacks,uint8_t *scrip tmp[1] = c; tmp[2] = 0; decode_hex(&script[k],1,tmp), (*lenp) = 1; + iguana_pushdata(stacks,script[k],0,0); if ( script[k] != 0 ) script[k++] += (IGUANA_OP_1 - 1); - iguana_pushdata(stacks,c,0,0); return(k); } else if ( n == 2 && c == '1' && str[1] == '0' && is_delim(str[2]) != 0 ) @@ -765,40 +765,68 @@ int32_t iguana_checkschnorrsig(struct iguana_info *coin,int64_t M,struct iguana_ int32_t iguana_checkmultisig(struct iguana_info *coin,struct iguana_interpreter *stacks,int32_t M,int32_t N,bits256 txhash2) { - int32_t i,j=0,len,valid=0,numsigners = 0,siglens[MAX_PUBKEYS_PER_MULTISIG]; uint8_t pubkeys[MAX_PUBKEYS_PER_MULTISIG][MAX_SCRIPT_ELEMENT_SIZE],sigs[MAX_PUBKEYS_PER_MULTISIG][MAX_SCRIPT_ELEMENT_SIZE]; + int32_t i,j=0,len,n,m,valid=0,numsigners = 0,siglens[MAX_PUBKEYS_PER_MULTISIG]; uint8_t pubkeys[MAX_PUBKEYS_PER_MULTISIG][MAX_SCRIPT_ELEMENT_SIZE],sigs[MAX_PUBKEYS_PER_MULTISIG][MAX_SCRIPT_ELEMENT_SIZE]; if ( M <= N && N <= MAX_PUBKEYS_PER_MULTISIG ) { + if ( stacks->stackdepth <= 0 ) + return(0); + n = (int32_t)iguana_num(iguana_pop(stacks)); + if ( n != N ) + { + printf("iguana_checkmultisig n.%d != N.%d\n",n,N); + return(0); + } for (i=0; istackdepth <= 0 ) return(0); len = iguana_databuf(pubkeys[i],iguana_pop(stacks)); if ( len == bitcoin_pubkeylen(pubkeys[i]) ) + { numsigners++; + //for (j=0; j<33; j++) + // printf("%02x",pubkeys[i][j]); + //printf(" <- pubkey.[%d]\n",i); + } else { + printf("nonpubkey on stack\n"); + return(0); memcpy(sigs[0],pubkeys[i],len); siglens[0] = len; break; } } - for (i=1; istackdepth <= 0 ) + return(0); + m = (int32_t)iguana_num(iguana_pop(stacks)); + if ( m != M ) + { + printf("iguana_checkmultisig m.%d != M.%d\n",m,M); + return(0); + } + for (i=0; istackdepth <= 0 ) return(0); siglens[i] = iguana_databuf(sigs[i],iguana_pop(stacks)); - if ( siglens[i] > 0 && siglens[i] < 74 ) + if ( siglens[i] <= 0 || siglens[i] > 74 ) break; + //for (j=0; jstackdepth > 0 ) + iguana_pop(stacks); // for backward compatibility j = numsigners-1; for (i=numsigners-1; i>=0; i--) { for (; j>=0; j--) { - if ( bitcoin_verify(coin->ctx,sigs[i],siglens[i],txhash2,pubkeys[j],bitcoin_pubkeylen(pubkeys[j])) == 0 ) + if ( bitcoin_verify(coin->ctx,sigs[i],siglens[i]-1,txhash2,pubkeys[j],bitcoin_pubkeylen(pubkeys[j])) == 0 ) { if ( ++valid >= M ) return(1); @@ -978,7 +1006,7 @@ int32_t bitcoin_assembler(struct iguana_info *coin,cJSON *logarray,uint8_t scrip free(stacks); return(-1); } - printf("pushdata siglen.%d depth.%d\n",V->signers[i].siglen,stacks->stackdepth); + //printf("pushdata siglen.%d depth.%d\n",V->signers[i].siglen,stacks->stackdepth); } } for (i=0; iN; i++) @@ -989,8 +1017,8 @@ int32_t bitcoin_assembler(struct iguana_info *coin,cJSON *logarray,uint8_t scrip if ( V->suppress_pubkeys == 0 && (V->spendscript[0] != plen || V->spendscript[V->spendlen - 1] != IGUANA_OP_CHECKSIG || bitcoin_pubkeylen(&V->spendscript[1]) <= 0) ) { iguana_pushdata(stacks,0,V->signers[i].pubkey,plen); - printf("pushdata plen.%d depth.%d\n",plen,stacks->stackdepth); - } else printf("skip pubkey push %d script[0].%d spendlen.%d depth.%d\n",plen,V->spendscript[0],V->spendlen,stacks->stackdepth); + //printf("pushdata plen.%d depth.%d\n",plen,stacks->stackdepth); + } //else printf("skip pubkey push %d script[0].%d spendlen.%d depth.%d\n",plen,V->spendscript[0],V->spendlen,stacks->stackdepth); } } if ( V->userdatalen != 0 ) @@ -1003,7 +1031,7 @@ int32_t bitcoin_assembler(struct iguana_info *coin,cJSON *logarray,uint8_t scrip iguana_pushdata(stacks,0,&V->userdata[len],dlen), len += dlen; else if ( dlen >= IGUANA_OP_1 && dlen <= IGUANA_OP_16 ) { - dlen -= 0x50; + dlen -= (IGUANA_OP_1 - 1); iguana_pushdata(stacks,dlen,0,0); } else if ( dlen == IGUANA_OP_PUSHDATA1 ) @@ -1114,7 +1142,7 @@ int32_t bitcoin_assembler(struct iguana_info *coin,cJSON *logarray,uint8_t scrip break; } HASH_FIND(hh,OPTABLE,str,j,op); - printf("{%s}\n",str); + //printf("{%s}\n",str); str += j; if ( op != 0 ) { @@ -1248,7 +1276,7 @@ int32_t bitcoin_assembler(struct iguana_info *coin,cJSON *logarray,uint8_t scrip for (i=0; iopcode,numargs,stacks->stackdepth); + //printf("%02x: numargs.%d depth.%d\n",op->opcode,numargs,stacks->stackdepth); if ( stacks->logarray != 0 ) { char tmpstr[1096]; diff --git a/iguana/iguana_sign.c b/iguana/iguana_sign.c index 29a412fba..138eb1291 100755 --- a/iguana/iguana_sign.c +++ b/iguana/iguana_sign.c @@ -706,9 +706,15 @@ int32_t bitcoin_verifyvins(struct iguana_info *coin,bits256 *signedtxidp,char ** } else { - printf("SIG.%d.%d VERIFIED \n",vini,j);//%s (%s)\n",vini,*signedtx,jprint(txobj,1)); flag++; numsigs++; + /*int32_t z; + for (z=0; zsigners[j].pubkey[z]); + printf(" <- pub, SIG.%d.%d VERIFIED numsigs.%d vs M.%d\n",vini,j,numsigs,vp->M);*/ } } if ( numsigs >= vp->M ) diff --git a/iguana/tests/decoderawtransactionB b/iguana/tests/decoderawtransactionB index 5338b3df9..1da589e0b 100755 --- a/iguana/tests/decoderawtransactionB +++ b/iguana/tests/decoderawtransactionB @@ -1 +1 @@ -curl --url "http://127.0.0.1:7778" --data "{\"method\":\"decoderawtransaction\",\"params\":[\"01000000dc4f24570156bb006164173811be6647f68f9a46eab4322e6fdef816aeb3e71e419ca49bfe180000006a473044022027e0e1983c88832e9adcad681692e905333f32905553bedc6df2fcacc250574d0220259aa91c7fb0378561c37477c2b5e7872b5c9a1daababe087945639fe79593e0012102d14a195654f536df6dfe5a38278d1b470d00f17de78eeb5ce9e9eea9edb2c212ffffffff01588c0200000000001976a914d8b8c039206af6cec82bca950f592801e62808cb88ac00000000\"]}" +curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"BTCD\",\"method\":\"decoderawtransaction\",\"params\":[\"04000000be5e7e5701e431888ce51d5fb6844f1bea36976818a860ac4f7f7aa03e6d8cc6d1d36eb43400000000d5483045022100ea07e67c59fe4726059e19b9d89f74476fa76734b6b8bc75fe582afec4b65b9502205254bb2c1c17bf7f3def5d3a3d9aae84b6aa8dacd5db727c1afaded4bceec5cb01473044022048c80b0e91707eb74e4a20d3a17ec0bddd03f060a040777a0830001f513b5f8702202eeb87d2771dec1c09b28147006284ca771163419fc304e306766eb5fbd362960121024ac5ab38efd456739f5fd70cdc98729f2b3adad80a68b9d623104b9960307117210383497d04e1fb49335215952e02986294762291cd5abde651301f172600fa2924ffffffff01f0b9f505000000001976a914b7128d2ee837cf03e30a2c0e3e0181f7b9669bb688ac00000000\"]}"