Browse Source

Test

etomic
jl777 7 years ago
parent
commit
cc60813494
  1. 2
      iguana/exchanges/LP_commands.c
  2. 4
      iguana/exchanges/LP_include.h
  3. 4
      iguana/exchanges/LP_instantdex.c
  4. 6
      iguana/exchanges/LP_nativeDEX.c
  5. 69
      iguana/exchanges/LP_rpc.c
  6. 18
      iguana/exchanges/LP_stats.c

2
iguana/exchanges/LP_commands.c

@ -620,6 +620,8 @@ instantdex_claim()\n\
return(LP_postprice_recv(argjson));
else if ( strcmp(method,"uitem") == 0 )
return(LP_uitem_recv(argjson));
else if ( strcmp(method,"dPoW") == 0 )
return(LP_dPoW_recv(argjson));
else if ( strcmp(method,"notify") == 0 )
return(LP_notify_recv(argjson));
else if ( strcmp(method,"getpeers") == 0 )

4
iguana/exchanges/LP_include.h

@ -301,8 +301,8 @@ struct iguana_info
uint64_t maxamount,kmd_equiv,balanceA,balanceB,valuesumA,valuesumB;
uint8_t pubkey33[33],zcash;
int32_t privkeydepth;
bits256 cachedtxid; uint8_t *cachedtxiddata; int32_t cachedtxidlen;
bits256 cachedmerkle; int32_t cachedmerkleheight;
bits256 cachedtxid,notarizationtxid; uint8_t *cachedtxiddata; int32_t cachedtxidlen;
bits256 cachedmerkle,notarizedhash; int32_t cachedmerkleheight;
};
struct _LP_utxoinfo { bits256 txid; uint64_t value; int32_t vout,height; };

4
iguana/exchanges/LP_instantdex.c

@ -418,7 +418,7 @@ int64_t LP_instantdex_proofcheck(char *coinaddr,cJSON *proof,int32_t num)
{
bitcoin_addr2rmd160(0,&addrtype,rmd160,coinaddr);
bitcoin_address(othersmartaddr,0,60,rmd160,20);
if ((ap= LP_address(coin,othersmartaddr)) != 0 && (coin->electrum == 0 || ap->didinstantdex == 0) )
if ((ap= LP_address(coin,othersmartaddr)) != 0 )//&& (coin->electrum == 0 || ap->didinstantdex == 0) )
{
ap->instantdex_credits = 0;
for (i=0; i<num; i++)
@ -426,7 +426,7 @@ int64_t LP_instantdex_proofcheck(char *coinaddr,cJSON *proof,int32_t num)
ap->didinstantdex = 1;
//if ( ap->instantdex_credits > 0 )
printf("validated instantdex %s.[%d] proof.(%s) credits %.8f net %.8f\n",othersmartaddr,num,jprint(proof,0),dstr(ap->instantdex_credits),dstr(net));
} else printf("cant find ap.%p or already did %d %.8f\n",ap,ap!=0?ap->didinstantdex:-1,ap!=0?dstr(ap->instantdex_credits):-1);
} //else printf("cant find ap.%p or already did %d %.8f\n",ap,ap!=0?ap->didinstantdex:-1,ap!=0?dstr(ap->instantdex_credits):-1);
}
return(ap->instantdex_credits);
}

6
iguana/exchanges/LP_nativeDEX.c

@ -17,8 +17,8 @@
// LP_nativeDEX.c
// marketmaker
//
// too much stats.log
// big BTC swaps
// validate notarization
// big BTC swaps, assetchain markets
// https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki for signing BCH/BTG
//
// compress packets
@ -683,6 +683,8 @@ int32_t LP_mainloop_iter(void *ctx,char *myipaddr,struct LP_peerinfo *mypeer,int
jaddstr(reqjson,"method","dPoW");
jaddstr(reqjson,"coin",coin->symbol);
jaddnum(reqjson,"notarized",coin->notarized);
jaddbits256(reqjson,"notarizedhash",coin->notarizedhash);
jaddbits256(reqjson,"notarizationtxid",coin->notarizationtxid);
memset(zero.bytes,0,sizeof(zero));
LP_reserved_msg(0,coin->symbol,coin->symbol,zero,jprint(reqjson,1));
}

69
iguana/exchanges/LP_rpc.c

@ -106,6 +106,8 @@ int32_t LP_getheight(int32_t *notarizedp,struct iguana_info *coin)
{
printf("new notarized %s %d -> %d\n",coin->symbol,coin->notarized,*notarizedp);
coin->notarized = *notarizedp;
coin->notarizationtxid = jbits256(retjson,"notarizedtxid");
coin->notarizedhash = jbits256(retjson,"notarizedhash");
}
free_json(retjson);
if ( coin->height > 0 )
@ -965,9 +967,10 @@ const char *Notaries_elected[][2] =
{ "xxspot2_XX", "03d85b221ea72ebcd25373e7961f4983d12add66a92f899deaf07bab1d8b6f5573" }
};
int32_t LP_txhasnotarization(struct iguana_info *coin,bits256 txid)
int32_t LP_txhasnotarization(bits256 *notarizedhashp,struct iguana_info *coin,bits256 txid)
{
cJSON *txobj,*vins,*vin,*vouts,*vout,*spentobj,*sobj; char *hexstr; uint8_t script[35]; bits256 spenttxid; uint64_t notarymask; int32_t i,j,numnotaries,len,spentvout,numvins,numvouts,hasnotarization = 0;
cJSON *txobj,*vins,*vin,*vouts,*vout,*spentobj,*sobj; char *hexstr; uint8_t script[1024]; bits256 spenttxid; uint64_t notarymask; int32_t i,j,numnotaries,len,spentvout,numvins,numvouts,hasnotarization = 0;
memset(notarizedhashp,0,sizeof(*notarizedhashp));
if ( (txobj= LP_gettx(coin->symbol,txid,0)) != 0 )
{
if ( (vins= jarray(&numvins,txobj,"vin")) != 0 )
@ -987,7 +990,7 @@ int32_t LP_txhasnotarization(struct iguana_info *coin,bits256 txid)
if ( spentvout < numvouts )
{
vout = jitem(vouts,spentvout);
if ( (sobj= jobj(vout,"scriptPubKey")) != 0 && (hexstr= jstr(sobj,"hex")) != 0 && (len= is_hexstr(hexstr,0)) == sizeof(script)*2 )
if ( (sobj= jobj(vout,"scriptPubKey")) != 0 && (hexstr= jstr(sobj,"hex")) != 0 && (len= is_hexstr(hexstr,0)) == 35*2 )
{
len >>= 1;
decode_hex(script,len,hexstr);
@ -1021,20 +1024,76 @@ int32_t LP_txhasnotarization(struct iguana_info *coin,bits256 txid)
}
}
}
if ( (vouts= jarray(&numvouts,txobj,"vout")) != 0 )
{
vout = jitem(vouts,1);
if ( (sobj= jobj(vout,"scriptPubKey")) != 0 && (hexstr= jstr(sobj,"hex")) != 0 && (len= is_hexstr(hexstr,0)) >= 35 )
{
len >>= 1;
decode_hex(script,len,hexstr);
iguana_rwbignum(0,&script[3],32,(uint8_t *)notarizedhashp);
}
}
free_json(txobj);
}
return(hasnotarization);
}
int32_t LP_notarization_validate(char *symbol,int32_t notarized,bits256 notarizedhash,bits256 notarizationtxid)
{
struct iguana_info *coin; int32_t valid = 0; cJSON *blockjson; bits256 notarizedhash2; char str[65],str2[65];
if ( strcmp(symbol,"KMD") == 0 )
coin = LP_coinfind("BTC");
else coin = LP_coinfind("KMD");
if ( coin != 0 )
{
if (LP_txhasnotarization(&notarizedhash2,coin,notarizationtxid) == 0 )
{
printf("missing %s notarization txid %s\n",symbol,bits256_str(str,notarizationtxid));
return(-1);
}
else if ( bits256_cmp(notarizedhash,notarizedhash2) != 0 )
{
printf("mismatched %s notarizedhash %s vs %s\n",symbol,bits256_str(str,notarizedhash),bits256_str(str2,notarizedhash2));
return(-1);
}
}
if ( (coin= LP_coinfind(symbol)) != 0 )
{
if ( coin->electrum == 0 )
{
if ( (blockjson= LP_getblock(coin->symbol,notarizedhash)) != 0 )
{
if ( jint(blockjson,"height") != notarized )
valid = 1;
free_json(blockjson);
}
}
else
{
if ( (blockjson= electrum_getheader(symbol,coin->electrum,&blockjson,notarized+1)) != 0 )
{
notarizedhash2 = jbits256(blockjson,"prev_block_hash");
if ( bits256_cmp(notarizedhash,notarizedhash2) == 0 )
valid = 1;
free_json(blockjson);
}
}
}
if ( valid == 1 )
return(0);
else return(-1);
}
int32_t LP_hasnotarization(struct iguana_info *coin,cJSON *blockjson)
{
int32_t i,n,hasnotarization = 0; bits256 txid; cJSON *txarray;
int32_t i,n,hasnotarization = 0; bits256 txid,notarizedhash; cJSON *txarray;
if ( (txarray= jarray(&n,blockjson,"tx")) != 0 )
{
for (i=0; i<n; i++)
{
txid = jbits256i(txarray,i);
hasnotarization += LP_txhasnotarization(coin,txid);
hasnotarization += LP_txhasnotarization(&notarizedhash,coin,txid);
}
}
return(hasnotarization);

18
iguana/exchanges/LP_stats.c

@ -28,6 +28,24 @@ char *LP_stats_methods[] = { "unknown", "request", "reserved", "connect", "conne
static uint32_t LP_requests,LP_reserveds,LP_connects,LP_connecteds,LP_tradestatuses,LP_parse_errors,LP_unknowns,LP_duplicates,LP_aliceids;
char *LP_dPoW_recv(cJSON *argjson)
{
int32_t notarized; bits256 notarizedhash,notarizationtxid; char *symbol; struct iguana_info *coin;
if ( (symbol= jstr(argjson,"coin")) != 0 && (coin= LP_coinfind(symbol)) != 0 && coin->electrum != 0 )
{
notarized = jint(argjson,"notarized");
notarizedhash = jbits256(argjson,"notarizedhash");
notarizationtxid = jbits256(argjson,"notarizationtxid");
if ( notarized > coin->notarized && LP_notarization_validate(symbol,notarized,notarizedhash,notarizationtxid) == 0 )
{
coin->notarized = notarized;
coin->notarizedhash = notarizedhash;
coin->notarizationtxid = notarizationtxid;
}
}
return(clonestr("{\"result\":\"success\"}"));
}
void LP_tradecommand_log(cJSON *argjson)
{
static FILE *logfp; char *jsonstr;

Loading…
Cancel
Save