Foundry가 브라우저 지갑의 WebAuthn 서명 크기를 가스 추정에 반영하도록 바뀌었다

브라우저 지갑으로 거래를 보낼 때 실제 서명이 더 커서 가스가 부족해질 수 있는 문제를, 거래를 바꾸지 않고 “가스 견적을 낼 때만” 보수적으로 계산하게 고쳤다.

가스는 이더리움에서 계산 작업에 드는 비용 단위다. 지갑이나 개발 도구는 거래를 보내기 전에 RPC 노드에 eth_estimateGas를 요청해 필요한 가스 한도를 정한다.

전통적인 지갑은 대개 secp256k1 서명을 쓴다. 그러나 계정 추상화와 패스키 기반 지갑에서는 P-256 또는 WebAuthn 서명을 사용할 수 있다. 특히 WebAuthn은 인증 데이터가 함께 들어가 서명 검증과 전달 데이터의 크기가 달라질 수 있다. 견적을 일반 서명처럼 내면, 실제 서명 뒤 필요한 가스보다 낮게 잡힐 가능성이 생긴다.

이번 변경은 무엇인가

Foundry는 2026-07-31 커밋에서 Tempo 체인의 브라우저 지갑 거래에 쓰던 고정 7,000 가스 여유분을 제거했다. 대신 브라우저 지갑이고 Tempo 체인일 때에만, 가스 추정용 복제 요청에 WebAuthn의 1,400바이트 자리표시자 정보를 넣어 RPC가 더 현실적인 견적을 내게 한다. 사용자가 직접 gas limit을 지정했다면 그 값은 그대로 우선한다. 자리표시자는 실제 제출 거래에는 섞이지 않는다.

1차 출처: https://github.com/foundry-rs/foundry/commit/63ce1f2965ec25501cf9166acc6a4f34e082812d

코드/구조에서는 어떤 차이인가

실제 diff를 단순화한 의사코드다. 핵심은 “실제 거래 객체”와 “견적 전용 복제본”을 분리한 데 있다.

이전

estimated = rpc.estimateGas(transaction)
if browserWallet && tempo:
estimated += 7000
transaction.gasLimit = estimated

변경

request = transaction.clone()
if browserWallet && tempo:
request.keyType = WebAuthn
request.keyData = sizeHint(1400)  // 견적용 힌트
estimated = rpc.estimateGas(request)
transaction.gasLimit = estimated     // 원본에는 힌트를 넣지 않음

왜 이것이 중요한가

사용자에게는 “서명은 됐는데 가스 한도가 모자라 거래가 실패하는” 상황을 줄이는 방향이다. 개발자에게는 모든 브라우저 지갑에 같은 숫자를 더하는 임시방편보다, 실제 실행 환경에 가까운 입력으로 견적을 내는 패턴을 보여 준다. 명시적 gas limit을 덮어쓰지 않는 점도 중요하다. 사용자가 의도적으로 제한한 비용 상한을 도구가 몰래 바꾸지 않는다.

쉬운 비유

택배 상자의 무게를 잴 때, 모든 상자에 임의로 7kg을 더하던 방식에서 실제로 두꺼운 완충재가 든 상자라는 정보를 저울에 알려 주는 방식으로 바뀐 셈이다. 배송할 상자 자체를 바꾸지는 않는다.

블록체인 발전 흐름에서의 의미

지갑은 더 이상 한 종류의 개인키 서명만 가정할 수 없다. 패스키·스마트 계정처럼 사용하기 쉬운 인증 방식을 체인 거래에 연결하려면, 서명 UX뿐 아니라 가스 추정, RPC 포맷, 수수료 처리까지 함께 맞아야 한다. 계정 추상화가 “로그인 방식 변경”이 아닌 전체 거래 파이프라인의 변화임을 보여 주는 사례다.