스마트 계약 개발 보안을 위한 완벽한 환경 구축

스마트 계약 개발 보안을 위한 완벽한 환경 구축

반응형

내 블록체인 Everywhere 시리즈의 또 다른 작품에 오신 것을 환영합니다. 소프트웨어 개발과 블록체인 기술에 대한 반년 경험을 공유하는 곳입니다. 아마도 ERC20 토큰의 적절한 테스트와 고급 서명 테스트에 대한 마지막 부분을 보셨을 겁니다. 안전한 스마트 계약 개발이라는 주제를 이어가 프로그래밍 과정에서 항상 중요한 개발 환경에 대해 이야기하겠습니다.

말하자면 올바르게 준비된 개발 환경은 스마트 계약의 추가 개발 및 테스트에서 많은 문제를 없앨 수 있습니다. 첫 번째 중요한 점은 프레임워크(솔리디티에도 여러 가지가 있음)를 선택하는 것입니다. 요즘은 Truffle, Brownie, Hardhat, Wappl 및 기타 여러 가지 프레임워크가 있습니다. 플러그인과 설정이 가장 확장되어 있기 때문에 나는 좋은 오래된 트러플을 사용하는 것을 선호합니다. 이제 모든 Solidity 프로젝트의 시제품 역할을 하는 바로 사용할 수 있는 레포를 만드는 데 필요한 모든 도구를 준비하겠습니다. 항상 그랬듯이, 내 깃허브에서 완전한 레포(repo)를 확인해봐.

프로젝트 구조

Truffle 프로젝트의 일반적인 구조는 문서화가 우수하기 때문에 설명할 필요가 없습니다. 그럼 잠시 관찰해 봅시다. 여기 있습니다:

사용자 지정 변수용 .env 파일(Infura API 키 포함)

truffle-config.js 파일(개발 및 prod 네트워크를 위해 준비된 구성 포함)

기본 패키지.json 파일에 여러 명령어가 포함되어 있습니다. 이 내용은 기사의 뒷부분에서 다룰 것입니다.

추가 개발자 도구에 대한 여러 구성

설명서 생성에 대한 유틸리티가 있는 디렉토리

미리 커밋 후크가 있는 허스키 폴더

다시 한 번 선호도에 대한 질문입니다. 저는 즉시 사용할 수 있는 솔루션을 선호하기 때문에 Truffle 자체를 포함한 여러 스크립트와 기본 패키지를 설정하는 npm 패키지 파일에 익숙합니다. 또한 트러플 구성 파일과 전체 린터 세트에 여러 플러그인을 추가할 예정입니다. 각 요소를 자세히 조사해보자.

컴파일 및 테스트

새로운 내용은 없습니다. Truffle 구성 파일에 현재 Solidity 버전(0.8.6)이 설정되어 있습니다. 하지만 우리는 여기서 몇 가지 세부사항을 멈춰야 합니다. 구성에 개발, 테스트넷 및 메인넷 등 여러 네트워크가 포함되어 있습니다. 그리고 각 네트워크는 계정 및 연결 처리에 Infura API 키와 hdwallet-provider를 사용합니다.

테스트를 강화하기 위해 트러플 구성에는 가스 리포터 플러그인, 계약 크기 플러그인 및 테스트 적용 범위 플러그인의 여러 플러그인이 포함됩니다. 가스 리포터는 mocha testing framework를 실행하며 가스 추정 작업(이름으로 칭함)을 수행합니다.

솔리드리티 적용 범위는 장치 테스트의 품질을 높이는 인기 있고 가치 있는 장비입니다. 장치 테스트 범위에는 플러그인의 설명서에 따라 구축된 자체 구성(.solcover.js)도 필요합니다.

Truffle 구성 파일에도 플러그인이 포함되어 있습니다.

이러한 기능을 통해 장치 테스트 실행 후 다음과 같은 아름다운 사진을 볼 수 있습니다.

린터스

물론 코드 스타일과 품질 검증을 위한 도구 없이는 개발을 수행할 수 없습니다. 이러한 이유로 repo에는 스마트 계약에 대한 solhint(.solhint.json 구성 포함), JS 테스트 코드 및 추가 스크립트에 대한 eslint(.eslintrc.yml 구성 포함), Solidity 구문과 호환되는 더 예쁜 플러그인(.pretierc.json 구성 포함)이 포함됩니다.

또한 각 도구에 적합한 명령을 패키지 파일에 추가했습니다. 따라서 코드 스타일을 수동으로 확인하고 업데이트하거나 이러한 단계를 CI/CD 흐름에 포함할 수 있습니다.

그런데 모든 구문 및 코드 확인이 사전 커밋 후크에 이미 포함되어 있습니다.

사전 커밋 후크

코드 스타일을 확인하고, 가능한 모든 문제를 해결하며, 커밋에 대한 표준 규약을 준수합니다. 따라서 commitlint 패키지를 사용하여 git-flow 내에서 메시지의 정확성을 확인합니다.

모든 사전 커밋 작업은 허스키가 수행합니다. 따라서 다음 작업을 실행하는 린터에 대한 구성 파일이 있습니다.

메시지 검사를 커밋합니다.

설명서

Solidity에는 Doxygen과 같은 문서가 내장되어 있지 않습니다. 뿐만 아니라 네이티브 플러그인은 실제로 매우 약하고 원시적입니다.

그럼에도 불구하고 완벽한 솔루션인 solidity-docgen 유틸리티가 있습니다. 이 유틸리티에는 Doxygen 문자열을 찾기 위해 특수 템플릿으로 Solidity 파일을 구문 분석할 수 있는 기본 마크업 언어가 있습니다. 따라서 스마트 계약에 적절한 문서를 추가할 수 있습니다.

문서와 함께 제공되는 여러 템플릿을 사용하는 특수 명령(패키지에 포함)에 의해 완전한 인하 표시가 생성됩니다.

npx solidity-docgen -i./contracts -o./docs -t docgen -solc-module solc -H docgen/helpers.js

docgen 사용의 단점이 있지만 별도의 패키지로 solc(Solidity 컴파일러)를 설치해야 합니다.

보안

스마트 계약 개발에는 항상 몇 가지 보안 검사가 뒤따릅니다. 따라서 코드를 획득하기 위한 여러 정적 분석기 및 테스트 도구에는 취약성이 없습니다.

모든 프로젝트에 대한 권장 목록에 하나씩 있기는 하지만, 이 글에서 모든 도구에 대해 설명할 필요는 없습니다(이러한 도구 중 다수는 감사자 전용이기 때문입니다). Slither에 대해 이야기하고 있습니다. Slither는 표준 오류 및 코드 문제를 찾는 데 도움이 되는 널리 사용되는 정적 분석기입니다.

프로젝트에 구성이 포함된 별도의 도구로 설치하는 것이 좋습니다. 설명서에 따라 작성된 구성 파일에는 예외, 적절한 컴파일 및 확인할 파일 목록이 포함됩니다. 따라서 CI/CD에도 빌드할 수 있습니다.

패키지

그래서 저는 즉시 사용할 수 있는 솔루션을 갖추기 위해 필요한 개발 도구를 모두 패키지 파일에 넣습니다.

예를 들어 가나체, 트러플 자체, 모카, 차이 테스트 프레임워크를 포함했습니다. 이러한 구성을 통해 추가 단계 없이 패키지를 복제하고, npm 패키지를 설치하고, 개발을 즉시 시작할 수 있습니다.

물론 패키지 파일에는 장치 테스트를 위한 몇 가지 기본 라이브러리(앞서 언급한 플러그인, 린터 및 docgen 유틸리티)도 포함되어 있습니다. 결국 우리는 하나의 명령어에 구성요소를 설치하는 독립적인 솔루션을 가지고 있습니다.

또한 이 솔루션에는 OpenZeppelin 라이브러리(vanilla 및 업그레이드 가능한 라이브러리)가 모두 포함되어 있습니다.

명령 집합

패키지에 포함된 명령을 말하자면, 세 가지 범주로 나눌 수 있습니다.

설치. 실제로 "npm 설치" 스크립트는 설치 후 단계와 준비 단계 두 가지 명령만 따릅니다(둘 다 npm 문서에 따라 제공됨). 첫 번째는 개발 준비를 위한 계약을 컴파일합니다. 두 번째는 허스키 훅을 설정하여 최종 개발 단계를 수행합니다.

개발. 코드 컴파일, 아티팩트 생성, 로컬 Ganache 노드에서의 테스트 등 스마트 계약 개발의 모든 주요 단계를 다룹니다.

generate-abi 명령에 주의하십시오. generate-abi 명령은 예를 들어 프런트 엔드에서 사용할 수 있는 ABI 아티팩트를 제공합니다. 트러플은 유닛 테스트에도 필요합니다.

주변. 플러그인 사용(예: 장치 테스트 적용 범위의 계약 크기), 라이터, 보안 도구 사용 등에 대한 명령 집합입니다. 개발 품질 향상을 위한 추가 유틸리티 집합으로 이해할 수 있습니다.

따라서 개발 환경을 완성합니다. 개발 및 테스트 스크립트, 린터 세트, 보안 개발을 위한 유틸리티 등 필요한 모든 요소를 포함했습니다. 범용 repo가 완료되었고 쉽게 복제 또는 포크가 가능하며 프로토콜을 개발할 준비가 되었습니다.

나는 블록체인의 세계가 꽤 매력적이라고 생각한다. 나는 매일 이 분야 안에서 더 흥미로운 것들을 찾아 헤맨다. 그리고 저만큼 블록체인 개발에 관심이 있으시다면 다음 편인 블록체인 Everywhere 를 기다려보세요.

항상 그렇듯이, GitHub에서 완전한 작동 예를 찾을 수 있습니다.

이전 기사를 놓치지 마십시오.

from http://information-bada.tistory.com/102 by ccl(A) rewrite - 2021-07-28 04:00:42