$ 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
설치 완료 이후 버전체크했을 때 다음과 같이 나오면 성공!
$ brownie accounts generate test_account
위 명령어로 테스트에 사용할 user account를 만들어준다. 정상적으로 완료되면 니모닉 시드 구문과 account 주소가 나올 것이다. 혹시 모르니 니모닉 구문은 잘 보관해두자.
$ brownie networks modify avax-main
현재 네트워크에 아발란체 메인넷이 포함되어 있는지 확인하고
$ brownie console --network avax-main
아발란체 메인넷으로 시작하면 파이썬 구문을 입력할 수 있게 나오면서 브라우니 환경 세팅 끝.
>>> 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'
wavax_contract = Contract.from_explorer('0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7')
Contract.from_explorer()
를 이용해 컨트랙트 주소를 가져올 수 있다. 컨트랙트와 관련된 더 많은 메소드는 Brownie docs를 확인하자.
앞에서 아발란체의 컨트랙트를 가져올 때 분명히 똑같은 주소를 입력했는데 balance의 숫자가 다르다. 아발란체의 스캐너인 snowtrace를 들어가서 컨트랙트를 검색해보면 그 이유를 알 수 있다.
처음 입력했던 wavax_contract.balance()
는 아발란체 메인넷의 가스로 소비되는 AVAX
토큰의 양을 알려준다. 반면 wavax_contract.balanceOf('컨트랙트 주소')
는 인자로 넘겨준 컨트랙트 주소에 있는 WAVAX
토큰의 양을 알려준다. 우리가 가져온 컨트랙트는 WAVAX
토큰의 컨트랙트이므로 해당 컨트랙트에 있는 WAVAX
토큰의 양을 알 수 있고, ERC20 토큰 목록에 있는 185개와 매칭되는 것을 볼 수 있다.
충분한 이해를 돕기 위해 추가적으로 한 가지 예시를 더 알아보자. 아래 입력한 컨트랙트 주소는 아발란체 메인넷의 aave 컨트랙트다.
다시 snowtrace로 들어가서 해당 컨트랙트를 검색해보면 aave 컨트랙트에 있는 WAVAX
토큰의 양인 200483개와 일치하는 것을 볼 수 있다.
.balance()
와 .balanceOf()
로 해당 토큰의 갯수를 가져오면 매우 큰 숫자들이 리턴된다. 정확히 얼마나 있는지 직관적이지 않고 알아보기 힘들기 때문에 decimal()
을 이용해 보기 편하게 바꿔보자. decimal은 소수점 단위를 말하며 ERC-20 토큰들은 18을 값으로 가진다. 10^18 Wei = 1 eth 라서 그렇다.
따라서 이런 식으로 작성해서 보기 좋게 바꿔주는 것이 좋다.