이더리움 EIP-8037·8038 가스 개편, 고정 가스 예산 쓰는 컨트랙트부터 위험해진다

Google 검색에서
선호 출처로 추가

선호 출처로 추가하면 Google 주요 뉴스에 위키트리 기사가 더 자주 표시됩니다.

이더리움 Glamsterdam의 Hoodi 포크가 가스 가정 8가지 문제로 보류됐다.
재단은 개발자에게 점검을 요청했고 Hegota 개발은 병행된다.

이더리움 로고 옆에서 나무 블록 탑을 쌓는 사람의 모습 — AI 자료 이미지
이더리움 로고 옆에서 나무 블록 탑을 쌓는 사람의 모습 — AI 자료 이미지

이더리움 개발진이 차기 업그레이드 Glamsterdam의 Hoodi 테스트넷 포크를 보류했다. 이더리움 재단은 11월 6일(현지시각) 블로그 글에서 보안업체 체인시큐리티(ChainSecurity)가 테스트 중 Glamsterdam 이후 취약해질 수 있는 프로젝트를 찾았다고 밝혔다. EIP-8037과 EIP-8038이 가스(거래·연산 수수료) 부과 방식을 바꾸면서 기존 앱이 기대던 가정 8가지가 깨질 수 있다는 내용이다.

네트워크가 멈춘 것은 아니다. 일부 기존 애플리케이션이 가스 계산 방식에 대한 가정에 의존해 오작동할 수 있다는 호환성 문제가 불거진 것이다. 재단은 자체 감사만으로는 모든 프로젝트를 확인할 수 없다며 컨트랙트 개발자와 감사자에게 직접 점검을 요청했다.

Hoodi 포크 보류와 Hegota 병행 개발

이더리움 재단 블로그에 따르면 핵심 개발자 회의체인 올코어데브(ACD)는 문제가 해결될 때까지 Hoodi 포크를 진행하지 않기로 했다. 하드포크 절차 자체를 늦추겠다는 결정이다. 재단은 후속 업그레이드인 Hegota 작업은 영향을 받지 않고 병렬로 계속된다고 설명했다.

Hoodi의 원래 활성화 일정은 UTC 기준 10월 26일 17시 42분 48초(한국시간 27일 오전 2시 42분 48초)였다. 크립토슬레이트(CryptoSlate)에 따르면 이 일정과 함께 예정됐던 테스트넷 가스 한도 2억 상향은 10월 22일에 연기됐다. 한 보도에 따르면 이 연기로 Amsterdam 실행 계층과 Gloas 합의 계층의 Hoodi 활성화가 일정에서 빠졌고 대체 날짜는 아직 발표되지 않았다.

Glamsterdam은 이미 Sepolia 테스트넷에서 10월 6일에 활성화돼 가스 한도 2억 조건으로 확장성 관련 변경을 시험받고 있다. 이 업그레이드에는 합의 프로토콜 안에 블록 생성 역할을 넣는 EIP-7732(제안자·빌더 분리)와 병렬 실행을 돕는 EIP-7928(블록 단위 접근 목록)도 들어 있다. 메인넷 활성화 시점은 정해지지 않았다.

가격 차트 위에 놓인 이더리움 문양 은색 동전과 노트북 — 이해를 돕는 AI 자료 이미지
가격 차트 위에 놓인 이더리움 문양 은색 동전과 노트북 — 이해를 돕는 AI 자료 이미지

가스 회계를 바꾸는 EIP-8037·8038

EIP-8037은 영구적으로 남는 블록체인 상태 데이터를 새로 만드는 비용을 높이고, 이 상태 증가분을 일반 실행 비용과 따로 계량한다. EIP-8038은 이미 존재하는 상태에 접근하고 쓰는 비용을 다시 책정한다. 크립토슬레이트는 처리량을 높이면서 노드가 보관해야 하는 데이터를 통제하려는 목적이라고 설명했다.

재단이 정리한 깨지는 가정은 모두 8가지다. 크립토슬레이트에 따르면 가격에 관한 가정 3개(고정 예산과 예비분 포함)와 가스 반환·실패 처리·정산·위임에 관한 회계 가정 5개로 나뉜다. 재단 저장소에 따르면 지금까지 가장 흔하게 발견된 문제는 고정 가스 예산과 가스 예비분에 관한 것이다. 미리 정해진 거래 비용에 의존하는 컨트랙트가 특히 해당한다.

체인시큐리티가 10월 13일 내놓은 분석은 외부 호출이 실패한 뒤에도 계속 실행되는 컨트랙트를 다뤘다. 기존 규칙에서는 실패한 작업이 후속 명령을 끝내기에 부족한 가스를 남기는 경우가 있고, 일부 컨트랙트는 이를 전제로 설계됐다. 새 규칙에서는 일부 작업이 끝까지 실행될 수 있어 개발자가 전체 거래가 되돌려질 것으로 기대한 안전장치가 흔들릴 수 있다.

가스 소진 뒤 작업을 영구 실패로 기록하는 컨트랙트가 한 예다. 새 규칙에서는 사용할 수 없던 가스가 다시 쓸 수 있게 돼 영구 실패가 기록될 수 있다. 재단 저장소에는 가스 소모가 한 방향으로만 움직인다는 가정, 고정 가스 허용량이 계속 충분하다는 가정, 되돌려진 호출이 상태 생성에 쓴 가스를 돌려주지 않는다는 가정도 위험 사례로 올라 있다.

릴레이어 정산과 지갑 위임까지 영향

크립토슬레이트가 소개한 INV-5 항목은 릴레이어(대신 거래를 실행하고 비용을 돌려받는 주체)의 정산 문제다. EIP-8037에서는 거래 가스 한도가 16,777,216을 넘으면 상태 가스 예비분이 별도로 채워진다. 상태 생성은 이 예비분에서 먼저 차감되고 이후 실행 가스가 쓰인다. 솔리디티의 gasleft() 값에는 이 예비분이 빠져 있어 작업 전후 값을 빼는 방식으로는 릴레이어가 실제 지불한 비용을 놓칠 수 있다.

나중에 읽은 값이 앞서 읽은 값보다 크면 검사형 뺄셈은 되돌려져 작업이 막힌다. 검사 없는 뺄셈은 큰 수로 감겨 과다 상환이 나올 수 있다고 크립토슬레이트는 짚었다. 반대로 예비분에서 나가는 비용이 보이지 않으면 사용자에게 덜 청구되고 운영자가 부족분을 떠안을 수 있다.

크립토슬레이트가 든 예시에서 저장 슬롯 한 칸을 새로 쓰는 작업은 총 11만 20가스다. 예비분에 충분한 가스가 있으면 실행 가스 1만 2,100이 일반 잔액에서, 상태 가스 9만 7,920이 예비분에서 빠진다. gasleft()에는 1만 2,100만 줄어든 것으로 잡힌다. 예비분이 비어 있으면 11만 20 전액이 실행 잔액에서 나간다.

대응책으로는 새 규칙의 추정치를 바탕으로 사용자가 서명한 수수료를 미리 합의하는 방식이 제시됐다. 계량이 꼭 필요하면 뺄셈 결과에 하한을 두고 지급액을 서명된 최대치로 제한할 수 있다. 가스 값이 늘어나지 못하게 하는 사양 제안 PR #12581이 열려 있지만 뺄셈 문제만 해결할 뿐 예비분 청구의 사각지대는 남는다.

INV-8은 계정이 위임 컨트랙트 코드를 승인하는 EIP-7702 위임을 다룬다. 크립토슬레이트는 새 규칙에서 사전 실행 단계의 가스가 부족하면 거래가 블록에 포함된 채 문제가 생길 수 있다고 전했다. 특정 실패 뒤 지갑 승인이 재사용될 수 있다는 점도 지적했다.

재단이 요청한 점검과 남은 일정

재단은 ChainSecurity와 감사업체 데달루스(Dedaub)와 협력하고 내부 감사도 병행한다고 밝혔다. 그래도 프로젝트의 온체인·오프체인 코드를 모두 볼 수는 없다는 입장이다. 이에 8가지 가정을 설명하고 예시와 직접 검증용 프롬프트를 담은 저장소를 공개하고 점검을 요청했다. 영향을 받는다고 확인한 팀은 glamsterdam@ethereum.org로 연락하면 된다.

관련 보도에 따르면 점검 대상은 온체인 컨트랙트와 함께 고정 가스 한도가 코드에 박혀 있을 수 있는 지갑·릴레이어·인프라 같은 오프체인 시스템도 포함한다. 저장소는 영향을 받는 컨트랙트와 해당 가정, 가능한 수정안, 있다면 테스트까지 제보하도록 요청한다. 제보는 비공개로 보낼 수 있다.

재단은 다음 올코어데브 회의에서 현실적인 결정을 내리려면 Glamsterdam 이후 무엇이 깨질지와 이를 막을 사양 변경이 있는지 알아야 한다고 밝혔다. 피드백에 따라 EIP-8037·8038 조정 여부가 검토된다. 영향받는 컨트랙트가 각자 업데이트로 해결할 수 있는지도 함께 살핀다.

뉴스BTC(NewsBTC)는 11월 6일 글이 새 최종 배포일을 정하지 않았다는 점을 짚고, 지켜볼 대목으로 필요 시 수정된 사양, 영향 사례의 해결 확인, Hoodi 테스트 성공, 수정이 필요한 앱을 위한 안내를 들었다. 이 매체는 호환성 위험을 배포 전에 발견했다는 점이 일의 핵심이라고 평가했다.