Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
50134aec8c
  1. 4
      iguana/iguana_accept.c
  2. 58
      iguana/iguana_instantdex.c

4
iguana/iguana_accept.c

@ -227,7 +227,11 @@ int32_t iguana_process_msgrequestQ(struct supernet_info *myinfo,struct iguana_in
else if ( msg->type == MSG_QUOTE ) else if ( msg->type == MSG_QUOTE )
{ {
if ( (len= instantdex_quoterequest(myinfo,coin,&coin->blockspace[sizeof(struct iguana_msghdr)],sizeof(coin->blockspace),msg->addr,msg->hash2)) > 0 ) if ( (len= instantdex_quoterequest(myinfo,coin,&coin->blockspace[sizeof(struct iguana_msghdr)],sizeof(coin->blockspace),msg->addr,msg->hash2)) > 0 )
{
iguana_sethdr((void *)coin->blockspace,coin->chain->netmagic,"quote",&coin->blockspace[sizeof(struct iguana_msghdr)],len);
iguana_msgparser(coin,msg->addr,0,0,0,(void *)coin->blockspace,&coin->blockspace[sizeof(struct iguana_msghdr)],len);
iguana_queue_send(coin,msg->addr,0,coin->blockspace,"quote",len,0,0); iguana_queue_send(coin,msg->addr,0,coin->blockspace,"quote",len,0,0);
}
} }
} }
free(msg); free(msg);

58
iguana/iguana_instantdex.c

@ -753,13 +753,6 @@ int32_t instantdex_peerhas_clear(struct supernet_info *myinfo,struct iguana_info
return(num); return(num);
} }
uint64_t instantdex_basebits(char *base)
{
if ( is_decimalstr(base) != 0 )
return(calc_nxt64bits(base));
else return(stringbits(base));
}
int32_t instantdex_unbasebits(char *base,uint64_t basebits) int32_t instantdex_unbasebits(char *base,uint64_t basebits)
{ {
char tmp[9]; char tmp[9];
@ -776,21 +769,42 @@ int32_t instantdex_unbasebits(char *base,uint64_t basebits)
} }
} }
uint64_t instantdex_decodehash(char *base,char *rel,int64_t *pricep,bits256 encodedhash) uint64_t instantdex_basebits(char *base)
{
if ( is_decimalstr(base) != 0 )
return(calc_nxt64bits(base));
else return(stringbits(base));
}
uint64_t instantdex_decodehash(char *base,char *rel,int64_t *pricep,uint64_t *offererp,bits256 encodedhash)
{ {
instantdex_unbasebits(base,encodedhash.ulongs[1]); int32_t i; uint64_t offerid;
instantdex_unbasebits(rel,encodedhash.ulongs[2]); for (i=0; i<4; i++)
*pricep = encodedhash.ulongs[3]; {
base[i] = encodedhash.bytes[8 + i];
rel[i] = encodedhash.bytes[12 + i];
}
iguana_rwnum(0,(void *)&encodedhash.ulongs[2],sizeof(uint64_t),pricep);
iguana_rwnum(0,(void *)&encodedhash.ulongs[3],sizeof(uint64_t),offererp);
iguana_rwnum(0,(void *)&encodedhash.ulongs[0],sizeof(uint64_t),&offerid);
return(encodedhash.ulongs[0]); return(encodedhash.ulongs[0]);
} }
bits256 instantdex_encodehash(char *base,char *rel,int64_t price,uint64_t orderid) bits256 instantdex_encodehash(char *base,char *rel,int64_t price,uint64_t orderid,uint64_t offerer)
{ {
bits256 encodedhash; bits256 encodedhash; int32_t i; char _base[4],_rel[4];
encodedhash.ulongs[0] = orderid; iguana_rwnum(1,(void *)&encodedhash.ulongs[0],sizeof(uint64_t),&orderid);
encodedhash.ulongs[1] = instantdex_basebits(base); memset(_base,0,sizeof(_base));
encodedhash.ulongs[2] = instantdex_basebits(rel); memset(_rel,0,sizeof(_rel));
encodedhash.ulongs[3] = price; strncpy(_base,base,4);
strncpy(_rel,rel,4);
for (i=0; i<4; i++)
{
encodedhash.bytes[8 + i] = _base[i];
encodedhash.bytes[12 + i] = _rel[i];
}
iguana_rwnum(1,(void *)&encodedhash.ulongs[2],sizeof(uint64_t),&price);
iguana_rwnum(1,(void *)&encodedhash.ulongs[3],sizeof(uint64_t),&offerer);
return(encodedhash); return(encodedhash);
} }
@ -808,7 +822,7 @@ int32_t instantdex_inv2data(struct supernet_info *myinfo,struct iguana_info *coi
if ( now < ap->offer.expiration && ap->dead == 0 ) if ( now < ap->offer.expiration && ap->dead == 0 )
{ {
if ( n < sizeof(hashes)/sizeof(*hashes) )//&& GETBIT(ap->peerhas,addr->addrind) == 0 ) if ( n < sizeof(hashes)/sizeof(*hashes) )//&& GETBIT(ap->peerhas,addr->addrind) == 0 )
hashes[n++] = instantdex_encodehash(ap->offer.base,ap->offer.rel,ap->offer.price64*instantdex_bidaskdir(&ap->offer),ap->orderid); hashes[n++] = instantdex_encodehash(ap->offer.base,ap->offer.rel,ap->offer.price64*instantdex_bidaskdir(&ap->offer),ap->orderid,ap->offer.offer64);
queue_enqueue("acceptableQ",&exchange->acceptableQ,&ap->DL,0); queue_enqueue("acceptableQ",&exchange->acceptableQ,&ap->DL,0);
} else free(ap); } else free(ap);
} }
@ -823,9 +837,9 @@ int32_t instantdex_inv2data(struct supernet_info *myinfo,struct iguana_info *coi
struct instantdex_accept *instantdex_quotefind(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_peer *addr,bits256 encodedhash) struct instantdex_accept *instantdex_quotefind(struct supernet_info *myinfo,struct iguana_info *coin,struct iguana_peer *addr,bits256 encodedhash)
{ {
char base[9],rel[9]; int64_t pricetoshis; uint64_t orderid; char base[9],rel[9]; int64_t pricetoshis; uint64_t orderid,offer64;
orderid = instantdex_decodehash(base,rel,&pricetoshis,encodedhash); orderid = instantdex_decodehash(base,rel,&pricetoshis,&offer64,encodedhash);
printf("search for orderid.%lld (%s/%s) %.8f\n",(long long)orderid,base,rel,dstr(pricetoshis)); printf("search for orderid.%llu (%s/%s) %.8f from %llu\n",(long long)orderid,base,rel,dstr(pricetoshis),(long long)offer64);
return(instantdex_offerfind(myinfo,exchanges777_find("bitcoin"),0,0,orderid,base,rel,1)); return(instantdex_offerfind(myinfo,exchanges777_find("bitcoin"),0,0,orderid,base,rel,1));
} }
@ -870,7 +884,7 @@ int32_t instantdex_quote(struct supernet_info *myinfo,struct iguana_info *coin,s
orderhash = instantdex_rwoffer(0,&checklen,serialized,&A.offer); orderhash = instantdex_rwoffer(0,&checklen,serialized,&A.offer);
if ( checklen == recvlen ) if ( checklen == recvlen )
{ {
encodedhash = instantdex_encodehash(A.offer.base,A.offer.rel,A.offer.price64 * instantdex_bidaskdir(&A.offer),A.orderid); encodedhash = instantdex_encodehash(A.offer.base,A.offer.rel,A.offer.price64 * instantdex_bidaskdir(&A.offer),A.orderid,A.offer.offer64);
if ( (ap= instantdex_quotefind(myinfo,coin,addr,encodedhash)) == 0 ) if ( (ap= instantdex_quotefind(myinfo,coin,addr,encodedhash)) == 0 )
{ {
init_hexbytes_noT(hexstr,serialized,recvlen); init_hexbytes_noT(hexstr,serialized,recvlen);

Loading…
Cancel
Save