Browse Source

dexkvsearch and dexkvupdate

etomic
jl777 8 years ago
parent
commit
3b8a1ece30
  1. 9
      iguana/dPoW.h
  2. 44
      iguana/dpow/dpow_network.c
  3. 35
      iguana/dpow/dpow_rpc.c
  4. 10
      iguana/iguana_notary.c
  5. 2
      includes/iguana_apideclares.h

9
iguana/dPoW.h

@ -22,7 +22,7 @@
#define DPOW_MINSIGS 17
//#define DPOW_M(bp) ((bp)->minsigs) // (((bp)->numnotaries >> 1) + 1)
#define DPOW_MODIND(bp,offset) (((((bp)->height / DPOW_CHECKPOINTFREQ) % (bp)->numnotaries) + (offset)) % (bp)->numnotaries)
#define DPOW_VERSION 0x0780
#define DPOW_VERSION 0x0781
#define DPOW_UTXOSIZE 10000
#define DPOW_MINOUTPUT 6000
#define DPOW_DURATION 600
@ -45,7 +45,7 @@
#define DPOW_MAXRELAYS 64
#define DPOW_MAXSIGLEN 128
#define DEX_VERSION 0x0104
#define DEX_VERSION 0x0105
#define DPOW_SOCK 7775
#define DEX_SOCK 7774
#define PUB_SOCK 7773
@ -164,6 +164,8 @@ char *dpow_validateaddress(struct supernet_info *myinfo,struct iguana_info *coin
cJSON *dpow_listunspent(struct supernet_info *myinfo,struct iguana_info *coin,char *coinaddr);
cJSON *dpow_listtransactions(struct supernet_info *myinfo,struct iguana_info *coin,char *coinaddr,int32_t count,int32_t skip);
char *dpow_alladdresses(struct supernet_info *myinfo,struct iguana_info *coin);
cJSON *dpow_kvupdate(struct supernet_info *myinfo,struct iguana_info *coin,char *key,char *value,int32_t flags);
cJSON *dpow_kvsearch(struct supernet_info *myinfo,struct iguana_info *coin,char *key);
void init_alladdresses(struct supernet_info *myinfo,struct iguana_info *coin);
char *_dex_getinfo(struct supernet_info *myinfo,char *symbol);
@ -180,6 +182,9 @@ char *_dex_listtransactions(struct supernet_info *myinfo,char *symbol,char *coin
char *_dex_alladdresses(struct supernet_info *myinfo,char *symbol);
int32_t _dex_getheight(struct supernet_info *myinfo,char *symbol);
char *_dex_getnotaries(struct supernet_info *myinfo,char *symbol);
char *_dex_kvupdate(struct supernet_info *myinfo,char *symbol,char *key,char *value,int32_t flags);
char *_dex_kvsearch(struct supernet_info *myinfo,char *symbol,char *key);
int32_t komodo_notaries(char *symbol,uint8_t pubkeys[64][33],int32_t height);
cJSON *dpow_checkaddress(struct supernet_info *myinfo,struct iguana_info *coin,char *address);

44
iguana/dpow/dpow_network.c

@ -498,6 +498,26 @@ char *dex_response(int32_t *broadcastflagp,struct supernet_info *myinfo,struct d
retstr = jprint(retjson,1);
}
}
else if ( dexreq.func == 'k' )
{
if ( strcmp(coin->symbol,"BTC") == 0 || strcmp(coin->symbol,"ZEC") == 0 || coin->chain->zcash == 0 )
retstr = clonestr("{\"error\":\"only komodod chains support KV\"}");
else if ( (retjson= dpow_kvsearch(myinfo,coin,(char *)&dexp->packet[datalen])) != 0 )
{
dpow_randipbits(myinfo,coin,retjson);
retstr = jprint(retjson,1);
}
}
else if ( dexreq.func == 'K' )
{
if ( strcmp(coin->symbol,"BTC") == 0 || strcmp(coin->symbol,"ZEC") == 0 || coin->chain->zcash == 0 )
retstr = clonestr("{\"error\":\"only komodod chains support KV\"}");
else if ( (retjson= dpow_kvupdate(myinfo,coin,(char *)&dexp->packet[datalen],(char *)&dexp->packet[datalen+dexreq.shortarg],dexreq.intarg)) != 0 )
{
dpow_randipbits(myinfo,coin,retjson);
retstr = jprint(retjson,1);
}
}
else if ( dexreq.func == 'U' )
{
if ( (retjson= dpow_listunspent(myinfo,coin,(char *)&dexp->packet[datalen])) != 0 )
@ -741,6 +761,30 @@ char *_dex_gettxout(struct supernet_info *myinfo,char *symbol,bits256 txid,int32
return(_dex_sendrequest(myinfo,&dexreq,3,"value"));
}
char *_dex_kvupdate(struct supernet_info *myinfo,char *symbol,char *key,char *value,int32_t flags)
{
struct dex_request dexreq; char keyvalue[IGUANA_MAXSCRIPTSIZE]; int32_t keylen,valuesize;
memset(&dexreq,0,sizeof(dexreq));
safecopy(dexreq.name,symbol,sizeof(dexreq.name));
dexreq.func = 'K';
dexreq.intarg = flags;
keylen = (int32_t)strlen(key);
memcpy(keyvalue,key,keylen+1);
valuesize = (int32_t)strlen(value);
dexreq.shortarg = keylen+1;
memcpy(&keyvalue[dexreq.shortarg],value,valuesize+1);
return(_dex_sendrequeststr(myinfo,&dexreq,keyvalue,1,""));
}
char *_dex_kvsearch(struct supernet_info *myinfo,char *symbol,char *key)
{
struct dex_request dexreq;
memset(&dexreq,0,sizeof(dexreq));
safecopy(dexreq.name,symbol,sizeof(dexreq.name));
dexreq.func = 'k';
return(_dex_sendrequeststr(myinfo,&dexreq,key,1,""));
}
char *_dex_getinfo(struct supernet_info *myinfo,char *symbol)
{
struct dex_request dexreq;

35
iguana/dpow/dpow_rpc.c

@ -410,6 +410,41 @@ char *dpow_signrawtransaction(struct supernet_info *myinfo,struct iguana_info *c
}
}
cJSON *dpow_kvupdate(struct supernet_info *myinfo,struct iguana_info *coin,char *key,char *value,int32_t flags)
{
char params[IGUANA_MAXSCRIPTSIZE+256],*retstr; cJSON *retjson;
if ( coin->FULLNODE < 0 )
{
sprintf(params,"[\"%s\", \"%s\", \"%d\"]",key,value,flags);
retstr = bitcoind_passthru(coin->symbol,coin->chain->serverport,coin->chain->userpass,"kvupdate",params);
if ( (retjson= cJSON_Parse(retstr)) == 0 )
{
free(retstr);
return(cJSON_Parse("{\"error\":\"couldnt parse kvupdate return\"}"));
}
free(retstr);
return(retjson);
} else return(cJSON_Parse("{\"error\":\"only native komodod supports KV\"}"));
}
cJSON *dpow_kvsearch(struct supernet_info *myinfo,struct iguana_info *coin,char *key)
{
char params[IGUANA_MAXSCRIPTSIZE+256],*retstr; cJSON *retjson;
if ( coin->FULLNODE < 0 )
{
sprintf(params,"[\"%s\"]",key);
retstr = bitcoind_passthru(coin->symbol,coin->chain->serverport,coin->chain->userpass,"kvsearch",params);
if ( (retjson= cJSON_Parse(retstr)) == 0 )
{
free(retstr);
return(cJSON_Parse("{\"error\":\"couldnt parse kvupdate return\"}"));
}
free(retstr);
return(retjson);
} else return(cJSON_Parse("{\"error\":\"only native komodod supports KV\"}"));
}
char *dpow_sendrawtransaction(struct supernet_info *myinfo,struct iguana_info *coin,char *signedtx)
{
bits256 txid; cJSON *json,*array; char *paramstr,*retstr;

10
iguana/iguana_notary.c

@ -669,6 +669,16 @@ STRING_ARG(dex,getnotaries,symbol)
return(_dex_getnotaries(myinfo,symbol));
}
TWO_STRINGS(dex,kvsearch,symbol,key)
{
return(_dex_kvsearch(myinfo,symbol,key));
}
THREE_STRINGS_AND_THREE_INTS(dex,kvupdate,symbol,key,value,flags,unused,unusedb)
{
return(_dex_kvupdate(myinfo,symbol,key,value,flags));
}
#include "../includes/iguana_apiundefs.h"

2
includes/iguana_apideclares.h

@ -39,6 +39,8 @@ TWO_STRINGS(dex,importaddress,symbol,address);
TWO_STRINGS(dex,validateaddress,symbol,address);
TWO_STRINGS(dex,listunspent,symbol,address);
TWO_STRINGS_AND_TWO_DOUBLES(dex,listtransactions,symbol,address,count,skip);
TWO_STRINGS(dex,kvsearch,symbol,key);
THREE_STRINGS_AND_THREE_INTS(dex,kvupdate,symbol,key,value,flags,unused,unusedb);
TWO_STRINGS(zcash,passthru,function,hex);
TWO_STRINGS(komodo,passthru,function,hex);

Loading…
Cancel
Save