EIP-1108 alt_bn128 프리컴파일 가스비 인하 (Reduce alt_bn128 precompile gas costs)

최종 확정 · 수수료·가스 · 원문 상태 Final · 2018-05-21 작성

타원곡선 연산 프리컴파일(ECADD, ECMUL, 페어링 검사)의 가스비를 실제 연산 속도에 맞게 크게 내립니다. ECADD는 500에서 150으로, ECMUL은 40,000에서 6,000으로 낮아집니다.

왜 필요한가

이더리움에는 자주 쓰는 암호 연산을 미리 내장해 둔 프리컴파일(precompile)이라는 특수 컨트랙트가 있습니다. 그중 alt_bn128 타원곡선 연산 세 가지(덧셈, 곱셈, 페어링 검사)는 영지식 증명 같은 프라이버시·확장성 기술의 핵심 재료입니다. 그런데 2018년에 Geth가 Cloudflare의 bn256 라이브러리로 바꾸면서 이 연산들의 실제 계산 비용이 대략 10분의 1 수준으로 떨어졌고 Parity 클라이언트도 bn 라이브러리 최적화로 크게 빨라졌습니다. 가스비는 연산이 네트워크에 주는 부담을 반영해야 하는데, 요금표는 느리던 시절 기준 그대로라 실제보다 훨씬 비싸게 책정된 상태였습니다. 이 때문에 AZTEC, ZEther, 롤업 같은 프로토콜이 메인넷에서 쓸 수 있는 범위가 가스비에 막혀 좁아져 있었습니다. 이 EIP는 요금표를 현실에 맞게 고쳐 이 병목을 풉니다.

무엇이 바뀌나

지금

EIP-1108 이후

누구에게 영향이 있나

심층 설명

가스비 변경 내역

주소 0x06의 ECADD는 500에서 150으로, 주소 0x07의 ECMUL은 40,000에서 6,000으로 내립니다. 주소 0x08의 페어링 검사는 80,000 * k + 100,000에서 34,000 * k + 45,000으로 내립니다(k는 페어링 수). ECADD와 ECMUL의 기존 값은 EIP-196, 페어링 검사의 기존 값은 EIP-197에 정의된 것입니다. 새 가스비는 두 클라이언트 중 성능이 낮은 쪽인 Parity의 벤치마크에 맞춰 조정했습니다.

가스비 산정 방법: ecrecover를 기준자로 사용

ecrecover 프리컴파일 1회 실행이 116마이크로초 걸리는 것을 측정하고 그 가스비 3,000이 공정하다고 가정해 마이크로초당 25.86 가스라는 단가를 얻었습니다. 페어링 프리컴파일은 1개 계산에 3,037마이크로초, 10개 계산에 14,663마이크로초가 걸렸고 여기서 고정 비용 1,745마이크로초와 페어링당 1,292마이크로초라는 선형 구조를 뽑아냈습니다. 알고리즘 구조상 고정 비용과 페어링당 비용으로 나눌 수 있기 때문입니다. 이 단가를 적용하면 약 35,000 * k + 45,000이라는 공식이 나오고 최종 요금표에는 34,000 * k + 45,000으로 반영되었습니다.

속도가 빨라진 배경

공식 Go 레퍼런스 구현(go-ethereum)이 ECADD, ECMUL, 페어링 검사의 기반 라이브러리를 Cloudflare의 bn256 라이브러리로 교체하면서 상수항을 제외한 계산 비용이 전반적으로 대략 한 자릿수(10배) 줄었습니다. Parity 클라이언트가 쓰는 bn 크레이트도 2018년과 2019년 최적화로 성능이 크게 올랐고 저자들이 직접 벤치마크해 이전 결과와 비교했습니다. 즉 이 EIP는 새 알고리즘 도입이 아니라 이미 빨라진 클라이언트 성능을 요금표에 반영하는 것입니다.

혜택을 보는 프로토콜들

AZTEC 프로토콜은 이 프리컴파일로 영지식 거래 로직을 가진 기밀 토큰을 만듭니다. 기밀 가중 투표, 암호화된 주문의 부분 체결(프라이빗 DEX), 익명 화이트리스트 증명, 메인넷과 L2 사이의 기밀 지급 채널 등도 계획하고 있으나 현재 가스비가 실용성의 한계선입니다. Matter Labs는 초당 500 트랜잭션 처리량의 확장 솔루션 Ignis를, Rollup 프로젝트는 별도 합의 계층 없이 메인넷이 정당성을 보증하는 L2를 이 프리컴파일로 구현합니다. ZEther는 ECADD와 ECMUL로 기밀 트랜잭션을 만듭니다. zk-SNARK 기반 프로토콜은 검증 비용 인하에 더해 여러 증명을 묶어 검증하는 배칭이 가능해지고 큰 회로를 작은 회로 여러 개로 쪼개 만들기도 쉬워집니다.

저장을 계산으로 바꾸는 효과

Rollup이나 Ignis 같은 솔루션은 개별 트랜잭션 묶음을 zk-SNARK 증명 하나로 압축하고 체인 위 상태를 여러 계정 잔액 대신 작은 머클 루트 하나로 표현합니다. zk-SNARK 검증 비용이 내려가면 이런 솔루션을 더 넓은 용도에 배포할 수 있고 블록당 처리 가능한 롤업 방식 트랜잭션 수도 늘어납니다. 비싼 온체인 저장 공간을 싸진 계산으로 대체하는 길이 넓어집니다.

배포 준비 상태와 EIP-1829의 관계

Parity와 Geth 모두 인하된 가스비를 정당화할 만큼 빠른 암호 라이브러리를 이미 탑재하고 있어 새 라이브러리 배포가 필요 없습니다. 참고 구현으로 Parity bn 크레이트(rust), Geth bn256 라이브러리(golang), MCL(C++), Libff(C++)가 있으며 모두 Parity 벤치마크와 같거나 더 빠릅니다. 이 EIP를 이스탄불(Istanbul) 포크에 제안한 목적은 범용 타원곡선 연산을 다루는 EIP-1829를 보완해 더 발전된 해법이 개발되는 동안 비싼 암호 연산 문제의 즉각적인 해결책을 제공하는 것입니다. 기반 알고리즘 자체는 바뀌지 않으므로 추가 테스트 케이스는 지정하지 않았습니다. 이 EIP의 상태는 Final로 확정되어 있습니다.

EIP 원문 · ← EIPs