Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
5c0013ec1e
  1. 44
      iguana/exchanges/bitcoin.c
  2. 26
      iguana/iguana_msg.c
  3. 8
      iguana/iguana_ramchain.c
  4. 4
      iguana/iguana_rpc.c
  5. 12
      iguana/iguana_tx.c
  6. 4
      iguana/ramchain_api.c

44
iguana/exchanges/bitcoin.c

@ -455,6 +455,8 @@ cJSON *iguana_voutjson(struct iguana_info *coin,struct iguana_msgvout *vout,int3
void iguana_addscript(struct iguana_info *coin,cJSON *dest,uint8_t *script,int32_t scriptlen,char *fieldname)
{
char *scriptstr,scriptbuf[8192+256]; int32_t len; cJSON *scriptobj;
if ( scriptlen < 0 )
return;
if ( scriptlen > sizeof(scriptbuf) )
len = (scriptlen << 1) + 256, scriptstr = malloc(len);
else scriptstr = scriptbuf, len = sizeof(scriptbuf);
@ -499,6 +501,11 @@ int32_t iguana_vinparse(struct iguana_info *coin,int32_t rwflag,uint8_t *seriali
len += iguana_rwbignum(rwflag,&serialized[len],sizeof(msg->prev_hash),msg->prev_hash.bytes);
len += iguana_rwnum(rwflag,&serialized[len],sizeof(msg->prev_vout),&msg->prev_vout);
len += iguana_rwvarint32(rwflag,&serialized[len],&msg->scriptlen);
if ( msg->scriptlen > IGUANA_MAXSCRIPTSIZE )
{
printf("iguana_vinparse illegal scriptlen.%d\n",msg->scriptlen);
return(-1);
}
if ( rwflag == 0 )
{
msg->vinscript = &serialized[len];
@ -528,6 +535,11 @@ int32_t iguana_voutparse(int32_t rwflag,uint8_t *serialized,struct iguana_msgvou
int32_t len = 0;
len += iguana_rwnum(rwflag,&serialized[len],sizeof(msg->value),&msg->value);
len += iguana_rwvarint32(rwflag,&serialized[len],&msg->pk_scriptlen);
if ( msg->pk_scriptlen > IGUANA_MAXSCRIPTSIZE )
{
printf("iguana_voutparse illegal scriptlen.%d\n",msg->pk_scriptlen);
return(-1);
}
if ( rwflag == 0 )
msg->pk_script = &serialized[len];
else memcpy(&serialized[len],msg->pk_script,msg->pk_scriptlen);
@ -547,21 +559,25 @@ int32_t iguana_voutparse(int32_t rwflag,uint8_t *serialized,struct iguana_msgvou
int32_t iguana_rwmsgtx(struct iguana_info *coin,int32_t rwflag,cJSON *json,uint8_t *serialized,int32_t maxsize,struct iguana_msgtx *msg,bits256 *txidp,char *vpnstr)
{
int32_t i,len = 0; uint8_t *txstart = serialized; char txidstr[65]; cJSON *array=0;
int32_t i,n,len = 0; uint8_t *txstart = serialized; char txidstr[65]; cJSON *array=0;
len += iguana_rwnum(rwflag,&serialized[len],sizeof(msg->version),&msg->version);
if ( json != 0 )
{
jaddnum(json,"version",msg->version);
array = cJSON_CreateArray();
}
//printf("version.%d\n",msg->version);
if ( coin->chain->hastimestamp != 0 )
{
len += iguana_rwnum(rwflag,&serialized[len],sizeof(msg->timestamp),&msg->timestamp);
//char str[65]; printf("timestamp.%08x %u %s\n",msg->timestamp,msg->timestamp,utc_str(str,msg->timestamp));
//char str[65]; printf("version.%d timestamp.%08x %u %s\n",msg->version,msg->timestamp,msg->timestamp,utc_str(str,msg->timestamp));
if ( json != 0 )
jaddnum(json,"timestamp",msg->timestamp);
}
//for (i=len; i<len+16; i++)
// printf("%02x",serialized[i]);
len += iguana_rwvarint32(rwflag,&serialized[len],&msg->tx_in);
//printf(" tx_in.%08x\n",msg->tx_in);
if ( rwflag == 0 )
{
if ( len + sizeof(struct iguana_msgvin)*msg->tx_in > maxsize )
@ -573,12 +589,14 @@ int32_t iguana_rwmsgtx(struct iguana_info *coin,int32_t rwflag,cJSON *json,uint8
msg->vins = (struct iguana_msgvin *)&serialized[maxsize];
memset(msg->vins,0,sizeof(struct iguana_msgvin) * msg->tx_in);
}
//printf("tx_in.%08x\n",msg->tx_in);
if ( msg->tx_in > 0 && msg->tx_in*sizeof(struct iguana_msgvin) < maxsize )
{
for (i=0; i<msg->tx_in; i++)
{
len += iguana_vinparse(coin,rwflag,&serialized[len],&msg->vins[i]);
if ( (n= iguana_vinparse(coin,rwflag,&serialized[len],&msg->vins[i])) < 0 )
return(-1);
//printf("vin.%d n.%d len.%d\n",i,n,len);
len += n;
if ( array != 0 )
jaddi(array,iguana_vinjson(coin,&msg->vins[i]));
}
@ -594,7 +612,10 @@ int32_t iguana_rwmsgtx(struct iguana_info *coin,int32_t rwflag,cJSON *json,uint8
jaddnum(json,"numvins",msg->tx_in);
array = cJSON_CreateArray();
}
//for (i=len; i<len+16; i++)
// printf("%02x",serialized[i]);
len += iguana_rwvarint32(rwflag,&serialized[len],&msg->tx_out);
//printf(" txout.%d\n",msg->tx_out);
if ( rwflag == 0 )
{
if ( len + sizeof(struct iguana_msgvout)*msg->tx_out > maxsize )
@ -610,7 +631,9 @@ int32_t iguana_rwmsgtx(struct iguana_info *coin,int32_t rwflag,cJSON *json,uint8
{
for (i=0; i<msg->tx_out; i++)
{
len += iguana_voutparse(rwflag,&serialized[len],&msg->vouts[i]);
if ( (n= iguana_voutparse(rwflag,&serialized[len],&msg->vouts[i])) < 0 )
return(-1);
len += n;
if ( array != 0 )
jaddi(array,iguana_voutjson(coin,&msg->vouts[i],i,*txidp));
}
@ -700,7 +723,12 @@ bits256 iguana_parsetxobj(struct iguana_info *coin,int32_t *txstartp,uint8_t *se
msg->lock_time = juint(txobj,"locktime");
msg->txid = jbits256(txobj,"txid");
*txstartp = len;
msg->allocsize = iguana_rwmsgtx(coin,1,0,&serialized[len],maxsize-len,msg,&txid,vpnstr);
if ( (msg->allocsize= iguana_rwmsgtx(coin,1,0,&serialized[len],maxsize-len,msg,&txid,vpnstr)) < 0 )
{
memset(txid.bytes,0,sizeof(txid));
printf("error parsing txobj\n");
msg->allocsize = 0;
}
//char str[65]; printf("json -> %s\n",bits256_str(str,txid));
return(txid);
}
@ -869,12 +897,12 @@ cJSON *bitcoin_hex2json(struct iguana_info *coin,bits256 *txidp,struct iguana_ms
msgtx = &M;
memset(msgtx,0,sizeof(M));
}
len = (int32_t)strlen(txbytes);
len = (int32_t)strlen(txbytes) >> 1;
serialized = malloc(len + 32768);
decode_hex(serialized,len,txbytes);
vpnstr[0] = 0;
memset(txidp,0,sizeof(*txidp));
printf("bitcoin_hex2json len.%d\n",len);
printf("B bitcoin_hex2json len.%d\n",len);
if ( (n= iguana_rwmsgtx(coin,0,txobj,serialized,len + 32768,msgtx,txidp,vpnstr)) <= 0 )
{
printf("error from rwmsgtx\n");

26
iguana/iguana_msg.c

@ -340,6 +340,7 @@ int32_t iguana_rwvin(int32_t rwflag,struct OS_memspace *mem,uint8_t *serialized,
return(len);
}
int32_t debugtest;
int32_t iguana_rwvout(int32_t rwflag,struct OS_memspace *mem,uint8_t *serialized,struct iguana_msgvout *msg)
{
int32_t len = 0;
@ -348,10 +349,13 @@ int32_t iguana_rwvout(int32_t rwflag,struct OS_memspace *mem,uint8_t *serialized
if ( rwflag == 0 )
msg->pk_script = iguana_memalloc(mem,msg->pk_scriptlen,1);
len += iguana_rwmem(rwflag,&serialized[len],msg->pk_scriptlen,msg->pk_script);
//printf("(%.8f scriptlen.%d) ",dstr(msg->value),msg->pk_scriptlen);
//int i; for (i=0; i<msg->pk_scriptlen; i++)
// printf("%02x",msg->pk_script[i]);
//printf("\n");
if ( debugtest != 0 )
{
printf("(%.8f scriptlen.%d) ",dstr(msg->value),msg->pk_scriptlen);
int i; for (i=0; i<msg->pk_scriptlen; i++)
printf("%02x",msg->pk_script[i]);
printf("\n");
}
return(len);
}
@ -363,7 +367,7 @@ int32_t iguana_rwtx(int32_t rwflag,struct OS_memspace *mem,uint8_t *serialized,s
len += iguana_rwnum(rwflag,&serialized[len],sizeof(msg->timestamp),&msg->timestamp);
len += iguana_rwvarint32(rwflag,&serialized[len],&msg->tx_in);
//printf("version.%d ",msg->version);
if ( msg->tx_in > 0 && msg->tx_out*100 < maxsize )
if ( msg->tx_in > 0 && msg->tx_in*100 < maxsize )
{
if ( rwflag == 0 )
msg->vins = iguana_memalloc(mem,msg->tx_in * sizeof(*msg->vins),1);
@ -441,6 +445,18 @@ int32_t iguana_gentxarray(struct iguana_info *coin,struct OS_memspace *mem,struc
{
if ( (n= iguana_rwtx(0,mem,&data[len],&tx[i],recvlen - len,&tx[i].txid,coin->chain->hastimestamp,strcmp(coin->symbol,"VPN")==0)) < 0 )
break;
if ( 1 && bits256_cmp(tx[i].txid,bits256_conv("091c99b7b7f9b83ad2385c45b342ed5dd57035d15ff812262a3ceb3f1b291a5a")) == 0 )
{
int32_t j; for (j=0; len+j<recvlen&&j<256; j++)
printf("%02x",data[len+j]);
printf(" serialized tx.%d\n",j);
/*debugtest = 1;
if ( (n= iguana_rwtx(0,mem,&data[len],&tx[i],recvlen - len,&tx[i].txid,coin->chain->hastimestamp,strcmp(coin->symbol,"VPN")==0)) < 0 )
{
}
debugtest = 0;*/
}
numvouts += tx[i].tx_out;
numvins += tx[i].tx_in;
len += n;

8
iguana/iguana_ramchain.c

@ -266,12 +266,6 @@ uint32_t iguana_ramchain_addpkhash(struct iguana_info *coin,RAMCHAIN_FUNC,uint8_
uint32_t iguana_ramchain_addunspent20(struct iguana_info *coin,struct iguana_peer *addr,RAMCHAIN_FUNC,uint64_t value,uint8_t *script,int32_t scriptlen,bits256 txid,int32_t vout,int8_t type,struct iguana_bundle *bp,uint8_t rmd160[20])
{
uint32_t unspentind; struct iguana_unspent20 *u; long scriptpos; struct vin_info V; char asmstr[IGUANA_MAXSCRIPTSIZE*2+1];
{
if ( bits256_cmp(txid,bits256_conv("9d30c5f3ed9924f5a4eba8e274540f007d94d08ad41e34fda96c4803d3c6239a")) == 0 )
{
;
}
}
unspentind = ramchain->H.unspentind++;
u = &U[unspentind];
if ( scriptlen > 0 )
@ -361,7 +355,7 @@ uint32_t iguana_ramchain_addunspent(struct iguana_info *coin,RAMCHAIN_FUNC,uint6
for (i=0; i<20; i++)
if ( rmd160[i] != 0 )
break;
if ( i == 20 && (txi != 0 || vout > 0) )
if ( i == 20 && vout > 0 )
{
printf("iguana_ramchain_addunspent: null rmd160 warning txi.%d vout.%d\n",txi,vout);
//return(0);

4
iguana/iguana_rpc.c

@ -47,7 +47,7 @@ char *sglue(GLUEARGS,char *agent,char *method)
len = (int32_t)strlen(rpcretstr);
if ( rpcretstr[0] == '"' && rpcretstr[len-1] == '"' )
{
for (i=1,j=0; i<len-2; i++,j++)
for (i=1,j=0; i<len-1; i++,j++)
rpcretstr[j] = rpcretstr[i];
rpcretstr[j++] = '\n', rpcretstr[j] = 0;
free_json(retjson);
@ -774,7 +774,7 @@ char *SuperNET_rpcparse(struct supernet_info *myinfo,char *retbuf,int32_t bufsiz
{
cJSON *tokens,*argjson,*json = 0; long filesize;
char symbol[16],buf[4096],urlmethod[16],*data,url[1024],*retstr,*filestr,*token = 0; int32_t i,j,n,num=0;
printf("rpcparse.(%s)\n",urlstr);
//printf("rpcparse.(%s)\n",urlstr);
for (i=0; i<sizeof(urlmethod)-1&&urlstr[i]!=0&&urlstr[i]!=' '; i++)
urlmethod[i] = urlstr[i];
urlmethod[i++] = 0;

12
iguana/iguana_tx.c

@ -108,22 +108,22 @@ int32_t iguana_voutscript(struct iguana_info *coin,struct iguana_bundle *bp,uint
return(scriptlen);
}
int32_t iguana_voutset(struct iguana_info *coin,uint8_t *scriptspace,char *asmstr,int32_t height,struct iguana_msgvout *vout,struct iguana_txid *tx,int32_t txi)
int32_t iguana_voutset(struct iguana_info *coin,uint8_t *scriptspace,char *asmstr,int32_t height,struct iguana_msgvout *vout,struct iguana_txid *tx,int32_t i)
{
struct iguana_ramchaindata *rdata; uint32_t unspentind,scriptlen = 0; struct iguana_bundle *bp;
struct iguana_unspent *u,*U; struct iguana_pkhash *P; int32_t err = 0;
memset(vout,0,sizeof(*vout));
if ( height >= 0 && height < coin->chain->bundlesize*coin->bundlescount && (bp= coin->bundles[height / coin->chain->bundlesize]) != 0 && (rdata= bp->ramchain.H.data) != 0 && txi < tx->numvouts )
if ( height >= 0 && height < coin->chain->bundlesize*coin->bundlescount && (bp= coin->bundles[height / coin->chain->bundlesize]) != 0 && (rdata= bp->ramchain.H.data) != 0 && i < tx->numvouts )
{
U = (void *)(long)((long)rdata + rdata->Uoffset);
P = (void *)(long)((long)rdata + rdata->Poffset);
unspentind = (tx->firstvout + txi);
unspentind = (tx->firstvout + i);
u = &U[unspentind];
if ( u->txidind != tx->txidind || u->vout != txi || u->hdrsi != height / coin->chain->bundlesize )
printf("iguana_voutset: txidind mismatch %d vs %d || %d vs %d || (%d vs %d)\n",u->txidind,u->txidind,u->vout,txi,u->hdrsi,height / coin->chain->bundlesize);
if ( u->txidind != tx->txidind || u->vout != i || u->hdrsi != height / coin->chain->bundlesize )
printf("iguana_voutset: txidind mismatch %d vs %d || %d vs %d || (%d vs %d)\n",u->txidind,u->txidind,u->vout,i,u->hdrsi,height / coin->chain->bundlesize);
vout->value = u->value;
vout->pk_script = scriptspace;
scriptlen = iguana_voutscript(coin,bp,scriptspace,asmstr,u,&P[u->pkind],txi);
scriptlen = iguana_voutscript(coin,bp,scriptspace,asmstr,u,&P[u->pkind],i);
} else printf("iguana_voutset unexpected path\n");
vout->pk_scriptlen = scriptlen;
if ( err != 0 )

4
iguana/ramchain_api.c

@ -151,7 +151,7 @@ HASH_AND_INT(bitcoinrpc,getrawtransaction,txid,verbose)
txbytes = calloc(1,len*2+1);
init_hexbytes_noT(txbytes,coin->blockspace,len);
jaddstr(retjson,"result",txbytes);
//printf("txbytes.(%s)\n",txbytes);
printf("txbytes.(%s) len.%d (%s)\n",txbytes,len,jprint(retjson,0));
free(txbytes);
return(jprint(retjson,1));
}
@ -193,7 +193,7 @@ STRING_ARG(bitcoinrpc,decoderawtransaction,rawtx)
if ( (strlen(rawtx) & 1) != 0 )
return(clonestr("{\"error\":\"rawtx hex has odd length\"}"));
txobj = bitcoin_hex2json(coin,&txid,0,rawtx);
char str[65]; printf("got txid.(%s)\n",bits256_str(str,txid));
//char str[65]; printf("got txid.(%s)\n",bits256_str(str,txid));
}
if ( txobj == 0 )
txobj = cJSON_CreateObject();

Loading…
Cancel
Save