Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
48cec0c3a2
  1. 4
      basilisk/basilisk.c
  2. 2
      basilisk/basilisk.h
  3. 2
      basilisk/basilisk_MSG.c
  4. 38
      basilisk/basilisk_swap.c
  5. 54
      iguana/iguana_interpreter.c
  6. 8
      iguana/iguana_sign.c
  7. 2
      iguana/tests/decoderawtransactionB

4
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] = toupper((int32_t)CMD[i]);
cmd[i] = tolower((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); printf("MSGPROCESS %s.(%s) tag.%d\n",CMD,(char *)data,basilisktag);
myinfo->basilisk_busy = 1; myinfo->basilisk_busy = 1;
if ( valsobj != 0 ) if ( valsobj != 0 )
@ -893,7 +893,7 @@ void basilisks_loop(void *arg)
} }
//printf("my RELAYID.%d\n",myinfo->RELAYID); //printf("my RELAYID.%d\n",myinfo->RELAYID);
//portable_mutex_unlock(&myinfo->allcoins_mutex); //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); basilisk_ping_send(myinfo,btcd);
} }
//fprintf(stderr,"i "); //fprintf(stderr,"i ");

2
basilisk/basilisk.h

@ -23,7 +23,7 @@
#define BASILISK_MAXFANOUT 64 #define BASILISK_MAXFANOUT 64
#define BASILISK_DEFAULTDIFF 0x1effffff #define BASILISK_DEFAULTDIFF 0x1effffff
#define BASILISK_MAXRELAYS 64 #define BASILISK_MAXRELAYS 64
#define BASILISK_DEXDURATION 60 #define BASILISK_DEXDURATION 300
#define BASILISK_MAXFUTUREBLOCK 60 #define BASILISK_MAXFUTUREBLOCK 60
//#define BASILISK_MAXBLOCKLAG 600 //#define BASILISK_MAXBLOCKLAG 600

2
basilisk/basilisk_MSG.c

@ -180,7 +180,7 @@ int32_t basilisk_channelsend(struct supernet_info *myinfo,bits256 hash,uint32_t
valsobj = cJSON_CreateObject(); valsobj = cJSON_CreateObject();
jaddnum(valsobj,"channel",channel); jaddnum(valsobj,"channel",channel);
jaddnum(valsobj,"msgid",msgid); 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 ) if ( (retstr= basilisk_sendmessage(myinfo,0,0,0,hash,valsobj,hexstr)) != 0 )
{ {
retval = 0; retval = 0;

38
basilisk/basilisk_swap.c

@ -287,7 +287,7 @@ int32_t basilisk_numconfirms(struct supernet_info *myinfo,struct basilisk_rawtx
return(10); 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; bits256 txid;
memset(txid.bytes,0,sizeof(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); txid = bits256_doublesha256(0,data,datalen);
int32_t i; for (i=0; i<datalen; i++) int32_t i; for (i=0; i<datalen; i++)
printf("%02x",data[i]); printf("%02x",data[i]);
char str[65]; printf(" <- sendrawtransaction.(%s)\n",bits256_str(str,txid)); char str[65]; printf(" <- sendrawtransaction %s.(%s)\n",name,bits256_str(str,txid));
//txid = iguana_sendrawtransaction(coin,data,datalen); //txid = iguana_sendrawtransaction(coin,data,datalen);
} }
return(txid); return(txid);
@ -833,8 +833,8 @@ uint32_t basilisk_swapdata_rawtxsend(struct supernet_info *myinfo,struct basilis
{ {
if ( basilisk_swapdata_rawtx(myinfo,swap,data,maxlen,rawtx) != 0 ) if ( basilisk_swapdata_rawtx(myinfo,swap,data,maxlen,rawtx) != 0 )
{ {
rawtx->actualtxid = basilisk_swap_broadcast(myinfo,swap,rawtx->coin,rawtx->txbytes,rawtx->datalen); 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)); //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 ) if ( bits256_nonz(rawtx->actualtxid) != 0 && msgbits != 0 )
return(basilisk_swapsend(myinfo,swap,msgbits,rawtx->txbytes,rawtx->datalen,nextbits)); return(basilisk_swapsend(myinfo,swap,msgbits,rawtx->txbytes,rawtx->datalen,nextbits));
else return(nextbits); else return(nextbits);
@ -1047,21 +1047,18 @@ void basilisk_swaploop(void *_swap)
{ {
swap->sleeptime = 1; swap->sleeptime = 1;
swap->statebits |= 0x40000; 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"); printf("Bob error spending alice payment\n");
break; else printf("Bob spend alicepayment\n");
} break;
} }
else if ( basilisk_privAm_extract(myinfo,swap) == 0 ) else if ( basilisk_privAm_extract(myinfo,swap) == 0 )
{ {
swap->sleeptime = 1; swap->sleeptime = 1;
swap->statebits |= 0x40000; 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 after privAm\n");
printf("Bob error spending alice payment\n"); else printf("Bob spends alicepayment\n");
break;
}
} }
else if ( swap->bobpayment.locktime != 0 && time(NULL) > swap->bobpayment.locktime ) else if ( swap->bobpayment.locktime != 0 && time(NULL) > swap->bobpayment.locktime )
{ {
@ -1069,10 +1066,9 @@ void basilisk_swaploop(void *_swap)
swap->sleeptime = 1; swap->sleeptime = 1;
swap->statebits |= (0x40000 | 0x80000); swap->statebits |= (0x40000 | 0x80000);
if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->bobreclaim,0) == 0 ) if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->bobreclaim,0) == 0 )
{
printf("Bob error reclaiming own payment after alice timed out\n"); 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 ) 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 ( swap->bobdeposit.locktime != 0 && time(NULL) > swap->bobdeposit.locktime )
{ {
if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->aliceclaim,0) == 0 ) if ( basilisk_swapdata_rawtxsend(myinfo,swap,0,data,maxlen,&swap->aliceclaim,0) == 0 )
printf("Alice claims deposit\n"); printf("Alice couldnt claim deposit\n");
else printf("Alice couldnt claim deposit\n"); else printf("Alice claimed deposit\n");
break; break;
} }
else if ( basilisk_privBn_extract(myinfo,swap,data,maxlen) == 0 ) else if ( basilisk_privBn_extract(myinfo,swap,data,maxlen) == 0 )
{ {
swap->sleeptime = 1; swap->sleeptime = 1;
swap->statebits |= 0x80000000; 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"); printf("Alice error sending alicereclaim\n");
else printf("Alice couldnt reclaim her payment\n"); else printf("Alice reclaimed her payment\n");
break; break;
} }
else if ( (swap->statebits & 0x200) == 0 ) else if ( (swap->statebits & 0x200) == 0 )
@ -1173,7 +1169,7 @@ void basilisk_swaploop(void *_swap)
swap->sleeptime = 1; swap->sleeptime = 1;
swap->statebits |= 0x40000; swap->statebits |= 0x40000;
printf("Alice confirms spend of Bob's payment\n"); printf("Alice confirms spend of Bob's payment\n");
//break; break;
} }
} }
} }

54
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; struct iguana_stackdata Snum; cJSON *item = 0; char tmpstr[2048]; int32_t num = (int32_t)num64;
if ( stacks->lastpath[stacks->ifdepth] < 0 ) if ( stacks->lastpath[stacks->ifdepth] < 0 )
return(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 ( stacks->maxstackdepth > 0 )
{ {
/*if ( numbuf != 0 ) /*if ( numbuf != 0 )
@ -632,9 +632,9 @@ static int32_t iguana_dataparse(struct iguana_interpreter *stacks,uint8_t *scrip
tmp[1] = c; tmp[1] = c;
tmp[2] = 0; tmp[2] = 0;
decode_hex(&script[k],1,tmp), (*lenp) = 1; decode_hex(&script[k],1,tmp), (*lenp) = 1;
iguana_pushdata(stacks,script[k],0,0);
if ( script[k] != 0 ) if ( script[k] != 0 )
script[k++] += (IGUANA_OP_1 - 1); script[k++] += (IGUANA_OP_1 - 1);
iguana_pushdata(stacks,c,0,0);
return(k); return(k);
} }
else if ( n == 2 && c == '1' && str[1] == '0' && is_delim(str[2]) != 0 ) 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 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 ( 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; i<N; i++) for (i=0; i<N; i++)
{ {
if ( stacks->stackdepth <= 0 ) if ( stacks->stackdepth <= 0 )
return(0); return(0);
len = iguana_databuf(pubkeys[i],iguana_pop(stacks)); len = iguana_databuf(pubkeys[i],iguana_pop(stacks));
if ( len == bitcoin_pubkeylen(pubkeys[i]) ) if ( len == bitcoin_pubkeylen(pubkeys[i]) )
{
numsigners++; numsigners++;
//for (j=0; j<33; j++)
// printf("%02x",pubkeys[i][j]);
//printf(" <- pubkey.[%d]\n",i);
}
else else
{ {
printf("nonpubkey on stack\n");
return(0);
memcpy(sigs[0],pubkeys[i],len); memcpy(sigs[0],pubkeys[i],len);
siglens[0] = len; siglens[0] = len;
break; break;
} }
} }
for (i=1; i<numsigners; i++) if ( stacks->stackdepth <= 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; i<numsigners; i++)
{ {
if ( stacks->stackdepth <= 0 ) if ( stacks->stackdepth <= 0 )
return(0); return(0);
siglens[i] = iguana_databuf(sigs[i],iguana_pop(stacks)); siglens[i] = iguana_databuf(sigs[i],iguana_pop(stacks));
if ( siglens[i] > 0 && siglens[i] < 74 ) if ( siglens[i] <= 0 || siglens[i] > 74 )
break; break;
//for (j=0; j<siglens[i]; j++)
// printf("%02x",sigs[i][j]);
//printf(" <- sigs[%d]\n",i);
} }
if ( i == numsigners ) if ( i == numsigners )
{ {
iguana_pop(stacks); //char str[65]; printf("sigtxid.(%s)\n",bits256_str(str,txhash2));
if ( stacks->stackdepth > 0 )
iguana_pop(stacks); // for backward compatibility
j = numsigners-1; j = numsigners-1;
for (i=numsigners-1; i>=0; i--) for (i=numsigners-1; i>=0; i--)
{ {
for (; j>=0; j--) 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 ) if ( ++valid >= M )
return(1); return(1);
@ -978,7 +1006,7 @@ int32_t bitcoin_assembler(struct iguana_info *coin,cJSON *logarray,uint8_t scrip
free(stacks); free(stacks);
return(-1); 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; i<V->N; i++) for (i=0; i<V->N; 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) ) 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); iguana_pushdata(stacks,0,V->signers[i].pubkey,plen);
printf("pushdata plen.%d depth.%d\n",plen,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); } //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 ) 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; iguana_pushdata(stacks,0,&V->userdata[len],dlen), len += dlen;
else if ( dlen >= IGUANA_OP_1 && dlen <= IGUANA_OP_16 ) else if ( dlen >= IGUANA_OP_1 && dlen <= IGUANA_OP_16 )
{ {
dlen -= 0x50; dlen -= (IGUANA_OP_1 - 1);
iguana_pushdata(stacks,dlen,0,0); iguana_pushdata(stacks,dlen,0,0);
} }
else if ( dlen == IGUANA_OP_PUSHDATA1 ) else if ( dlen == IGUANA_OP_PUSHDATA1 )
@ -1114,7 +1142,7 @@ int32_t bitcoin_assembler(struct iguana_info *coin,cJSON *logarray,uint8_t scrip
break; break;
} }
HASH_FIND(hh,OPTABLE,str,j,op); HASH_FIND(hh,OPTABLE,str,j,op);
printf("{%s}\n",str); //printf("{%s}\n",str);
str += j; str += j;
if ( op != 0 ) if ( op != 0 )
{ {
@ -1248,7 +1276,7 @@ int32_t bitcoin_assembler(struct iguana_info *coin,cJSON *logarray,uint8_t scrip
for (i=0; i<numargs; i++) for (i=0; i<numargs; i++)
args[numargs - 1 - i] = iguana_pop(stacks); args[numargs - 1 - i] = iguana_pop(stacks);
} }
printf("%02x: numargs.%d depth.%d\n",op->opcode,numargs,stacks->stackdepth); //printf("%02x: numargs.%d depth.%d\n",op->opcode,numargs,stacks->stackdepth);
if ( stacks->logarray != 0 ) if ( stacks->logarray != 0 )
{ {
char tmpstr[1096]; char tmpstr[1096];

8
iguana/iguana_sign.c

@ -706,9 +706,15 @@ int32_t bitcoin_verifyvins(struct iguana_info *coin,bits256 *signedtxidp,char **
} }
else else
{ {
printf("SIG.%d.%d VERIFIED \n",vini,j);//%s (%s)\n",vini,*signedtx,jprint(txobj,1));
flag++; flag++;
numsigs++; numsigs++;
/*int32_t z;
for (z=0; z<siglen-1; z++)
printf("%02x",sig[z]);
printf(" <- sig[%d]n\n",j);
for (z=0; z<33; z++)
printf("%02x",vp->signers[j].pubkey[z]);
printf(" <- pub, SIG.%d.%d VERIFIED numsigs.%d vs M.%d\n",vini,j,numsigs,vp->M);*/
} }
} }
if ( numsigs >= vp->M ) if ( numsigs >= vp->M )

2
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\"]}"

Loading…
Cancel
Save