-
Brownie: Smart Contract 파이썬으로 테스트 하기컴퓨터/Solidity 2022. 11. 21. 19:11728x90반응형
Brownie
소개
ETH Brownie는 Ethereum Virtual Machine (EVM) 환경에서 스마트 컨트랙트를 파이썬으로 테스트할 수 있게 도와준다.
설치는 pip으로 하면 끝난다. (C/C++ Build tools 최신 버전 설치 필요할 수 있음)
네트워크를 지정할 수도 있지만 기본적으로 Ganache [가나슈]를 이용하면 편하다.
(account 100 ETHER 있는 10개의 계정을 받음)
npm install ganache -g pip install eth-brownie
아래 예제 코드를 보면 쉽게 이해할 수 있다.
from brownie import MyContract, accounts, chain from random import randint WEI = 1000000000000000000 def main(): l = MyContract.deploy({"from": accounts[0]}) print(dir(l)) print(l.getBalance()) tx = l.buy({"from": accounts[0], "value": "5 ether"} tx.wait(1)
사용법
프로젝트 초기화
brownie init project_name
scripts/pyfile.py 에 function 실행하기
brownie run pyfile function
console 창 인터프리터
hinting 다 됨, accounts 같은 변수는 import 되어있음
brownie console
pytest 연동
Pytest와 연동해서 테스트 스크립트를 짤 수 있다.
brownie test
예제
block.timestamp 시간 변경
chain.sleep(second)
트랜잭션을 딜레이 할 수 있다.
from brownie import Lottery, accounts, chain # type: ignore from random import randint WEI = 1000000000000000000 def main(): l = Lottery.deploy({"from": accounts[0]}) print(dir(l)) for _ in range(10): tx = l.buyTicket( { "from": accounts[randint(0, 9)], "value": l.getTicketPrice() * 10, }, # 1.5 ether ) tx.wait(1) print(l.getWinMoney() // 1000000000000000000) chain.sleep(50) # 실제로 50초 멈추지 않지만 블록체인에서 50초 지남 chain.mine() # update block.timestamp
send transaction
Smart Contract
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title Lottery * @dev Lottery 스마트 컨트랙트 */ contract Lottery { ... function buyTicket() public payable returns (bool success) { ... } }
Python Client
from brownie import Lottery, accounts, chain # type: ignore from random import randint WEI = 1000000000000000000 def main(): l = Lottery.deploy({"from": accounts[0]}) print(dir(l)) for _ in range(10): tx = l.buyTicket( { "from": accounts[randint(0, 9)], "value": l.getTicketPrice() * 10, }, # 1.5 ether ) tx.wait(1)
참고
728x90'컴퓨터 > Solidity' 카테고리의 다른 글
Goerli, Sepolia testnet ETH 채굴하기 (mining) (0) 2022.12.06 Smart Contract <-> Svelte 프론트엔드 연동 (0) 2022.11.28