EIP-2028 트랜잭션 데이터 가스비 인하 (Transaction data gas cost reduction)

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

트랜잭션에 실어 보내는 데이터(콜데이터)의 가스비를 0이 아닌 바이트당 68가스에서 16가스로 내립니다. 0 바이트의 비용은 그대로 둡니다.

왜 필요한가

이더리움에서 트랜잭션에 데이터를 실어 보내려면 바이트마다 가스를 내야 합니다. 이 비용이 0이 아닌 바이트당 68가스로 높아서 한 블록에 담을 수 있는 데이터 양이 제한됐습니다. 특히 레이어 2(Layer 2) 확장 방식은 저장과 계산을 체인 밖으로 옮기는 대신 데이터 전송이 늘어납니다. STARK나 SNARK 같은 증명 시스템은 많은 트랜잭션을 처리한 계산이 올바르다는 사실을 증명 하나로 압축해 올리고 사기 증명(fraud proof) 방식은 머클 증명을 전송해야 하며 데이터 가용성을 위해 데이터 자체를 콜데이터로 메인 체인에 두는 방법도 있습니다. 콜데이터가 비싸면 이 모든 방식의 비용이 커집니다. 비용을 내리면 블록이 커져 전파가 느려지고 보안이 약해질 수 있다는 우려가 있었기 때문에, 저자들은 네트워크 지연과 보안을 잇는 수학 모델과 실측으로 이를 평가하고 그 결과를 근거로 16가스를 제안했습니다.

무엇이 바뀌나

지금

EIP-2028 이후

누구에게 영향이 있나

심층 설명

명세: 상수 하나를 바꿉니다

상수 하나만 바뀝니다. 트랜잭션 데이터에서 0이 아닌 바이트 하나당 내는 가스(GTXDATANONZERO)를 68에서 16으로 내립니다. 0 바이트의 가스비는 바뀌지 않습니다. EVM 명령어나 트랜잭션 형식은 그대로이고 수수료 계산에서 데이터 바이트에 곱하는 값만 달라집니다. 원문 요약은 이 수치를 수학 모델링과 실측 추정으로 뒷받침한다고 밝히고 있습니다.

동기: 온체인 확장성, 레이어 2, 무상태 클라이언트

원문은 세 가지 이유를 듭니다. 첫째, 콜데이터 대역폭이 커지면 블록 하나에 더 많은 데이터가 들어가 온체인 확장성이 좋아집니다. 둘째, 레이어 2가 싸집니다. STARK·SNARK 증명 시스템은 큰 트랜잭션 배치를 처리한 계산의 무결성을 증명 하나로 입증하고 사기 증명 방식은 머클 증명을 전송해야 하며 데이터 가용성을 메인 체인의 콜데이터로 해결하는 선택지도 있습니다. 셋째, 무상태 클라이언트(stateless client)입니다. 같은 모델이 무상태 클라이언트 체제의 상태 접근 가격을 정하는 데도 쓰일 예정이며 이는 State Rent 버전 4부터 제안됩니다. 그 체제에서 상태 접근 연산의 가스비는 블록 증명(block proof) 전송에 드는 추가 대역폭과 검증에 드는 추가 처리에 대략 비례해 오를 것으로 예상됩니다.

보안 모델: 블록 생성률, 체인 성장률, 지연

원문은 Sompolinsky와 Zohar, 그리고 Pass·Seeman·Shelat의 연구에서 쓰인 모델로 네트워크 지연과 보안을 연결합니다. lambda는 블록 생성률[1/s]로, 작업 증명(PoW) 해를 찾는 과정을 비율 lambda의 포아송 과정으로 봅니다. beta는 가장 무거운 체인에 새 블록이 더해지는 체인 성장률[1/s]이고 D는 새 블록이 채굴된 뒤 모든 채굴자가 그 위에서 채굴을 시작할 때까지 걸리는 블록 지연[s]입니다. 찾은 블록이 모두 메인 체인에 들어가지는 않으므로(엉클 블록) lambda >= beta이며 최장 체인 규칙을 쓰는 블록체인에서는 lambda >= beta >= lambda / (1 + D * lambda)가 성립합니다. 이 하한은 모든 노드 쌍의 지연이 최대치 D인 클리크 토폴로지라는 극단적 경우에 해당합니다. 지연이 없으면(D=0) beta가 lambda와 같아지는 것으로 모델의 일관성을 확인할 수 있습니다.

효율과 공격 비용

메인 체인을 재구성하려는 공격자는 beta보다 빠른 속도로 블록을 만들어야 합니다. 작업 증명 난이도를 고정하면 시스템의 전체 해시레이트는 lambda와 상관관계가 있으므로, beta / lambda를 시스템의 효율로 정의합니다. 전체 해시파워 중 메인 체인 생성에 실제로 쓰이는 비율이라는 뜻입니다. 앞의 부등식을 정리하면 beta / lambda >= 1 / (1 + D * lambda)라는 하한이 나옵니다. 콜데이터가 싸져 블록이 커지면 전송에 따른 네트워크 지연 D가 늘고 지연이 늘면 최신 상태를 아는 노드가 줄어 네트워크를 공격하는 비용이 낮아집니다. 이 EIP는 바로 이 관계를 정량적으로 따져 인하 폭을 정하려 한 제안입니다.

지연의 분해: 전송 지연과 처리 지연

지연 D는 채굴 노드의 위치와 수시로 바뀌는 네트워크 토폴로지에 달려 있어 직접 재기 어렵습니다. 선행 연구로 Decker와 Wattenhofer는 전파 시간이 블록 크기에 비례해 커진다는 것을, Vitalik Buterin은 효율과 밀접한 엉클 비율이 블록 크기에 따라 커진다는 것을 보였습니다. 원문은 지연을 D = D_t + D_p로 나눕니다. D_t는 블록 전송이 만드는 지연, D_p는 노드가 블록을 처리하며 생기는 지연입니다. 콜데이터가 두 요소에 미치는 영향이 서로 다르다고 가정하고 각각 시험합니다. 레이어 2와 무상태 클라이언트용 콜데이터는 대부분 머클 인증 경로여서 D_t는 크지만 D_p는 상대적으로 작기 때문에, 이 구분이 특히 중요합니다.

검증 계획, 참조 구현, 현재 상태

가스비를 정하기 위해 두 종류의 시험을 계획했습니다. 첫째는 이더리움 메인넷에서 하는 네트워크 시험으로, 블록 크기 증가가 D_p와 D_t, 전체 지연 D, 효율 비율, 채굴 풀 사이 지연에 미치는 영향을 추정합니다. 기존 데이터에 대한 회귀 시험과 극단적 상황을 만드는 스트레스 시험을 포함합니다. 둘째는 단일 노드에서 콜데이터 양과 일반 연산 한도에 따른 처리 시간을 재는 로컬 시험입니다. 참조 구현은 Parity와 Geth용 풀 리퀘스트로 제공됐습니다. 원문 상태는 Final로, 명세가 확정된 제안입니다.

EIP 원문 · ← EIPs