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

0xDave·2022년 9월 26일
0

Ethereum

목록 보기
17/112
post-thumbnail

🍫 Brownie 설치


$ python3 -m venv .venv
$ source .venv/bin/activate

테스트 할 가상환경을 만들고 활성화 시킨다.

$ pip3 install eth-brownie Collecting eth-brownie

이후 Brownie를 설치 해주고

$ brownie --version
//Brownie v1.17.2 - Python development framework for Ethereum

설치 완료 이후 버전체크했을 때 다음과 같이 나오면 성공!


👻 테스트용 User 만들기


$ brownie accounts generate test_account

위 명령어로 테스트에 사용할 user account를 만들어준다. 정상적으로 완료되면 니모닉 시드 구문과 account 주소가 나올 것이다. 혹시 모르니 니모닉 구문은 잘 보관해두자.


📡 네트워크 확인


$ brownie networks modify avax-main

현재 네트워크에 아발란체 메인넷이 포함되어 있는지 확인하고

$ brownie console --network avax-main

아발란체 메인넷으로 시작하면 파이썬 구문을 입력할 수 있게 나오면서 브라우니 환경 세팅 끝.


🧑‍💻 파이썬 코딩 시작


1. User account 가져오기

>>> user = accounts.load('test_account')

이제 아까 만들어뒀던 테스트 account를 가져올 수 있다.


>>> dir(user)

dir() 메소드를 사용하면 인자로 넘겨준 객체의 메소드를 확인할 수 있다. 아래는 substack 포스팅의 예시이다.


>>> dir(user)
[address, balance, deploy, estimate_gas, gas_used, get_deployment_address, nonce, private_key, public_key, save, sign_defunct_message, sign_message, transfer]
>>> user.address
'0xC763A439754eEB4e9D55dE9E264668272CCbE126'
>>> user.balance()
0
>>> user.private_key
'0xfaeb97eb1a00d5330ed59a93a965479bdec0ca97a6cfc374bca9bdc9faffb99c'
>>> user.public_key
'0x0cec9869d19688e5ba98315b0f324d2d30db597fba3ece5089876f2e24890d13cec52cd8d801a424c8034fa61316d85210f76a967f0234686eb3edf8384b49a9'

2. 컨트랙트 가져오기

wavax_contract = Contract.from_explorer('0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7')

Contract.from_explorer() 를 이용해 컨트랙트 주소를 가져올 수 있다. 컨트랙트와 관련된 더 많은 메소드는 Brownie docs를 확인하자.


3. wavax_contract.balance() vs wavax_contract.balanceOf()

앞에서 아발란체의 컨트랙트를 가져올 때 분명히 똑같은 주소를 입력했는데 balance의 숫자가 다르다. 아발란체의 스캐너인 snowtrace를 들어가서 컨트랙트를 검색해보면 그 이유를 알 수 있다.

처음 입력했던 wavax_contract.balance()는 아발란체 메인넷의 가스로 소비되는 AVAX 토큰의 양을 알려준다. 반면 wavax_contract.balanceOf('컨트랙트 주소')는 인자로 넘겨준 컨트랙트 주소에 있는 WAVAX 토큰의 양을 알려준다. 우리가 가져온 컨트랙트는 WAVAX 토큰의 컨트랙트이므로 해당 컨트랙트에 있는 WAVAX 토큰의 양을 알 수 있고, ERC20 토큰 목록에 있는 185개와 매칭되는 것을 볼 수 있다.


충분한 이해를 돕기 위해 추가적으로 한 가지 예시를 더 알아보자. 아래 입력한 컨트랙트 주소는 아발란체 메인넷의 aave 컨트랙트다.

다시 snowtrace로 들어가서 해당 컨트랙트를 검색해보면 aave 컨트랙트에 있는 WAVAX 토큰의 양인 200483개와 일치하는 것을 볼 수 있다.


4. decimal()

.balance().balanceOf()로 해당 토큰의 갯수를 가져오면 매우 큰 숫자들이 리턴된다. 정확히 얼마나 있는지 직관적이지 않고 알아보기 힘들기 때문에 decimal()을 이용해 보기 편하게 바꿔보자. decimal은 소수점 단위를 말하며 ERC-20 토큰들은 18을 값으로 가진다. 10^18 Wei = 1 eth 라서 그렇다.

따라서 이런 식으로 작성해서 보기 좋게 바꿔주는 것이 좋다.


출처 및 참고자료


  1. Loading a Token Smart Contract
profile
Just BUIDL :)

0개의 댓글