Skip to content

Commit

Permalink
Merge pull request #50 from artemii235/etomic
Browse files Browse the repository at this point in the history
Add etomic faucet integration. Merge latest from jl777.
  • Loading branch information
artemii235 committed May 24, 2018
2 parents 1bfada4 + fe8592b commit 0f020ec
Show file tree
Hide file tree
Showing 13 changed files with 115 additions and 19 deletions.
4 changes: 2 additions & 2 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ cmake --build . --target marketmaker-testnet'''
sh '''docker-compose build
docker-compose up -d
./start_BEER_ETH_trade.sh
timeout 600 grep -q "SWAP completed" <(docker-compose logs -f clientnode)
timeout 600 grep -q "SWAP completed" <(docker-compose logs -f seednode)
COMPOSE_HTTP_TIMEOUT=601 timeout 600 grep -q "SWAP completed" <(docker-compose logs -f clientnode)
COMPOSE_HTTP_TIMEOUT=601 timeout 600 grep -q "SWAP completed" <(docker-compose logs -f seednode)
docker-compose down'''
}
}
Expand Down
2 changes: 1 addition & 1 deletion etomic_build/client/enable
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash
source userpass
curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"enable\",\"coin\":\"ETOMIC\"}"
curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"enable\",\"coin\":\"ETH\"}"
curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"enable\",\"coin\":\"KMD\"}"
curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"enable\",\"coin\":\"ETOMIC\"}"
curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"enable\",\"coin\":\"BEER\"}"
2 changes: 1 addition & 1 deletion etomic_build/seed/enable
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash
source userpass
curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"enable\",\"coin\":\"ETH\"}"
curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"enable\",\"coin\":\"KMD\"}"
curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"enable\",\"coin\":\"ETOMIC\"}"
curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"enable\",\"coin\":\"ETH\"}"
curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"enable\",\"coin\":\"BEER\"}"
2 changes: 1 addition & 1 deletion iguana/dpow/dpow_fsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ int32_t dpow_checkutxo(struct supernet_info *myinfo,struct dpow_info *dp,struct
{
addresses = cJSON_CreateArray();
jaddistr(addresses,coinaddr);
if ( (rawtx= iguana_utxoduplicates(myinfo,coin,dp->minerkey33,DPOW_UTXOSIZE,n,&completed,&signedtxid,0,addresses)) != 0 )
if ( myinfo->nosplit == 0 && (rawtx= iguana_utxoduplicates(myinfo,coin,dp->minerkey33,DPOW_UTXOSIZE,n,&completed,&signedtxid,0,addresses)) != 0 )
{
if ( (sendtx= dpow_sendrawtransaction(myinfo,coin,rawtx)) != 0 )
{
Expand Down
15 changes: 11 additions & 4 deletions iguana/dpow/dpow_rpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,10 +277,10 @@ int32_t dpow_paxpending(uint8_t *hex,int32_t hexsize,uint32_t *paxwdcrcp,bits256
{
n += iguana_rwbignum(1,&hex[n],sizeof(MoM),MoM.bytes);
n += iguana_rwnum(1,&hex[n],sizeof(MoMdepth),(uint32_t *)&MoMdepth);
if ( strcmp(bp->srccoin->symbol,"PIZZA") == 0 && src_or_dest == 0 && strcmp(bp->destcoin->symbol,"KMD") == 0 )
if ( strncmp(bp->srccoin->symbol,"TXSCL",5) == 0 && src_or_dest == 0 && strcmp(bp->destcoin->symbol,"KMD") == 0 )
{
kmdcoin = bp->destcoin;
if ( (bp->height % 10) == 0 && kmdcoin->lastbestheight > 100 && (retjson= dpow_MoMoMdata(kmdcoin,bp->srccoin->symbol,(kmdcoin->lastbestheight/10)*10 - 5)) != 0 )
if ( (retjson= dpow_MoMoMdata(kmdcoin,bp->srccoin->symbol,(kmdcoin->lastbestheight/10)*10 - 5)) != 0 )
{
if ( (hexstr= jstr(retjson,"data")) != 0 && (hexlen= (int32_t)strlen(hexstr)) > 0 && n+hexlen/2 <= hexsize )
{
Expand Down Expand Up @@ -380,6 +380,13 @@ cJSON *dpow_getblock(struct supernet_info *myinfo,struct iguana_info *coin,bits2
return(json);
}

int32_t dpow_is015(char *symbol)
{
if ( strcmp("CHIPS",symbol) == 0 || strcmp("GAME",symbol) == 0 ) //strcmp("BTC",symbol) == 0 ||
return(1);
else return(0);
}

char *dpow_validateaddress(struct supernet_info *myinfo,struct iguana_info *coin,char *address)
{
char buf[128],*retstr=0; cJSON *retjson;
Expand All @@ -391,7 +398,7 @@ char *dpow_validateaddress(struct supernet_info *myinfo,struct iguana_info *coin
//printf("%s -> (%s)\n",buf,retstr!=0?retstr:"null");
if ( (retjson= cJSON_Parse(retstr)) != 0 )
{
if ( strcmp(coin->symbol,"BTC") == 0 && jobj(retjson,"error") == 0 && jobj(retjson,"ismine") == 0 && strcmp(coin->validateaddress,"validateaddress") == 0 )
if ( dpow_is015(coin->symbol) != 0 && jobj(retjson,"error") == 0 && jobj(retjson,"ismine") == 0 && strcmp(coin->validateaddress,"validateaddress") == 0 )
{
printf("autochange %s validateaddress -> getaddressinfo\n",coin->symbol);
strcpy(coin->validateaddress,"getaddressinfo");
Expand Down Expand Up @@ -581,7 +588,7 @@ char *dpow_signrawtransaction(struct supernet_info *myinfo,struct iguana_info *c
retstr = bitcoind_passthru(coin->symbol,coin->chain->serverport,coin->chain->userpass,coin->signtxstr,paramstr);
if ( strcmp(coin->signtxstr,"signrawtransaction") == 0 && (retjson= cJSON_Parse(retstr)) != 0 )
{
if ( jobj(retjson,"error") != 0 )
if ( jobj(retjson,"error") != 0 && dpow_is015(coin->symbol) != 0 )
{
strcpy(coin->signtxstr,"signrawtransactionwithwallet");
free(retstr);
Expand Down
47 changes: 47 additions & 0 deletions iguana/exchanges/LP_commands.c
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,32 @@ jpg(srcfile, destfile, power2=7, password, data="", required, ind=0)\n\
{
return(jprint(LP_tradesarray(base,rel,juint(argjson,"starttime"),juint(argjson,"endtime"),jint(argjson,"timescale")),1));
}
else if ( strcmp(method,"getprice") == 0 || strcmp(method,"getmyprice") == 0 )
{
double price,bid,ask;
if ( strcmp(method,"getprice") == 0 )
{
ask = LP_price(base,rel);
if ( (bid= LP_price(rel,base)) > SMALLVAL )
bid = 1./bid;
}
else
{
ask = LP_getmyprice(base,rel);
if ( (bid= LP_getmyprice(rel,base)) > SMALLVAL )
bid = 1./bid;
}
price = _pairaved(bid,ask);
retjson = cJSON_CreateObject();
jaddstr(retjson,"result","success");
jaddstr(retjson,"base",base);
jaddstr(retjson,"rel",rel);
jaddnum(retjson,"timestamp",time(NULL));
jaddnum(retjson,"bid",bid);
jaddnum(retjson,"ask",ask);
jaddnum(retjson,"price",price);
return(jprint(retjson,1));
}
if ( IAMLP == 0 && LP_isdisabled(base,rel) != 0 )
return(clonestr("{\"error\":\"at least one of coins disabled\"}"));
price = jdouble(argjson,"price");
Expand Down Expand Up @@ -554,6 +580,27 @@ jpg(srcfile, destfile, power2=7, password, data="", required, ind=0)\n\
jaddstr(retjson,"coin",coin);
return(jprint(retjson,1));
}
#ifndef NOT_ETOMIC
if (ptr->etomic[0] != 0) {
struct iguana_info *etomic_coin = LP_coinsearch("ETOMIC");
if (etomic_coin->inactive != 0) {
return(clonestr("{\"error\":\"Enable ETOMIC first to use ETH/ERC20!\"}"));
}

if (ptr->inactive != 0) {
uint64_t balance = LP_etomic_get_balance(ptr, ptr->smartaddr);
uint64_t new_required = G.LP_required_etomic_balance + (balance * 9) / 4;
uint64_t etomic_balance = LP_RTsmartbalance(etomic_coin);
if (etomic_balance < new_required) {
printf("Need additional ETOMIC amount: %" PRIu64 "\n", new_required - etomic_balance);
if (get_etomic_from_faucet(ptr->smartaddr, etomic_coin->smartaddr, ptr->etomic) != 1) {
return(clonestr("{\"error\":\"Could not get ETOMIC from faucet!\"}"));
}
}
G.LP_required_etomic_balance = new_required;
}
}
#endif
if ( LP_conflicts_find(ptr) == 0 )
{
cJSON *array;
Expand Down
2 changes: 1 addition & 1 deletion iguana/exchanges/LP_nativeDEX.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ struct LP_globals
{
//struct LP_utxoinfo *LP_utxoinfos[2],*LP_utxoinfos2[2];
bits256 LP_mypub25519,LP_privkey,LP_mypriv25519,LP_passhash;
uint64_t LP_skipstatus[10000];
uint64_t LP_skipstatus[10000], LP_required_etomic_balance;
uint16_t netid;
uint8_t LP_myrmd160[20],LP_pubsecp[33];
uint32_t LP_sessionid,counter;
Expand Down
2 changes: 1 addition & 1 deletion iguana/exchanges/coins

Large diffs are not rendered by default.

49 changes: 43 additions & 6 deletions iguana/exchanges/etomicswap/etomiccurl.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#include "etomiccurl.h"
#include <curl/curl.h>

static char *ethRpcUrl = ETOMIC_URL;
pthread_mutex_t sendTxMutex = PTHREAD_MUTEX_INITIALIZER;

struct string {
Expand Down Expand Up @@ -56,7 +55,7 @@ cJSON *parseEthRpcResponse(char *requestResult)
return result;
}

char* sendRequest(char* request)
char* sendRequest(char *request, char *url)
{
CURL *curl;
CURLcode res;
Expand All @@ -72,13 +71,15 @@ char* sendRequest(char* request)
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s);
curl_easy_setopt(curl, CURLOPT_URL, ethRpcUrl);
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, request);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
curl_easy_cleanup(curl);
return NULL;
}

/* always cleanup */
Expand All @@ -98,7 +99,7 @@ cJSON *sendRpcRequest(char *method, cJSON *params)
cJSON_AddItemToObject(request, "params", cJSON_Duplicate(params, 1));
cJSON_AddNumberToObject(request, "id", 1);
string = cJSON_PrintUnformatted(request);
char* requestResult = sendRequest(string);
char* requestResult = sendRequest(string, ETOMIC_URL);
free(string);
cJSON_Delete(request);
cJSON *result = parseEthRpcResponse(requestResult);
Expand Down Expand Up @@ -151,8 +152,8 @@ char* sendRawTx(char* rawTx)

int64_t getNonce(char* address)
{
// we should lock this mutex and unlock it only when transaction was already sent.
// make sure that sendRawTx is called after getting a nonce!
// we should lock this mutex and unlock it only when transaction was already sent or failed.
// make sure that sendRawTx or unlock_send_tx_mutex is called after getting a nonce!
if (pthread_mutex_lock(&sendTxMutex) != 0) {
printf("Nonce mutex lock failed\n");
};
Expand Down Expand Up @@ -372,3 +373,39 @@ void unlock_send_tx_mutex()
{
pthread_mutex_unlock(&sendTxMutex);
}

uint8_t get_etomic_from_faucet(char *eth_addr, char *etomic_addr, char *token_addr)
{
char* string;
cJSON *request = cJSON_CreateObject();
cJSON_AddStringToObject(request, "ethAddress", eth_addr);
cJSON_AddStringToObject(request, "etomicAddress", etomic_addr);
if (strcmp(token_addr, "0x0000000000000000000000000000000000000000") != 0) {
cJSON_AddStringToObject(request, "tokenAddress", token_addr);
}
string = cJSON_PrintUnformatted(request);
char* requestResult = sendRequest(string, FAUCET_URL);
free(string);
cJSON_Delete(request);

if (requestResult == NULL) {
return 0;
}

cJSON *json = cJSON_Parse(requestResult);
if (json == NULL) {
printf("ETOMIC faucet response parse failed!\n");
return 0;
}
cJSON *error = cJSON_GetObjectItem(json, "error");
uint8_t result = 0;
if (error != NULL && !is_cJSON_Null(error)) {
char *errorString = cJSON_PrintUnformatted(error);
printf("Got ETOMIC faucet error: %s\n", errorString);
free(errorString);
} else {
result = 1;
}
cJSON_Delete(json);
return result;
}
3 changes: 3 additions & 0 deletions iguana/exchanges/etomicswap/etomiccurl.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ extern "C"{
#define DEFAULT_GAS_PRICE 10
#endif

#define FAUCET_URL "http://195.201.116.176:8000/getEtomic"

typedef struct
{
uint64_t blockNumber;
Expand Down Expand Up @@ -48,6 +50,7 @@ uint64_t getEthBlockNumber();
uint64_t getGasPriceFromStation(uint8_t defaultOnErr);
int32_t waitForConfirmation(char *txId);
void unlock_send_tx_mutex();
uint8_t get_etomic_from_faucet(char *eth_addr, char *etomic_addr, char *token_addr);

#ifdef __cplusplus
}
Expand Down
1 change: 1 addition & 0 deletions iguana/iguana777.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ struct supernet_info
FILE *swapsfp;
double DEXratio;
struct smartaddress smartaddrs[64]; int32_t numsmartaddrs,cancelrefresh,runsilent,DEXtrades;
int32_t nosplit;
};

struct basilisk_swapmessage
Expand Down
1 change: 0 additions & 1 deletion iguana/m_notary_run
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"ad
curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"82.202.193.98\"}"
curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"54.95.68.31\"}"
curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"142.54.164.114\"}"
curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"45.7.229.33\"}"
curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"103.6.12.111\"}"
curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"155.254.17.21\"}"
curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"138.121.203.210\"}"
Expand Down
4 changes: 3 additions & 1 deletion iguana/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2212,8 +2212,10 @@ void iguana_main(void *arg)
myinfo->rpcport = atoi(&((char *)arg)[6]);
printf("OVERRIDE IGUANA port <- %u\n",myinfo->rpcport);
}
else if ( strcmp((char *)arg,"notary") == 0 ) // must be second to last
else if ( strncmp((char *)arg,"notary",strlen("notary")) == 0 ) // must be second to last
{
if ( strcmp((char *)arg,"notary_nosplit") == 0 )
myinfo->nosplit = 1;
myinfo->rpcport = IGUANA_NOTARYPORT;
myinfo->IAMNOTARY = 1;
myinfo->DEXEXPLORER = 0;//1; disable as SPV is used now
Expand Down

0 comments on commit 0f020ec

Please sign in to comment.