Browse Source

#81 Add ETH address validation upon coin enable and eth_withdraw.

pass-iguana-arg
Artem Pikulin 7 years ago
parent
commit
6db6af6fe4
  1. 4
      iguana/exchanges/LP_commands.c
  2. 5
      iguana/exchanges/LP_transaction.c
  3. 7
      iguana/exchanges/etomicswap/etomiclib.cpp
  4. 1
      iguana/exchanges/etomicswap/etomiclib.h

4
iguana/exchanges/LP_commands.c

@ -608,6 +608,10 @@ version\n\
} }
if (ptr->etomic[0] != 0) { if (ptr->etomic[0] != 0) {
if (isValidAddress(ptr->etomic) == 0) {
return(clonestr("{\"error\":\"'etomic' field is not valid address!\"}"));
}
struct iguana_info *etomic_coin = LP_coinsearch("ETOMIC"); struct iguana_info *etomic_coin = LP_coinsearch("ETOMIC");
if (etomic_coin->inactive != 0) { if (etomic_coin->inactive != 0) {
return(clonestr("{\"error\":\"Enable ETOMIC first to use ETH/ERC20!\"}")); return(clonestr("{\"error\":\"Enable ETOMIC first to use ETH/ERC20!\"}"));

5
iguana/exchanges/LP_transaction.c

@ -2095,6 +2095,11 @@ char *LP_eth_withdraw(struct iguana_info *coin,cJSON *argjson)
if (dest_addr == NULL) { if (dest_addr == NULL) {
return(clonestr("{\"error\":\"param 'to' is required!\"}")); return(clonestr("{\"error\":\"param 'to' is required!\"}"));
} }
if (isValidAddress(dest_addr) == 0) {
return(clonestr("{\"error\":\"'to' address is not valid!\"}"));
}
amount = jdouble(argjson, "amount") * 100000000; amount = jdouble(argjson, "amount") * 100000000;
if (amount == 0) { if (amount == 0) {
return(clonestr("{\"error\":\"'amount' is not set or equal to zero!\"}")); return(clonestr("{\"error\":\"'amount' is not set or equal to zero!\"}"));

7
iguana/exchanges/etomicswap/etomiclib.cpp

@ -4,6 +4,7 @@
#include "etomiclib.h" #include "etomiclib.h"
#include "etomiccurl.h" #include "etomiccurl.h"
#include <iostream> #include <iostream>
#include <regex>
#include <cpp-ethereum/libethcore/Common.h> #include <cpp-ethereum/libethcore/Common.h>
#include <cpp-ethereum/libethcore/CommonJS.h> #include <cpp-ethereum/libethcore/CommonJS.h>
#include <cpp-ethereum/libethcore/TransactionBase.h> #include <cpp-ethereum/libethcore/TransactionBase.h>
@ -835,3 +836,9 @@ uint8_t compareAddresses(char *address1, char *address2)
auto addr_bytes_2 = jsToAddress(address2); auto addr_bytes_2 = jsToAddress(address2);
return static_cast<uint8_t>(addr_bytes_1 == addr_bytes_2); return static_cast<uint8_t>(addr_bytes_1 == addr_bytes_2);
} }
uint8_t isValidAddress(char *address)
{
std::regex r("^(0x|0X)?[a-fA-F0-9]{40}$");
return static_cast<uint8_t>(std::regex_match(address, r));
}

1
iguana/exchanges/etomicswap/etomiclib.h

@ -214,6 +214,7 @@ uint64_t estimate_erc20_gas(
); );
uint8_t compareAddresses(char *address1, char *address2); uint8_t compareAddresses(char *address1, char *address2);
uint8_t isValidAddress(char *address);
#ifdef __cplusplus #ifdef __cplusplus
} }

Loading…
Cancel
Save