[Ethereum] 아비트라지를 위한 여정 4편

0xDave·2022년 10월 1일
0

Ethereum

목록 보기
19/112
post-thumbnail

이제 Brownie 콘솔창에서 벗어나 실제적인 봇을 만들어보자. 코딩하기 전에 전체적으로 어떤 방식으로 봇을 설계할지 생각한 후에 코딩을 하면 많은 도움이 된다.

🌉 전체적인 그림


[SETUP]
Connect to the network
Load the user account
Load the router contract
Load the token contracts

[DATA STRUCTURES]
Prepare a data structure for each token
Prepare a data structure for each unique token pair

[MAIN PROGRAM]
Set up loop
Fetch and store swap rates
Print interesting results

1. Set Up


먼저 셋업부분을 살펴보면, 테스트 계정을 가져오고 아발란체 네트워크에 연결한 후 여러 토큰들의 컨트랙트를 가져오고 있다. network.connetContract.from_explorer 모두 brownie에서 가져온 것들이다.

import time
import datetime
from brownie import *

user = accounts.load('test_account')
network.connect('avax-main') # brownie.network 이용해서 아발란체 메인넷에 연결

print("Loading Contracts:")
dai_contract = Contract.from_explorer('0xd586e7f844cea2f87f50152665bcbc2c279d8d70')
mim_contract = Contract.from_explorer('0x130966628846bfd36ff31a822705796e8cb8c18d')
usdc_contract = Contract.from_explorer('0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664')
usdt_contract = Contract.from_explorer('0xc7198437980c041c805a1edcba50c1ce5db95118')
wavax_contract = Contract.from_explorer('0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7')
router_contract = Contract.from_explorer('0x60aE616a2155Ee3d9A68541Ba4544862310933d4')

2. Data Structures


# [DATA STRUCTURES]
dai = {
    "address": dai_contract.address,
    "symbol": dai_contract.symbol(),
    "decimals": dai_contract.decimals(),
}

mim = {
    "address": mim_contract.address,
    "symbol": mim_contract.symbol(),
    "decimals": mim_contract.decimals(),
}

usdc = {
    "address": usdc_contract.address,
    "symbol": usdc_contract.symbol(),
    "decimals": usdc_contract.decimals(),
}

usdt = {
    "address": usdt_contract.address,
    "symbol": usdt_contract.symbol(),
    "decimals": usdt_contract.decimals(),
}

token_pairs = [
    (dai, mim),
    (mim, dai),
    (dai, usdc),
    (usdc, dai),
    (usdt, dai),
    (dai, usdt),
    (usdc, usdt),
    (usdt, usdc),
    (usdt, mim),
    (mim, usdt),
    (usdc, mim),
    (mim, usdc),
]

3. Main Program


#Main Program
while True:
    for pair in token_pairs:
        token_in = pair[0]
        token_out = pair[1]
        qty_out = (
            router_contract.getAmountsOut(
                1 * (10 ** token_in["decimals"]),
                [
                    token_in["address"],
                    wavax_contract.address,
                    token_out["address"],
                ],
            )[-1] / (10 ** token_out["decimals"])
        )
        print(
            f"{datetime.datetime.now().strftime('[%I:%M:%S %P]')}"
            f"{token_in['symbol']} -> {token_out['symbol']}: ({qty_out:.3f})"
        )
        time.sleep(0.1)

1. f-string


2. strftime()

날짜 형식을 변환해주는 메소드다.


3. {:.3f}

반올림 해서 소수점 아래 셋째자리까지 표현된다.


🪄 결과물



참고자료 및 출처


  1. Python 날짜 형식 변환 strftime() 사용법

  2. [python] 파이썬 f-string (문자열 포매팅 방법 3)

profile
Just BUIDL :)

0개의 댓글