스마트 계약과 web3.py로의 첫 번째 상호작용
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- 초보 블록체인 개발자 및 web3.py 사용자
- Ethereum 기반 dApp 개발을 학습하고자 하는 자
- 로컬 환경에서 스마트 계약 테스트를 수행하는 개발자
- 난이도: 중간 (Python 기초 및 Ethereum 개념 필요)
핵심 요약
web3.py
를 사용하여 스마트 계약과 상호작용하기 위해 계약 주소와 ABI(Application Binary Interface)가 필수적이다.- Ganache를 통해 로컬 개발 환경을 구축함으로써 테스트 네트워크의 토큰을 사용하지 않고 실시간으로 계약을 테스트할 수 있다.
- Solidity로 작성된 스마트 계약을 Remix IDE를 통해 컴파일하고, ABI를 추출하여 Python 스크립트에 적용하는 과정이 핵심이다.
섹션별 세부 요약
1. 스마트 계약 개요 및 web3.py 활용 방법
- 스마트 계약은 블록체인에 저장된 자동 실행 프로그램으로,
public
상태 변수와view
함수로 데이터를 제공한다. getCount()
함수는 상태를 읽기만 하며, 가스 비용이 발생하지 않는다.- ABI는 스마트 계약의 함수와 이벤트를 설명하는 JSON 형식으로, web3.py가 계약과 상호작용할 수 있도록 한다.
2. 로컬 개발 환경 설정 (Ganache)
- Ganache Desktop을 실행하여 로컬 테스트 네트워크를 생성하고, 무제한의 테스트 이더를 제공받는다.
- Remix IDE에 스마트 계약 코드(
Counter.sol
)를 입력하고, Solidity 컴파일러로 컴파일하여 ABI를 추출한다. - EVM 버전을 'Paris'로 설정해야 Ganache와 호환성을 유지한다.
3. 스마트 계약 배포 및 Python 스크립트 작성
- Remix IDE에서 Ganache RPC URL을 입력하여 환경 설정을 완료한 후,
Deploy
버튼을 클릭해 계약을 배포한다. app.py
스크립트에 계약 주소와 ABI를 입력하고,web3.py
를 사용해getCount()
함수와 공개 변수count
를 통해 데이터를 읽는다.- 오류 처리를 위해
try-except
블록을 사용하고, ABI 및 주소의 정확성을 점검해야 한다.
결론
- Ganache를 사용하여 로컬 테스트를 수행할 때, ABI와 계약 주소의 정확성을 반드시 확인해야 한다.
web3.py
스크립트는contract.functions.getCount().call()
과 같은 명시적인 함수 호출 및 공개 변수 접근을 통해 스마트 계약 데이터를 읽는다.- EVM 버전과 Ganache의 Hardfork 설정 일치가 성공적인 배포 및 실행의 핵심이다.