forked from 0rtis/dfktools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdex_example.py
64 lines (55 loc) · 3.69 KB
/
dex_example.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import logging
import sys
import time
from web3 import Web3
import dex.uniswap_v2_factory as market_place_factory
import dex.uniswap_v2_router as market_place_router
import dex.master_gardener as gardens
import dex.uniswap_v2_pair as pool
import dex.utils.utils as utils
import dex.erc20 as erc20
if __name__ == "__main__":
log_format = '%(asctime)s|%(name)s|%(levelname)s: %(message)s'
logger = logging.getLogger("DFK-DEX")
logger.setLevel(logging.DEBUG)
logging.basicConfig(level=logging.INFO, format=log_format, stream=sys.stdout)
rpc_server = 'https://api.harmony.one'
logger.info("Using RPC server " + rpc_server)
w3 = Web3(Web3.HTTPProvider(rpc_server))
user_address = '0x2E7669F61eA77F02445A015FBdcFe2DE47083E02'
# Automated Market Making pool
logger.info("Liquidity pool count:\t" + str(market_place_factory.all_pairs_length(rpc_server)))
liquidity_pool_id = 0
liquidity_pool_address = market_place_factory.all_pairs(liquidity_pool_id, rpc_server)
liquidity_pool = pool.UniswapV2Pair(liquidity_pool_address, rpc_server, logger)
liquidity_pool_symbol = liquidity_pool.symbol()
liquidity_pool_token0_address = liquidity_pool.token_0()
liquidity_pool_token0 = erc20.symbol(liquidity_pool_token0_address, rpc_server)
logger.info(liquidity_pool_token0 + " user balance:\t" + str(erc20.wei2eth(w3, erc20.balance_of(user_address, liquidity_pool_token0_address, rpc_server))))
liquidity_pool_token1_address = liquidity_pool.token_1()
liquidity_pool_token1 = erc20.symbol(liquidity_pool_token1_address, rpc_server)
logger.info(liquidity_pool_token1 + " user balance:\t" + str(erc20.wei2eth(w3, erc20.balance_of(user_address, liquidity_pool_token1_address, rpc_server))))
amount_token1 = 1
amount_token0 = erc20.wei2eth(w3, liquidity_pool.expected_amount0(erc20.eth2wei(w3, amount_token1)))
logger.info(liquidity_pool_symbol + " " + liquidity_pool_token0 + "-" + liquidity_pool_token1 + " @ " + str(amount_token0) + " " + liquidity_pool_token0 + " per " + liquidity_pool_token1)
liquidity_pool_balance = liquidity_pool.balance_of(user_address)
logger.info("LP user balance:\t" + str(erc20.wei2eth(w3, liquidity_pool_balance)))
# Garden staking
logger.info("Staking pool count:\t" + str(gardens.pool_length(rpc_server)))
staking_pool = gardens.Garden(liquidity_pool, rpc_server, logger)
staking_pool_symbol = staking_pool.symbol()
staking_pool_token0 = erc20.symbol(staking_pool.token_0(), rpc_server)
staking_pool_token1 = erc20.symbol(staking_pool.token_1(), rpc_server)
staking_pool_total_supply = staking_pool.total_supply()
logger.info(staking_pool_symbol + " " + staking_pool_token0 + "-" + staking_pool_token1 + ", total supply="
+ str(erc20.wei2eth(w3,staking_pool_total_supply)))
staking_pool_user = utils.human_readable_user_info(staking_pool.user_info(user_address))
staking_pool_balance = gardens.Garden.user_info_lp_balance(staking_pool_user)
staking_pool_share = staking_pool_balance/staking_pool_total_supply
logger.info("LP staked user balance:\t" + str(erc20.wei2eth(w3, staking_pool_balance)) + " (pool share " + str(round(100 * staking_pool_share, 2)) + "%)")
# Swap JEWEL for ONE
#private_key = None #set private key of to swap coin from
#account_address = w3.eth.account.privateKeyToAccount(private_key).address
#market_place_router.swap_exact_tokens_for_eth(erc20.eth2wei(w3, 1), 60, [erc20.JEWEL, market_place_router.weth(rpc_server)], account_address,
# int(time.time() + 60), private_key, w3.eth.getTransactionCount(account_address),
# w3.fromWei(w3.eth.gas_price, 'gwei'), 30, rpc_server, logger)