Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LAM-1087 feat: bitfinex implementation #1669

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion lib/new-admin/config/accounts.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const _ = require('lodash/fp')
const { ALL } = require('../../plugins/common/ccxt')

const { BTC, BCH, DASH, ETH, LTC, USDT, ZEC, XMR, LN, TRX, USDT_TRON } = COINS
const { bitpay, coinbase, itbit, bitstamp, kraken, binanceus, cex, binance } = ALL
const { bitpay, coinbase, itbit, bitstamp, kraken, binanceus, cex, binance, bitfinex } = ALL

const TICKER = 'ticker'
const WALLET = 'wallet'
Expand All @@ -17,6 +17,8 @@ const ZERO_CONF = 'zeroConf'
const WALLET_SCORING = 'wallet_scoring'

const ALL_ACCOUNTS = [
{ code: 'bitfinex', display: 'Bitfinex', class: TICKER, cryptos: bitfinex.CRYPTO },
{ code: 'bitfinex', display: 'Bitfinex', class: EXCHANGE, cryptos: bitfinex.CRYPTO },
{ code: 'binance', display: 'Binance', class: TICKER, cryptos: binance.CRYPTO },
{ code: 'binanceus', display: 'Binance.us', class: TICKER, cryptos: binanceus.CRYPTO },
{ code: 'cex', display: 'CEX.IO', class: TICKER, cryptos: cex.CRYPTO },
Expand Down
3 changes: 2 additions & 1 deletion lib/new-settings-loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ const SECRET_FIELDS = [
'telnyx.apiKey',
'vonage.apiSecret',
'galoy.walletId',
'galoy.apiSecret'
'galoy.apiSecret',
'bitfinex.secret'
]

/*
Expand Down
4 changes: 3 additions & 1 deletion lib/plugins/common/ccxt.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const binanceus = require('../exchange/binanceus')
const cex = require('../exchange/cex')
const bitpay = require('../ticker/bitpay')
const binance = require('../exchange/binance')
const bitfinex = require('../exchange/bitfinex')
const logger = require('../../logger')

const { BTC, BCH, DASH, ETH, LTC, ZEC, USDT, TRX, USDT_TRON, LN } = COINS
Expand All @@ -24,7 +25,8 @@ const ALL = {
CRYPTO: [BTC, ETH, LTC, DASH, ZEC, BCH, USDT, USDT_TRON, TRX, LN],
FIAT: 'ALL_CURRENCIES'
},
binance: binance
binance: binance,
bitfinex: bitfinex
}

function buildMarket (fiatCode, cryptoCode, serviceName) {
Expand Down
21 changes: 21 additions & 0 deletions lib/plugins/exchange/bitfinex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
const { COINS } = require('@lamassu/coins')
const _ = require('lodash/fp')

const { ORDER_TYPES } = require('./consts')

const ORDER_TYPE = ORDER_TYPES.MARKET
const { BTC, ETH, LTC, BCH, USDT, LN } = COINS
const CRYPTO = [BTC, ETH, LTC, BCH, USDT, LN]
const FIAT = ['USD', 'EUR']
const AMOUNT_PRECISION = 8
const REQUIRED_CONFIG_FIELDS = ['key', 'secret']

const loadConfig = (account) => {
const mapper = {
'key': 'apiKey',
}
const mapped = _.mapKeys(key => mapper[key] ? mapper[key] : key)(account)
return { ...mapped, timeout: 3000 }
}

module.exports = { loadConfig, REQUIRED_CONFIG_FIELDS, CRYPTO, FIAT, ORDER_TYPE, AMOUNT_PRECISION }
36 changes: 36 additions & 0 deletions new-lamassu-admin/src/pages/Services/schemas/bitfinex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import * as Yup from 'yup'

import SecretInputFormik from 'src/components/inputs/formik/SecretInput'
import TextInputFormik from 'src/components/inputs/formik/TextInput'

import { secretTest } from './helper'

export default {
code: 'bitfinex',
name: 'Bitfinex',
title: 'Bitfinex (Exchange)',
elements: [
{
code: 'key',
display: 'API Key',
component: TextInputFormik,
face: true,
long: true
},
{
code: 'secret',
display: 'API Secret',
component: SecretInputFormik
}
],
getValidationSchema: account => {
return Yup.object().shape({
key: Yup.string('The API key must be a string')
.max(100, 'The API key is too long')
.required('The API key is required'),
secret: Yup.string('The API secret must be a string')
.max(100, 'The API secret is too long')
.test(secretTest(account?.secret, 'API secret'))
})
}
}
4 changes: 3 additions & 1 deletion new-lamassu-admin/src/pages/Services/schemas/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import binance from './binance'
import binanceus from './binanceus'
import bitfinex from './bitfinex'
import bitgo from './bitgo'
import bitstamp from './bitstamp'
import blockcypher from './blockcypher'
Expand Down Expand Up @@ -31,5 +32,6 @@ export default {
[cex.code]: cex,
[ciphertrace.code]: ciphertrace,
[trongrid.code]: trongrid,
[binance.code]: binance
[binance.code]: binance,
[bitfinex.code]: bitfinex
}