브라우니: 이더리움의 스마트 계약 인프라
편집자 주: 이 기사의 출처는Kicking Horse River 정량화(ID: gh_e9da2a6cbc62), 승인을 받아 Odaily에서 재인쇄했습니다.
편집자 주: 이 기사의 출처는
Kicking Horse River 정량화(ID: gh_e9da2a6cbc62)
Kicking Horse River 정량화(ID: gh_e9da2a6cbc62)
, 승인을 받아 Odaily에서 재인쇄했습니다.
브라우니라고 하면 다크 초콜릿 맛이 나는 맛있는 작은 케이크라고 생각하지 마세요. 브라우니는 이더리움 스마트 계약을 개발하는 데 사용되며 견고성과 사용 편의성이 매우 높으며 종종 다음과 같은 용도로 사용됩니다.
배포: 많은 계약을 블록체인에 자동으로 배포하여 필요한 트랜잭션을 초기화하거나 통합합니다.
상호 작용: 스크립트를 작성하거나 콘솔을 사용하여 메인넷의 계약과 상호 작용하거나 로컬 환경에서 빠른 테스트를 수행합니다.
디버깅: 트랜잭션이 복구될 때 자세한 정보를 얻어 문제를 신속하게 찾아낼 수 있습니다.
테스트: Python에서 단위 테스트를 작성하고 스택 추적 분석을 기반으로 테스트 범위를 평가합니다.
다음으로 두 개의 외부 함수인 getValue와 setValue만 노출하는 매우 간단한 스마트 계약을 Solidity에서 생성해 보겠습니다. 이 스마트 계약을 smart_contract.sol 파일에 저장합니다.
다음으로 브라우니를 통해 이 스마트 계약을 배포하고 상호 작용합니다.
설정
이 시도는 Python3.7 및 virtualenv를 사용하여 환경을 격리합니다. Python3.7이 설치되어 있지 않으면 아래 단계를 따를 수 있습니다.
우리는 이더리움 개발을 위한 개인용 블록체인인 Ganache를 사용할 것입니다. 대신 ethereum-testrpc를 설치할 수도 있지만 그렇게 하면 GUI를 실행할 수 없습니다. Ganache를 설치할 때 단계를 따르십시오.
Solidity 프로젝트를 위한 가상 환경을 만듭니다. 이것이 생성되고 이름이 TestBrownie입니다. 브라우니를 설치합니다.
빈 프로젝트를 초기화하려면 새 폴더를 생성하여 시작하십시오. 해당 폴더에 다음을 입력합니다.
프로젝트 구조
각 브라우니 프로젝트에는 다음 폴더가 포함되어 있습니다.
contracts/: 계약 소스
interface/: 인터페이스 소스
scripts/: 배포 및 상호 작용을 위한 스크립트
tests/: 프로젝트를 테스트하기 위한 스크립트
brownie-config.yaml: 프로젝트 구성 파일
아래 폴더 역시 브라우니에서 생성한 것으로 프로젝트 관리를 위해 내부적으로 사용되며 수정하거나 삭제할 수 없습니다.
build/: 컴파일러 아티팩트 및 단위 테스트 결과와 같은 프로젝트 데이터
reports/: GUI에서 사용되는 JSON 보고서 파일
엮다
smart_contract.sol은 계약 디렉토리에 스마트 계약을 복사합니다. 계약/프로젝트 하위 폴더의 모든 계약 소스를 컴파일합니다.
컴파일러가 실행될 때마다 Brownie는 각 계약 소스의 해시를 기존 컴파일된 버전의 해시와 비교합니다. 계약이 변경되지 않은 경우 다시 컴파일되지 않습니다. 전체 프로젝트를 강제로 다시 컴파일하려면 브라우니 컴파일 --all을 사용하십시오.
Solidity 계약을 다른 버전으로 컴파일하려면 .sol 파일의 사용 지침에 계약을 언급하기만 하면 됩니다. 없으면 자동으로 설치됩니다. 여기서 주목해야 할 점: 인코더 설정은 brownie-config.yaml에 있습니다.
Byzantium: Solidity <=0.5.4
Petersburg: Solidity >=0.5.5< =0.5.12
Istanbul: Solidity >=0.5.13, Vyper
컴파일러 설정을 수정하면 프로젝트가 완전히 다시 컴파일됩니다.
구성 파일에 컴파일러 버전이 설정되어 있으면 해당 버전이 프로젝트의 모든 계약을 컴파일하는 데 사용됩니다. 버전은 0.xx 형식의 문자열로 제공되어야 합니다.
version을 null로 설정하면 브라우니는 컨트랙트별 버전 사용 프로그램을 보고 설치된 최신 매칭 컴파일러 버전을 사용합니다.
evm_version과 관련하여 Brownie는 컴파일러에 따라 규칙 집합을 설정합니다.
EVM 버전을 수동으로 설정할 수도 있습니다. 유효한 옵션은 byzantium, constantinople, petersburg 및 istanbul입니다.Ethereum Classic 규칙 세트 atlantis 및 agharta도 사용할 수 있으며, 이들은 컴파일러에 전달되기 전에 동등한 이더리움으로 변환됩니다.
참고: 브라우니는 Solidity 버전 >= 0.4.22 및 Vyper 버전 0.1.0-b16을 지원합니다.
성공적인 컴파일 후 Brownie는 builds/contract 폴더에 SimpleContract.json 파일을 생성합니다.
전개하다
brownie-config.yaml을 열면 네트워크 섹션이 있습니다. 기존 네트워크를 사용자 지정하거나 네트워크 아래에 새 블록을 만들 수 있습니다. 여기서는 포트 7545에서 실행되는 Ganache GUI가 사용됩니다.
네트워크 아래에 개인 블록을 만듭니다.
이 파일을 저장합니다. 이제 브라우니 콘솔을 사용하여 컴파일된 스마트 계약을 배포합니다. 일반 Python 인터프리터와 매우 유사합니다. 프로젝트 폴더에서 다음을 입력하여 로드합니다.
Ganache GUI에 표시되는 계정으로 출력의 계정을 교차 확인합니다.
각 개별 계정은 잔액 쿼리 또는 ETH 전송과 같은 작업을 수행할 수 있는 계정 개체로 표시됩니다.
배포 가능한 모든 계약 및 라이브러리에는 새 계약을 배포하고 기존 계약에 액세스하기 위한 ContractContainer가 있습니다. 컴파일된 모든 계약은 동일한 이름의 변수로 사용할 수 있습니다.
다음 계정으로 계약 0 배포:
SimpleContract를 입력하면 SimpleContract가 ContractContainer 개체의 배포된 인스턴스 목록으로 표시됩니다.
상호 작용
이 계약에서 사용 가능한 방법을 참조하십시오.
스마트 계약에서 변수를 설정하여 시작하십시오.


