ERC-190 스마트 컨트랙트 패키징 표준 (Ethereum Smart Contract Packaging Standard)

Final · 기타 · 2017-01-10 작성

스마트 컨트랙트 코드를 패키지로 묶어 배포하고 재사용하는 공통 형식을 정합니다. 패키지 매니저가 의존성을 고정하고 배포된 컨트랙트의 바이트코드를 검증할 수 있게 합니다.

왜 필요한가

패키징은 현대 소프트웨어 개발의 핵심 요소인데 이더리움 생태계에는 오랫동안 빠져 있었습니다. 코드를 묶어 공개하고 받아 쓰는 표준이 없으면 개발자가 이미 만들어진 코드를 찾아 재사용하기 어렵습니다. 원문은 ERC20 토큰을 대표 사례로 듭니다. 잘 감사(audit)된 재사용 가능한 토큰 컨트랙트가 몇 개 있는데도, 기존 코드를 찾아 쓰기 어려워 대부분의 개발자가 토큰 컨트랙트를 직접 새로 작성합니다. 이런 중복 작업은 생산성을 떨어뜨리고 검증되지 않은 코드가 늘어나 보안에도 나쁜 영향을 줍니다. 공통 패턴의 검증된 구현을 패키지로 쉽게 받아 쓸 수 있으면 생태계 전체의 생산성과 보안이 함께 올라가고 지갑 소프트웨어도 공개된 패키지를 읽어 그 안의 배포된 컨트랙트와 상호작용하는 인터페이스를 사용자에게 만들어 줄 수 있습니다.

심층 설명

명세 본문은 별도 저장소에서 관리합니다

이 ERC는 명세 전문을 본문에 싣지 않고 epm/epm-spec 저장소에서 따로 관리하며 1.0.0 버전을 가리킵니다. 명세의 단일 출처(single source of truth)를 유지하기 위해 문서를 ERC 안에 복사해 넣지 않았다고 밝힙니다. 명세는 릴리스 락파일(Release Lockfile)이라는 단일 문서가 핵심입니다. 저장소에는 릴리스 락파일 명세 문서와 이를 기계적으로 검증할 수 있는 JSON 스키마가 함께 제공됩니다. 패키지 매니저는 이 락파일을 읽어 패키지를 설치하고 검증합니다.

세 가지 패키지 유형을 다룹니다

이 표준이 다루는 패키지는 세 종류입니다. 첫째, 흔히 쓰는 owned 패턴처럼 다른 컨트랙트가 상속해 쓰는 베이스 컨트랙트를 담은 패키지입니다. 둘째, ERC20 토큰 컨트랙트처럼 그대로 배포해 쓸 수 있는 컨트랙트를 담은 패키지입니다. 셋째, 라이브러리나 서비스처럼 이미 배포된 컨트랙트를 담은 패키지입니다. 각 유형의 자세한 설명과 예시는 epm/epm-spec 저장소의 README에 있습니다.

결정적 빌드를 보장합니다

릴리스 락파일은 패키지가 언제나 같은 의존성과 소스 파일 집합으로 해석되도록 설계되었습니다. 소스 파일과 의존성을 모두 내용 주소화(content addressing) 방식으로 참조하기 때문에, 참조된 자원의 내용이 바뀌면 주소가 달라져서 참조가 가리키는 대상이 몰래 바뀌는 일을 막습니다. 어느 환경에서 설치하든 같은 패키지는 같은 코드로 풀립니다. 이것이 패키지 매니저가 구현할 수 있어야 하는 기능 중 첫 번째로 제시됩니다.

배포된 컨트랙트의 바이트코드를 검증할 수 있습니다

릴리스 락파일에는 패키지 매니저가 배포된 컨트랙트를 조사해, 그 바이트코드가 패키지 소스 코드를 컴파일하고 링크한 결과와 일치하는지 확인하는 데 필요한 정보가 담깁니다. 체인에 올라가 있는 코드가 공개된 소스에서 나온 것이 맞는지를 도구 차원에서 대조할 수 있게 하는 것입니다. 재사용하려는 컨트랙트가 주장하는 소스와 실제로 같은지 확인할 수 있으므로 보안에 직접 기여합니다.

멀티체인 배포와 신뢰 패키지를 지원합니다

하나의 패키지가 여러 체인에 걸친 배포를 정의할 수 있어 공개 메인넷과 테스트넷 양쪽의 주소를 함께 담을 수 있습니다. 또한 검증에 필요한 소스 코드 등 일부 요소를 뺀 패키지도 허용합니다. 이를 신뢰 패키지(trusted package)라고 하며 패키지 매니저가 검증을 수행하지 않는 특수한 상황을 위해 최소한의 구성만 담은 패키지를 만들 수 있게 한 것입니다.

주요 프레임워크가 공동으로 만들고 지원합니다

이 명세는 Truffle(Tim Coulter), Dapple(Denis Erfurt), Populus(Piper Merriam), Eris PM(RJ Catalano), Embark(Iuri Matias) 등 이더리움 개발 프레임워크 유지관리자들이 공동으로 개발했습니다. 원문 작성 시점 기준으로 이들 프레임워크와 Browser Solidity에서 ERC190 지원이 구현되었거나 진행 중이라고 밝힙니다. 이 제안의 상태는 Final로, 확정된 표준입니다.

ERC 원문 · ← ERCs