exchanges/engine: Add multichain deposit/withdrawal support (#794)

* Add exchange multichain support

* Start tidying up

* Add multichain transfer support for Bitfinex and fix poloniex bug

* Add Coinbene multichain support

* Start adjusting the deposit address manager

* Fix deposit tests and further enhancements

* Cleanup

* Add bypass flag, expand tests plus error coverage for Huobi

Adjust helpers

* Address nitterinos

* BFX wd changes

* Address nitterinos

* Minor fixes rebasing on master

* Fix BFX acceptableMethods test

* Add some TO-DOs for 2 tests WRT races

* Fix acceptableMethods test round 2

* Address nitterinos
This commit is contained in:
Adrian Gallagher
2021-10-15 15:55:38 +11:00
committed by GitHub
parent b093a7df19
commit 0c00b7e1df
145 changed files with 46329 additions and 5507 deletions

View File

@@ -21,25 +21,27 @@ const (
exmoAPIURL = "https://api.exmo.com"
exmoAPIVersion = "1"
exmoTrades = "trades"
exmoOrderbook = "order_book"
exmoTicker = "ticker"
exmoPairSettings = "pair_settings"
exmoCurrency = "currency"
exmoUserInfo = "user_info"
exmoOrderCreate = "order_create"
exmoOrderCancel = "order_cancel"
exmoOpenOrders = "user_open_orders"
exmoUserTrades = "user_trades"
exmoCancelledOrders = "user_cancelled_orders"
exmoOrderTrades = "order_trades"
exmoRequiredAmount = "required_amount"
exmoDepositAddress = "deposit_address"
exmoWithdrawCrypt = "withdraw_crypt"
exmoGetWithdrawTXID = "withdraw_get_txid"
exmoExcodeCreate = "excode_create"
exmoExcodeLoad = "excode_load"
exmoWalletHistory = "wallet_history"
exmoTrades = "trades"
exmoOrderbook = "order_book"
exmoTicker = "ticker"
exmoPairSettings = "pair_settings"
exmoCurrency = "currency"
exmoUserInfo = "user_info"
exmoOrderCreate = "order_create"
exmoOrderCancel = "order_cancel"
exmoOpenOrders = "user_open_orders"
exmoUserTrades = "user_trades"
exmoCancelledOrders = "user_cancelled_orders"
exmoOrderTrades = "order_trades"
exmoRequiredAmount = "required_amount"
exmoDepositAddress = "deposit_address"
exmoWithdrawCrypt = "withdraw_crypt"
exmoGetWithdrawTXID = "withdraw_get_txid"
exmoExcodeCreate = "excode_create"
exmoExcodeLoad = "excode_load"
exmoWalletHistory = "wallet_history"
exmoCryptoPaymentProviderList = "payments/providers/crypto/list"
// Rate limit: 180 per/minute
exmoRateInterval = time.Minute
@@ -220,7 +222,6 @@ func (e *EXMO) GetCryptoDepositAddress(ctx context.Context) (map[string]string,
mapString[key] = v
}
return mapString, nil
default:
return nil, errors.New("no addresses found, generate required addresses via site")
}
@@ -228,7 +229,7 @@ func (e *EXMO) GetCryptoDepositAddress(ctx context.Context) (map[string]string,
// WithdrawCryptocurrency withdraws a cryptocurrency from the exchange to the desired address
// NOTE: This API function is available only after request to their tech support team
func (e *EXMO) WithdrawCryptocurrency(ctx context.Context, currency, address, invoice string, amount float64) (int64, error) {
func (e *EXMO) WithdrawCryptocurrency(ctx context.Context, currency, address, invoice, transport string, amount float64) (int64, error) {
type response struct {
TaskID int64 `json:"task_id,string"`
Result bool `json:"result"`
@@ -240,8 +241,12 @@ func (e *EXMO) WithdrawCryptocurrency(ctx context.Context, currency, address, in
v.Set("currency", currency)
v.Set("address", address)
if strings.EqualFold(currency, "XRP") {
v.Set(invoice, invoice)
if invoice != "" {
v.Set("invoice", invoice)
}
if transport != "" {
v.Set("transport", strings.ToUpper(transport))
}
v.Set("amount", strconv.FormatFloat(amount, 'f', -1, 64))
@@ -526,3 +531,10 @@ func getInternationalBankDepositFee(c currency.Code, amount float64, bankTransac
return fee
}
// GetCryptoPaymentProvidersList returns a map of all the supported cryptocurrency transfer settings
func (e *EXMO) GetCryptoPaymentProvidersList(ctx context.Context) (map[string][]CryptoPaymentProvider, error) {
var result map[string][]CryptoPaymentProvider
path := "/v" + exmoAPIVersion + "/" + exmoCryptoPaymentProviderList
return result, e.SendHTTPRequest(ctx, exchange.RestSpot, path, &result)
}