Python 의 개발 프레임 워 크 를 사용 하여 Brownie 배치 이 더 리 움 스마트 계약
나 는 어떤 개발 장면 에서 든 가능 한 한 Python 을 사용 할 수 있 기 를 바란다.블록 체인 개발 에서 자주 사용 하 는 것 은 이 더 리 움 가상 컴퓨터 스마트 계약 언어 인 Solity 로 좋 은 기능 을 많이 가지 고 Python 을 사용 하여 배치 할 수 있 습 니 다.처음에 Solity 를 사 용 했 을 때 저 는 Remix(https://remix.ethereum.org/)를 사 용 했 습 니 다.이것 은 강력 한 웹 IDE 로 스마트 계약 을 시각 화 할 수 있 습 니 다.Remix 는 훌륭 합 니 다.저 는 지금도 그것 을 사용 하지만 하나의 IDE 외 에 많은 다른 기능 을 실현 할 수 있 습 니 다.나중에 저 는 Truffle(https://www.trufflesuite.com/)과 HardHat(https://hardhat.org/guides/mainnet-forking.html)을 배우 기 시 작 했 습 니 다.그들 은 스마트 계약 을 배치 하 는 Node.js 프레임 워 크 입 니 다.
이것들 은 지금까지 내 가 본 주요 틀 이다.이 틀 들 은 모두 괜 찮 지만 나 는 Python 을 더 좋아한다.그래서 Brownie 와 web3.py:스마트 계약 을 배치 하 는 Python 프레임 워 크 와 블록 체인 개발 에 사용 되 는 오픈 소스 프로 토 콜 을 발견 한 후에 매우 흥분 했다.우 리 는 본문 에서 브라운 과 웹 3.py 를 동시에 소개 할 것 이다.
왜 파 이 썬 을 선 택 했 습 니까?
이렇게 많은 데이터 과학자,학자,핀 테 크 기구 가 Python 을 사용 하 는 데 는 이유 가 있다.용도 가 광범 위 하고 가 벼 운 개발 체험 을 가 지 며 각종 제3자 창고 와 밀접 하 게 결합 되 어 있다.최고급 defi 프로젝트 는 이 점 을 의식 하기 시작 했다.예 를 들 어 yearn.finance 와 같은 프로젝트 는 python 을 사용 하여 모든 생산 코드 를 배치 했다.Yearn.finance 는 매우 재능 있 는 금융 과학기술 엔지니어 들 이 경영 하 는데 그들 은 블록 체인 으로 전환 하여 그들 이 익숙 하고 좋아 하 는 Python 도 구 를 가지 고 있다.
브라운 이 뭐야?
브 라 우 니 는 Ben Hauser 가 만 든 Python 스마트 계약 의 오픈 소스 프레임 워 크 로'iamdefinitelyahuman'(중국어 로'비 절대 인간')이 라 고도 부 르 는 예술품 이다.이것 이 바로 yearn.finance 팀 이 스마트 계약 을 배치 하고 유지 하 는 도구 입 니 다.간단 한 명령 으로 항목 을 시작 한 다음 코드 를 사용 할 수 있 습 니 다.
첫 번 째 스마트 계약 을 Python 으로 배치 합 니 다.
1.Brownie 와 bake 설치
Brownie 는"baking"기능 을 가지 고 있 습 니 다.기본 코드 를 사용 하여 저장 소 를 시작 할 수 있 습 니 다.대부분의 항목 은 같은 부분 이 필요 하기 때문에 create-eth-app 과 유사 합 니 다.사용 을 시작 하려 면 다른 모든 Python 패키지 의 설치 방식 과 같 습 니 다.
pip install eth-brownie
로 컬 블록 체인 을 배치 하기 위 한 패 키 지 를 ganache-cli 에 설치 해 야 합 니 다.이 를 위해 npm 와 nodejs 를 설치 해 야 합 니 다.
npm install -g ganache-cli
준비 시작!많은 최고급 defi 프로젝트 들 이 자산 데 이 터 를 얻 기 위해 Chainlink-mix 를 사용 할 것 입 니 다.
brownie bake chainlink-mix
cd chainlink
ls 명령 을 통 해 프로젝트 의 구조 구 조 를 보 여 줍 니 다.Brownie 프로젝트 레이아웃
build : This is where the project keeps track of your deployed smart contracts and compiled contracts
contracts : The source code of your contracts, typically written in solidity or vyper
interfaces : A layout of interfaces you'll need to work with deployed contracts. Every interaction with a contract needs an ABI and an address. Interfaces are great ways to get a contract's ABI
scripts : Scripts we create to automate processes of working with our contracts
tests : Tests
brownie-config.yaml : This is where we have all the information for brownie to understand how to work with our smart contract. What blockchain do we want to deploy to? Are there any special parameters we want to set? All these are set in the config file.
requirements.txt,README.md,LICENSE 와.gitignore 는 무시 할 수 있 습 니 다.뒤에서 그들의 용 도 를 알 게 될 것 입 니 다.2.환경 변수 설정
블록 체인 개발 에 익숙 하 다 면 로 컬 블록 체인,테스트 네트워크 블록 체인 과 메 인 네트워크 블록 체인 이 모두 다른 것 임 을 알 수 있 습 니 다.우 리 는 실제 실시 간 블록 체인 네트워크 와 상호작용 을 할 수 있 도록 테스트 네트워크 에 배치 할 것 이다.WEB3 가 필요 합 니 다.INFURA_PROJECT_ID,Infura 계 정 생 성 을 통 해 이 WEB3 검색 가능INFURA_PROJECT_ID。이것 이 바로 우리 가 테스트 네트워크 에 연결 하 는 데 쓰 이 는 물건 이다.우 리 는 또한 metamask 나 다른 웹 3 이 더 리 움 지갑 을 얻 고 ETH 로 투 자 를 할 것 이다.이 demo 에 대해 우 리 는 Kovan 테스트 네트워크 를 사용 해 야 한다.
LINK 자금 에 관 한 부분 을 뛰 어 넘 을 수 있 습 니 다.저 희 는 testnet ETH 만 필요 합 니 다.우리 도 Ropsten 을 사용 하지 않 고 Kovan 을 사용 합 니 다.지갑 이 있다 면https://gitter.im/kovan-testnet/faucet에서 Kovan Ether 를 가 져 오 십시오.
설치,설정,Metamask
Metamask 지갑 이 있 으 면 비밀 키 를 PRIVATE 로 내 보 낼 수 있 습 니 다.KEY 환경 변수.환경 변 수 를 설정 하 는 정 보 를 읽 습 니 다.이것 이 여전히 당신 을 곤 혹 스 럽 게 하고 테스트 지갑 일 뿐 이 라면 코드 에 있 는 PRIVATE 를 마음대로 사용 하 십시오.KEY 를 비밀 키 와 WEB3 로 변경INFURA_PROJECT_ID。
3.스마트 계약 배치
스 크 립 트 폴 더 에 deploy 라 는 이름 이 있 습 니 다.price_consumer_v3.py 의 스 크 립 트,이 스 크 립 트 는 우리 의 스마트 계약 을 배치 합 니 다.이 계약 은 이 더 리 움 의 달러 가격 을 읽 습 니 다.이 계약 의 기능 과 배 치 를 더 쉽게 알 고 싶다 면 배치 가격 구독 계약 에 관 한 Chainlink 튜 토리 얼(https://www.twilio.com/blog/2017/01/how-to-set-environment-variables.html)을 수시로 확인 하 십시오.brownie run 은 스 크 립 트 를 실행 할 수 있 는 명령 입 니 다.brownie 만 실행 하면 모든 명령 의 목록 을 볼 수 있 습 니 다.
brownie run scripts/price_feed_scripts/deploy_price_consumer_v3.py --network kovan
--network kovan 은 우리 가 사용 할 네트워크 를 설정 할 수 있 도록 해 준다.우 리 는 kovan testnet 를 사용 하여 이 시연 을 진행 하고 있 습 니 다.코 반 ETH 가 필요 할 겁 니 다!많은 출력 내용 을 얻 을 수 있 지만 다음 과 같은 결 과 를 얻 을 수 있 습 니 다:
Running 'scripts/price_feed_scripts/deploy_price_consumer_v3.py::main'...
Transaction sent: 0x23d1dfa3937e0cfbab58f8d5ecabe2bfffc28bbe2349527dabe9289e747bac56
Gas price: 20.0 gwei Gas limit: 145600 Nonce: 1339
PriceFeed.constructor confirmed - Block: 22721813 Gas used: 132364 (90.91%)
PriceFeed deployed at: 0x6B2305935DbC77662811ff817cF3Aa54fc585816
만약 이 방법 이 정상적으로 운행 된다 면,우 리 는 kovan etherscan 으로 옮 겨 서 우리 가 배치 한 계약 을 찾 을 수 있 습 니 다.위의 링크 는 이 예제 에 배 치 된 계약 을 보 여 줍 니 다.4.스마트 계약 읽 기
현재 우 리 는 이미 스마트 계약 을 배 치 했 기 때문에 우 리 는 방금 배 치 된 계약 에서 이 태 방 의 가격 을 읽 을 수 있다.다른 스 크 립 트 를 실행 합 니 다:
brownie run scripts/price_feed_scripts/read_price_feed.py --network kovan
다음 과 같은 출력 가 져 오기:
Brownie v1.12.2 - Python development framework for Ethereum
ChainlinkProject is the active project.
Running 'scripts/price_feed_scripts/read_price_feed.py::main'...
Reading data from 0x6B2305935DbC77662811ff817cF3Aa54fc585816
62322000000
Where 62322000000 is the current price of ETH in USD! Solidity doesn't understand decimals, and we know that this example has 8 decimals, so the price is $623.22 .
방금 Python 과 Brownie 를 사용 하여 첫 번 째 스마트 계약 을 배 치 했 습 니 다!웹 3.py 사용 하기
Brownie 는 웹 3.py 라 는 도 구 를 사용 하여 개발 을 더욱 쉽게 할 수 있 습 니 다.그러나 기지 가 있다 면 저 희 는 프레임 워 크 없 이 계약 을 직접 사용 할 수 있 습 니 다.웹 3.py 는 원본 패키지 로 서 우 리 는 그것 을 사용 하여 계약 을 더욱 직접적 으로 처리 할 수 있다.이 를 위해 서 는 위 에 있 는 Kovan infura 프로젝트 ID 만 필요 합 니 다.모든 스마트 계약 과 상호작용 을 하려 면 두 가지 일 을 해 야 한 다 는 것 을 기억 하 세 요.
pip install web3
그런 후에 우 리 는 파일 에서 다음 과 같은 내용 을 실행 할 수 있다.
web3 = Web3(Web3.HTTPProvider('https://kovan.infura.io/v3/<infura_project_id>'))
abi = '[{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]'
addr = '0x9326BFA02ADD2366b30bacB125260Af641031331'
contract = web3.eth.contract(address=addr, abi=abi)
latestData = contract.functions.latestRoundData().call() print(latestData)
상기 조작 을 실행 한 후,우리 콘 솔 에서 달러 단위 의 ETH 의 최신 가격 을 인쇄 할 것 입 니 다.문제 가 있 는 지 확인 하려 면 Chainlink 문 서 를 보십시오.결론.
웹 3.py 와 브라운 에 대한 더 많은 정 보 를 문서 에서 알 수 있 습 니 다.이 두 항목 은 모두 개원 한 것 이 므 로 누구나 공헌 할 수 있다!
https://docs.chain.link/docs/beginners-tutorial/
https://github.com/eth-brownie/brownie
이상 은 Python 의 개발 프레임 워 크 인 Brownie 를 사용 하여 이 더 리 움 스마트 계약 을 배치 하 는 상세 한 내용 입 니 다.Python 의 스마트 계약 배치 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.