Skip to content
This repository was archived by the owner on Jan 29, 2019. It is now read-only.

Commit 3c6be21

Browse files
author
Valentin Stavetski
authored
Merge branch 'master' into 174-trades-for-binance
2 parents 039ef60 + 6931692 commit 3c6be21

File tree

4 files changed

+34
-10
lines changed

4 files changed

+34
-10
lines changed

exchanges-connector/src/main/kotlin/fund/cyber/markets/connector/configuration/MetricsConfiguration.kt

+3
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,8 @@ const val NINE_HUNDRED_NINGTHY_FIVE_PERCENT = 0.95
66
const val TRADE_COUNT_METRIC = "trade_count"
77
const val TRADE_LATENCY_METRIC = "trade_latency"
88

9+
const val ORDERBOOK_SIZE_METRIC = "orderbook_size"
10+
11+
const val ORDER_TYPE_TAG = "order_type"
912
const val EXCHANGE_TAG = "exchange"
1013
const val TOKENS_PAIR_TAG = "tokens_pair"

exchanges-connector/src/main/kotlin/fund/cyber/markets/connector/etherdelta/EtherdeltaTokenResolver.kt

+6-3
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ import org.springframework.beans.factory.annotation.Autowired
99
import org.springframework.context.support.GenericApplicationContext
1010
import org.springframework.stereotype.Component
1111
import org.web3j.protocol.Web3j
12-
import org.web3j.tx.Contract
1312
import org.web3j.tx.ReadonlyTransactionManager
13+
import org.web3j.tx.gas.ContractGasProvider
14+
import org.web3j.tx.gas.DefaultGasProvider
1415
import java.math.BigInteger
1516
import java.net.URL
1617
import java.nio.charset.Charset
@@ -32,6 +33,8 @@ class EtherdeltaTokenResolver {
3233
@Autowired
3334
private lateinit var resourceLoader: GenericApplicationContext
3435

36+
private val gasProvider: ContractGasProvider = DefaultGasProvider()
37+
3538
/**
3639
* Get ERC20 token definitions from different sources
3740
*/
@@ -119,7 +122,7 @@ class EtherdeltaTokenResolver {
119122
try {
120123
val transactionManager = ReadonlyTransactionManager(web3j, PARITY_TOKEN_REGISTRY_CONTRACT_ADDRESS)
121124
val parityTokenRegistryContract = ParityTokenRegistryContract.load(PARITY_TOKEN_REGISTRY_CONTRACT_ADDRESS,
122-
web3j, transactionManager, Contract.GAS_PRICE, Contract.GAS_LIMIT)
125+
web3j, transactionManager, gasProvider.getGasPrice(null), gasProvider.getGasLimit(null))
123126

124127
val tokensCount = parityTokenRegistryContract.tokenCount().send().toLong()
125128
for (index in 0 until tokensCount) {
@@ -152,7 +155,7 @@ class EtherdeltaTokenResolver {
152155

153156
try {
154157
val transactionManager = ReadonlyTransactionManager(web3j, address)
155-
val erc20Contract = Erc20Contract.load(address, web3j, transactionManager, Contract.GAS_PRICE, Contract.GAS_LIMIT)
158+
val erc20Contract = Erc20Contract.load(address, web3j, transactionManager, gasProvider.getGasPrice(null), gasProvider.getGasLimit(null))
156159

157160
val tokenSymbol = erc20Contract.symbol().send().trim()
158161
val tokenDecimals = erc20Contract.decimals().send().intValueExact()

exchanges-connector/src/main/kotlin/fund/cyber/markets/connector/orderbook/XchangeOrderbookConnector.kt

+16
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,20 @@ import fund.cyber.markets.common.model.Order
66
import fund.cyber.markets.common.model.OrderType
77
import fund.cyber.markets.common.model.TokensPair
88
import fund.cyber.markets.connector.AbstarctXchangeConnector
9+
import fund.cyber.markets.connector.configuration.EXCHANGE_TAG
10+
import fund.cyber.markets.connector.configuration.ORDERBOOK_SIZE_METRIC
11+
import fund.cyber.markets.connector.configuration.ORDER_TYPE_TAG
12+
import fund.cyber.markets.connector.configuration.TOKENS_PAIR_TAG
913
import info.bitrich.xchangestream.core.ProductSubscription
1014
import info.bitrich.xchangestream.core.StreamingExchangeFactory
1115
import io.micrometer.core.instrument.MeterRegistry
16+
import io.micrometer.core.instrument.Tags
1217
import org.knowm.xchange.currency.CurrencyPair
1318
import org.knowm.xchange.dto.marketdata.OrderBook
1419
import org.knowm.xchange.dto.trade.LimitOrder
1520
import org.springframework.kafka.core.KafkaTemplate
1621
import java.util.*
22+
import java.util.concurrent.atomic.AtomicLong
1723

1824
class XchangeOrderbookConnector : AbstarctXchangeConnector, OrderbookConnector {
1925
override var orderbooks: MutableMap<CurrencyPair, OrderBook> = mutableMapOf()
@@ -39,12 +45,22 @@ class XchangeOrderbookConnector : AbstarctXchangeConnector, OrderbookConnector {
3945
override fun subscribe() {
4046
log.info("Subscribing for orderbooks from $exchangeName exchange")
4147

48+
val exchangeTag = Tags.of(EXCHANGE_TAG, exchangeName)
49+
val askOrderTag = Tags.of(ORDER_TYPE_TAG, OrderType.ASK.name)
50+
val bidOrderTag = Tags.of(ORDER_TYPE_TAG, OrderType.BID.name)
51+
4252
exchangeTokensPairs.forEach { pair ->
53+
val exchangePairTag = exchangeTag.and(Tags.of(TOKENS_PAIR_TAG, pair.base.currencyCode + "_" + pair.counter.currencyCode))
54+
val askCountMonitor = monitoring.gauge(ORDERBOOK_SIZE_METRIC, exchangePairTag.and(askOrderTag), AtomicLong(0L))
55+
val bidCountMonitor = monitoring.gauge(ORDERBOOK_SIZE_METRIC, exchangePairTag.and(bidOrderTag), AtomicLong(0L))
4356

4457
val orderbookSubscription = exchange.streamingMarketDataService
4558
.getOrderBook(pair)
4659
.subscribe({ orderbook ->
4760
orderbooks[pair] = orderbook
61+
62+
askCountMonitor!!.set(orderbook.asks.size.toLong())
63+
bidCountMonitor!!.set(orderbook.bids.size.toLong())
4864
}) { throwable ->
4965
log.error("Error in subscribing orderbook for $exchangeName, pair $pair", throwable)
5066
}

exchanges-connector/src/main/kotlin/fund/cyber/markets/connector/trade/EtherdeltaTradeConnector.kt

+9-7
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ import org.springframework.beans.factory.annotation.Autowired
2424
import org.springframework.kafka.core.KafkaTemplate
2525
import org.springframework.stereotype.Component
2626
import org.web3j.protocol.Web3j
27-
import org.web3j.protocol.core.DefaultBlockParameter
27+
import org.web3j.protocol.core.DefaultBlockParameterName
2828
import org.web3j.protocol.core.methods.response.EthBlock
29-
import org.web3j.tx.Contract
3029
import org.web3j.tx.ReadonlyTransactionManager
30+
import org.web3j.tx.gas.ContractGasProvider
31+
import org.web3j.tx.gas.DefaultGasProvider
3132
import org.web3j.utils.Numeric
3233
import java.math.BigDecimal
3334
import java.math.BigInteger
@@ -58,15 +59,17 @@ class EtherdeltaTradeConnector : Connector {
5859
@Autowired
5960
private lateinit var monitoring: MeterRegistry
6061

62+
private val gasProvider: ContractGasProvider = DefaultGasProvider()
63+
6164
/**
6265
* Connect to etherdelta and parity token registry smart contracts using web3j
6366
*/
6467
override fun connect() {
6568
log.info("Connecting to $exchangeName exchange")
6669

67-
val gasPrice = web3j.ethGasPrice().send()
6870
val etherdeltaTransactionManager = ReadonlyTransactionManager(web3j, ETHERDELTA_CONTRACT_ADDRESS)
69-
etherdeltaContract = EtherdeltaContract.load(ETHERDELTA_CONTRACT_ADDRESS, web3j, etherdeltaTransactionManager, gasPrice.gasPrice, Contract.GAS_LIMIT)
71+
etherdeltaContract = EtherdeltaContract.load(ETHERDELTA_CONTRACT_ADDRESS, web3j,
72+
etherdeltaTransactionManager, gasProvider.getGasPrice(null), gasProvider.getGasLimit(null))
7073

7174
log.info("Connected to $exchangeName exchange")
7275
updateTokensPairs()
@@ -107,11 +110,10 @@ class EtherdeltaTradeConnector : Connector {
107110
.publishPercentiles(NINGTHY_FIVE_PERCENT, NINE_HUNDRED_NINGTHY_FIVE_PERCENT)
108111
.register(monitoring)
109112

110-
val latestBlockParameter = DefaultBlockParameter.valueOf("latest")
111-
var block = web3j.ethGetBlockByNumber(latestBlockParameter, false).send()
113+
var block = web3j.ethGetBlockByNumber(DefaultBlockParameterName.LATEST, false).send()
112114

113115
etherdeltaContract
114-
.tradeEventObservable(latestBlockParameter, latestBlockParameter)
116+
.tradeEventObservable(DefaultBlockParameterName.LATEST, DefaultBlockParameterName.LATEST)
115117
.subscribe{ tradeEvent ->
116118

117119
if (block.block.hash != tradeEvent.log!!.blockHash) {

0 commit comments

Comments
 (0)