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);
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;

2
iguana/exchanges/LP_nativeDEX.c

@ -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;

49
iguana/exchanges/etomicswap/etomiccurl.c

@ -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 {
@ -56,7 +55,7 @@ cJSON *parseEthRpcResponse(char *requestResult)
return result;
}
char* sendRequest(char* request)
char* sendRequest(char *request, char *url)
{
CURL *curl;
CURLcode res;
@ -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 */
@ -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);
@ -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");
};
@ -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
iguana/exchanges/etomicswap/etomiccurl.h

@ -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;
@ -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
}

Loading…
Cancel
Save