Browse Source

Add etomic faucet request when ETH/ERC20 coin is getting enabled.

pass-iguana-arg
Artem Pikulin 7 years ago
parent
commit
c2ed80b006
  1. 21
      iguana/exchanges/LP_commands.c
  2. 2
      iguana/exchanges/LP_nativeDEX.c
  3. 49
      iguana/exchanges/etomicswap/etomiccurl.c
  4. 3
      iguana/exchanges/etomicswap/etomiccurl.h

21
iguana/exchanges/LP_commands.c

@ -554,6 +554,27 @@ jpg(srcfile, destfile, power2=7, password, data="", required, ind=0)\n\
jaddstr(retjson,"coin",coin); jaddstr(retjson,"coin",coin);
return(jprint(retjson,1)); 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 ) if ( LP_conflicts_find(ptr) == 0 )
{ {
cJSON *array; cJSON *array;

2
iguana/exchanges/LP_nativeDEX.c

@ -120,7 +120,7 @@ struct LP_globals
{ {
//struct LP_utxoinfo *LP_utxoinfos[2],*LP_utxoinfos2[2]; //struct LP_utxoinfo *LP_utxoinfos[2],*LP_utxoinfos2[2];
bits256 LP_mypub25519,LP_privkey,LP_mypriv25519,LP_passhash; 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; uint16_t netid;
uint8_t LP_myrmd160[20],LP_pubsecp[33]; uint8_t LP_myrmd160[20],LP_pubsecp[33];
uint32_t LP_sessionid,counter; uint32_t LP_sessionid,counter;

49
iguana/exchanges/etomicswap/etomiccurl.c

@ -1,7 +1,6 @@
#include "etomiccurl.h" #include "etomiccurl.h"
#include <curl/curl.h> #include <curl/curl.h>
static char *ethRpcUrl = ETOMIC_URL;
pthread_mutex_t sendTxMutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t sendTxMutex = PTHREAD_MUTEX_INITIALIZER;
struct string { struct string {
@ -56,7 +55,7 @@ cJSON *parseEthRpcResponse(char *requestResult)
return result; return result;
} }
char* sendRequest(char* request) char* sendRequest(char *request, char *url)
{ {
CURL *curl; CURL *curl;
CURLcode res; CURLcode res;
@ -72,13 +71,15 @@ char* sendRequest(char* request)
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s); 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); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, request);
/* Perform the request, res will get the return code */ /* Perform the request, res will get the return code */
res = curl_easy_perform(curl); res = curl_easy_perform(curl);
/* Check for errors */ /* Check for errors */
if (res != CURLE_OK) { if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
curl_easy_cleanup(curl);
return NULL;
} }
/* always cleanup */ /* always cleanup */
@ -98,7 +99,7 @@ cJSON *sendRpcRequest(char *method, cJSON *params)
cJSON_AddItemToObject(request, "params", cJSON_Duplicate(params, 1)); cJSON_AddItemToObject(request, "params", cJSON_Duplicate(params, 1));
cJSON_AddNumberToObject(request, "id", 1); cJSON_AddNumberToObject(request, "id", 1);
string = cJSON_PrintUnformatted(request); string = cJSON_PrintUnformatted(request);
char* requestResult = sendRequest(string); char* requestResult = sendRequest(string, ETOMIC_URL);
free(string); free(string);
cJSON_Delete(request); cJSON_Delete(request);
cJSON *result = parseEthRpcResponse(requestResult); cJSON *result = parseEthRpcResponse(requestResult);
@ -151,8 +152,8 @@ char* sendRawTx(char* rawTx)
int64_t getNonce(char* address) int64_t getNonce(char* address)
{ {
// we should lock this mutex and unlock it only when transaction was already sent. // we should lock this mutex and unlock it only when transaction was already sent or failed.
// make sure that sendRawTx is called after getting a nonce! // make sure that sendRawTx or unlock_send_tx_mutex is called after getting a nonce!
if (pthread_mutex_lock(&sendTxMutex) != 0) { if (pthread_mutex_lock(&sendTxMutex) != 0) {
printf("Nonce mutex lock failed\n"); printf("Nonce mutex lock failed\n");
}; };
@ -372,3 +373,39 @@ void unlock_send_tx_mutex()
{ {
pthread_mutex_unlock(&sendTxMutex); 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
iguana/exchanges/etomicswap/etomiccurl.h

@ -19,6 +19,8 @@ extern "C"{
#define DEFAULT_GAS_PRICE 10 #define DEFAULT_GAS_PRICE 10
#endif #endif
#define FAUCET_URL "http://195.201.116.176:8000/getEtomic"
typedef struct typedef struct
{ {
uint64_t blockNumber; uint64_t blockNumber;
@ -48,6 +50,7 @@ uint64_t getEthBlockNumber();
uint64_t getGasPriceFromStation(uint8_t defaultOnErr); uint64_t getGasPriceFromStation(uint8_t defaultOnErr);
int32_t waitForConfirmation(char *txId); int32_t waitForConfirmation(char *txId);
void unlock_send_tx_mutex(); void unlock_send_tx_mutex();
uint8_t get_etomic_from_faucet(char *eth_addr, char *etomic_addr, char *token_addr);
#ifdef __cplusplus #ifdef __cplusplus
} }

Loading…
Cancel
Save