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 만 필요 합 니 다.모든 스마트 계약 과 상호작용 을 하려 면 두 가지 일 을 해 야 한 다 는 것 을 기억 하 세 요.
  • 스마트 계약 ABI
  • 스마트 계약 주소
  • 브라운 은 백 스테이지 에서 이런 일 을 많이 처리 하지만 우 리 는 수 동 으로 진행 할 수 있다.이것 은 웹 3.py 를 통 해 체인 계약 에서 읽 은 내용 입 니 다.우선 웹 3.py 를 설치 해 야 합 니 다.
    
    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 의 스마트 계약 배치 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기