- 다른 사람이 작성한 코드 아이디어를 쉽게 가져와서 빌드할 수 있음
- 프로젝트 간에 중복된 코드를 줄일 수 있음
- 프로젝트와 다른 프로젝트 간의 상호작용을 확인하는 단위 테스트 작성 가능
브라우니 패키지 매니저는 명령줄에서 사용할 수 있습니다:
$ brownie pm
패키지 설치
브라우니는 ethPM 및 Github에서 패키지 설치를 지원합니다.
Github에서 설치
패키지를 설치하는 가장 쉬운 방법은 Github 저장소에서 설치하는 것입니다. 브라우니에서 Github 저장소는 다음 기준을 충족하면 패키지로 간주됩니다:
- 저장소는 하나 이상의 태그 버전을 가지고 있어야 합니다. 저장소는
- 하나 이상의 Solidity 또는 Vyper 소스 파일이 포함된 contracts/ 폴더를 포함해야 합니다.
저장소는 브라우니를 구현할 필요가 없습니다. Truffle이나 Embark와 같은 프레임워크를 사용하는 많은 인기 있는 프로젝트가 브라우니 패키지로 추가될 수 있습니다.
Github에서 패키지를 설치하려면 패키지 ID를 사용해야 합니다. 패키지 ID는 조직 이름, 저장소 및 버전 태그의 이름으로 구성됩니다. 패키지 ID는 대소문자를 구분하지 않습니다.
[ORGANIZATION]/[REPOSITORY]@[VERSION]
API 액세스 토큰(예: 개인 액세스 토큰)을 사용하여 개인 Github 저장소에서 설치하는 것도 가능합니다. 이를 위해서는 GITHUB_TOKEN
환경 변수를 username:ghp_token_secret
형식으로 브라우니에 제공해야 합니다. 또한 https://docs.github.com/en/rest/overview/other-authentication-methods#basic-authentication를 참조하세요.
예시
OpenZeppelin contracts 버전 3.0.0
을 설치하려면:
$ brownie pm install OpenZeppelin/openzeppelin-contracts@3.0.0
AragonOS 버전 4.0.0
을 설치하려면:
$ brownie pm install aragon/aragonos@4.0.0
ethPM에서 설치하기
Ethereum Package Manager (ethPM)은 EVM 스마트 컨트랙트 및 프로젝트를 배포하는 데 사용되는 분산 패키지 관리자입니다.
ethPM 패키지는 ABI, 소스 코드, 바이트 코드, 배포 데이터 및 스마트 컨트랙트 아이디어를 구성하는 기타 정보를 모두 포함하는 JSON 객체입니다. ethPM 사양은 이러한 모든 데이터를 구조화된 JSON 형식으로 저장하는 스키마를 정의하여 사양을 지원하는 도구 및 프레임워크 간에 스마트 컨트랙트 아이디어를 빠르고 효율적으로 전송할 수 있도록합니다.
ethPM 패키지를 얻으려면 패키지 이름과 사용 가능한 레지스트리의 주소를 알아야합니다. 이 정보는 레지스트리 URI를 통해 전달됩니다. 레지스트리 URI는 다음 형식을 사용합니다:
ethpm://[CONTRACT_ADDRESS]:[CHAIN_ID]/[PACKAGE_NAME]@[VERSION]
스네이크 차머스(Snake Charmers)는 ethPM 레지스트리 탐색기를 유지 관리하여 레지스트리 URI를 얻을 수 있습니다.
예시
스네이크 차머스의 Zeppelin 레지스트리에서 제공되는 OpenZeppelin의 Math 패키지를 설치하려면:
$ brownie pm install ethpm://zeppelin.snakecharmers.eth:1/math@1.0.0
스네이크 차머스의 DeFi 레지스트리에서 Compound Protocol의 버전 2를 설치하려면:
$ brownie pm install ethpm://defi.snakecharmers.eth:1/compound@1.1.0
패키지 작업
설치된 패키지 보기
brownie pm list
를 사용하여 현재 설치된 패키지를 볼 수 있습니다. 위에서 제공된 모든 예제를 설치한 후, 출력은 다음과 같습니다.
$ brownie pm list
Brownie - 이더리움을 위한 파이썬 개발 프레임워크
현재 설치된 패키지는 다음과 같습니다.
OpenZeppelin
└─OpenZeppelin/openzeppelin-contracts@3.0.0
aragon
└─aragon/aragonOS@4.0.0
zeppelin.snakecharmers.eth
└─zeppelin.snakecharmers.eth/access@1.0.0
defi.snakecharmers.eth
└─defi.snakecharmers.eth/compound@1.1.0
패키지 복제
brownie pm clone [경로]
를 사용하여 패키지의 내용을 다른 폴더로 복사합니다. [경로]가 지정되지 않은 경우 패키지는 현재 디렉토리에 복제됩니다. 이것은 패키지의 파일 구조를 탐색하거나 기존 패키지 위에 프로젝트를 빌드하려는 경우에 유용합니다.
Aragon 패키지를 현재 폴더로 복사하려면:
$ brownie pm clone aragon/aragonOS@4.0.0
프로젝트에서 패키지 사용하기
패키지에서 소스 가져오기
프로젝트 내 소스를 가져오는 것과 마찬가지로 설치된 패키지에서 소스를 가져올 수 있습니다. 루트 경로는 패키지 이름을 기반으로하며 brownie pm list
를 통해 얻을 수 있습니다.
예를 들어, OpenZeppelin contracts에서 SafeMath
를 가져오려면:
import "OpenZeppelin/openzeppelin-contracts@3.0.0/contracts/math/SafeMath.sol";
프로젝트 구성 파일의 remappings
필드를 사용하여 가져오기 경로를 수정할 수 있습니다. 자세한 내용은 설치된 패키지 리매핑을 참조하십시오.
테스트에서 패키지 사용하기
pm
fixture는 테스트 중 설치된 패키지에 액세스 할 수 있습니다. 프로젝트 ID로 호출하면 Project
객체를 반환합니다:
def test_with_compound_token(pm):
compound = pm('defi.snakecharmers.eth/compound@1.1.0').CToken
자세한 정보는 유닛 테스트 문서를 참조하십시오.
프로젝트 종속성 선언
종속성은 프로젝트 구성 파일에 dependencies
필드를 추가하여 선언됩니다.
dependencies:
- aragon/aragonOS@4.0.0
- defi.snakecharmers.eth/compound@1.1.0
Brownie는 프로젝트 컴파일 전에 나열된 종속성을 설치하려고 시도합니다. 이는 프로젝트가 지역 환경 외부에서 사용될 수 있는 경우 유용합니다.
'블록체인 (Block Chain) > 이더리움' 카테고리의 다른 글
[브라우니 (Brownie)] 9. 계정으로 작업하기 (0) | 2023.06.16 |
---|---|
[브라우니 (Brownie)] 8. 브라우니 GUI (0) | 2023.06.16 |
[브라우니 (Brownie)] 6. 컨트랙트와 상호작용하기 (0) | 2023.06.16 |
[브라우니 (Brownie)] 5. 컨트랙트 컴파일하기 (0) | 2023.06.16 |
[브라우니 (Brownie)] 4. 프로젝트 구조 (0) | 2023.06.16 |