브라우니는 MythX 분석 API와 통합되어 프로젝트의 보안 검사를 자동화할 수 있습니다. MythX는 정적 분석, 동적 분석 및 상징적 실행을 사용하여 프로젝트의 취약점을 검사하는 스마트 계약 보안 서비스입니다. 다음과 같은 세 가지 모드에서 실행됩니다. Quick 모드: 나쁜 코딩 패턴과 낮은 복잡도 버그를 찾는 데 효과적입니다 (무료 사용자에게 제공됨). Standard 모드: 더 오래 걸리지만 복잡한 보안 문제를 해결할 수 있습니다 (Dev 사용자에게 제공됨). Deep 모드: 더 오래 걸리지만 깊이있고 숨겨진 취약점을 찾을 수 있습니다 (Pro 사용자에게 제공됨). MythX는 무료 및 유료 서비스를 모두 제공합니다. 작동 방식에 대해 자세히 알아보려면 Bernhard Mueller의 MythX..
상태 기반 테스트는 복잡한 시스템을 테스트하는 데 사용되는 속성 기반 테스팅의 고급 방법입니다. 상태 기반 테스트에서는 다양한 방식으로 결합할 수 있는 여러 가지 동작을 정의하고, 가설은 실패를 초래하는 이러한 동작의 순서를 찾으려고 시도합니다. 이는 가능한 상태가 많은 복잡한 계약이나 계약 간 상호 작용을 테스트할 때 유용합니다. Brownie는 hypothesis 프레임워크를 활용하여 상태 저장 테스트를 용합니다. 이 섹션의 많은 내용은 공식 hypothesis.works 웹사이트를 기반으로 합니다. 상태 기반 테스팅에 대해 더 자세히 알아보려면 다음 글을 읽어보시기를 추천합니다: David R. MacIver의 Rule Based Stateful Testing Nicholas Chammas의 Sol..
브라우니는 속성 기반 테스트를 수행하기 위해 hypothesis 프레임워크를 사용합니다. 이 섹션의 많은 내용은 공식 hypothesis.works 웹사이트를 기반으로 합니다. 속성 기반 테스트에 대해 더 알아보려면 이 소개 글 시리즈를 읽거나 공식 Hypothesis 문서를 참조할 수 있습니다. 속성 기반 테스트란? 속성 기반 테스트는 코드 내에서 엣지 케이스를 찾고 잘못된 가정을 발견하는 강력한 도구입니다. 속성 기반 테스트의 핵심 개념은 단일 시나리오에 대한 테스트를 작성하는 대신, 여러 시나리오를 설명하는 테스트를 작성하고 컴퓨터가 각 경우의 가능성을 탐색하도록 하는 것입니다. 이를 수작업으로 일일이 작성하는 대신 컴퓨터가 자동으로 수행합니다. 기본적인 프로세스는 다음과 같습니다: 스마트 계약 내..
브라우니에는 프로젝트를 테스트할 때 사용할 수 있는 사용자 정의 fixtures 및 markers가 포함되어 있습니다. 세션 fixtures 이러한 fixtures는 테스트 중 자주 사용되는 Brownie 객체에 빠르게 액세스할 수 있도록 제공됩니다. 이러한 객체에 익숙하지 않은 경우 목차에서 "핵심 기능"으로 나열된 문서를 읽으시기 바랍니다. accounts 활성 프로젝트에 대한 Accounts 컨테이너를 생성하여 로컬 계정과 상호 작용하는 데 사용됩니다. def test_account_balance(accounts): assert accounts[0].balance() == "100 ether" a accounts 픽스처의 약식 형태. def test_account_balance(a): assert ..
브라우니는 단위 테스트를 위해 pytest 프레임워크를 사용합니다. Pytest는 성숙하고 기능이 풍부한 테스트 프레임워크입니다. 최소한의 코드로 작은 테스트를 작성할 수 있으며 대규모 프로젝트에 확장성이 뛰어납니다. 테스트를 실행하려면: $ brownie test 이 문서에서는 기본 pytest 사용 방법을 간단하게 설명하며, 특히 Brownie와 관련된 기능에 중점을 둡니다. pytest의 많은 구성 요소는 부분적으로 또는 전혀 설명되지 않았습니다. pytest에 대해 더 자세히 알고 싶다면 공식 pytest 문서를 참조해야합니다 (https://docs.pytest.org/en/latest/). 시작하기 테스트 파일 구조 Pytest는 프로젝트의 테스트 스위트에 포함해야하는 함수를 찾기 위해 tes..
데이터 유형 브라우니는 일반적으로 나타내는 값을 간소화하기 위해 사용자 정의 데이터 유형을 사용합니다. Wei Wei 클래스는 이더리움의 양을 나타내는 값으로 사용됩니다. 이 클래스는 문자열, 과학적 표기법 및 16진 문자열을 wei로 표현된 정수로 변환할 수 있는 int 서브 클래스입니다. >>> Wei("1 ether") 1000000000000000000 >>> Wei("12.49 gwei") 12490000000 >>> Wei("0.029 shannon") 29000000 >>> Wei(8.38e32) 838000000000000000000000000000000 다른 값들도 비교, 덧셈, 뺄셈을 수행하기 전에 Wei**로 변환됩니다: >>> Wei(1e18) == "1 ether" True >>>..
TransactionReceipt 객체는 트랜잭션에 관한 정보와 디버깅을 돕는 다양한 메서드를 제공합니다. >>> tx = Token[0].transfer(accounts[1], 1e18, {'from': accounts[0]}) Transaction sent: 0xa7616a96ef571f1791586f570017b37f4db9decb1a5f7888299a035653e8b44b Token.transfer confirmed - block: 2 gas used: 51019 (33.78%) >>> tx 트랜잭션에 대한 사람이 읽기 쉬운 정보를 보려면 TransactionReceipt.info 메서드를 호출하세요. >>> tx.info() Transaction was Mined -----------------..