이더리움 트랜잭션 오류 해설: 각 메시지의 뜻과 해결 방법

EVM 오류 메시지 해설과 해결법. 작성: ChainGate.

이더리움 트랜잭션 오류는 노드가 트랜잭션을 거부하거나 실패 처리한 이유입니다. "Nonce too low"는 그 트랜잭션 번호가 이미 사용되었다는 뜻이므로 지갑을 새로 고치세요. "Replacement transaction underpriced"는 가속이나 취소가 수수료를 충분히 올리지 않았다는 뜻이므로 10퍼센트 이상 올리세요. "Intrinsic gas too low"는 가스 한도가 트랜잭션의 기본 비용보다 낮다는 뜻이므로 올리세요(단순 전송의 최소값은 21,000입니다). "Insufficient funds for gas * price + value"는 계정이 보내는 금액에 최대 수수료를 더한 만큼을 감당하지 못한다는 뜻이므로 네이티브 코인을 더하세요. "Execution reverted"는 컨트랙트가 호출을 거부했다는 뜻이며, 수수료가 아니라 입력값의 문제입니다.

거부된 트랜잭션은 블록에 도달한 적이 없으므로 어느 것도 가스를 소모하지 않습니다. 가스가 드는 두 가지는 채굴된 트랜잭션의 "out of gas"와 "execution reverted"입니다. 네트워크가 작업을 했고, 그 작업이 실패했으며, 수수료는 어쨌든 지불됩니다.

메시지는 짧고, 그에 관한 포럼 글타래는 길며, 대부분 답 없이 끝납니다. 이 가이드는 이더리움 노드 소프트웨어가 내보내는 문자열을 그대로 가져와, 각각이 무엇을 검사하는지 설명하고, 실패한 시도에 비용이 들었는지 알려 주며, 지갑 사용자와 개발자 각각을 위한 해결법을 제시합니다. 같은 노드 코드를 공유하기 때문에 베이스, 아비트럼, 옵티미즘, 폴리곤, BNB 스마트 체인을 비롯한 모든 EVM 네트워크에서 같은 메시지가 나타납니다.

요약

  • 오류는 두 부류로 나뉩니다. 트랜잭션이 블록에 들어가기 전의 거부(nonce, 수수료, 자금, 가스 한도)는 비용이 들지 않습니다. 포함된 뒤의 실패(out of gas, execution reverted)는 수수료 전액이 나갑니다.
  • 문자열은 go-ethereum에서 옵니다. nonce too low · replacement transaction underpriced · intrinsic gas too low · insufficient funds for gas * price + value는 네트워크가 아니라 트랜잭션 자체에 대한 검사입니다.
  • 대부분은 한 줄짜리 해결법이 있습니다. 지갑을 새로 고치거나, 수수료를 10퍼센트 이상 올리거나, 가스를 더하거나, 네이티브 코인을 채우는 것입니다.
  • "estimate gas" 단계에서 실패하는 dapp은 컨트랙트 호출이 revert될 것이라고 알려 주는 것입니다. 입력값을 바꾸세요. 가스 한도를 올려도 도움이 되지 않습니다.

1. 이 오류 메시지는 어디서 올까?

거의 모든 지갑, 라이브러리, RPC 제공자는 가장 널리 운영되는 이더리움 클라이언트인 go-ethereum이 만들어 내는 오류 문구를 그대로 전달하며, 레이어 2 네트워크의 클라이언트도 같은 문자열을 재사용합니다. MetaMask는 이를 자체 대화상자로 감싸고, ethers.js는 NONCE_EXPIRED나 REPLACEMENT_UNDERPRICED 같은 코드를 덧붙이며, RPC 제공자는 코드 -32000의 JSON-RPC 오류로 돌려줍니다. 그 밑에 있는 메시지는 같습니다.

노드는 서로 다른 두 종류의 검사를 합니다. 첫 번째는 트랜잭션을 받는 시점에 이루어집니다. nonce가 맞는지, 수수료가 받아들일 만한지, 가스 한도가 정상인지, 보내는 쪽이 지불할 수 있는지. 여기서 실패한 트랜잭션은 버려지고 온체인에는 아무것도 기록되지 않습니다. 두 번째는 트랜잭션이 블록 안에서 실행될 때 이루어집니다. 컨트랙트 코드가 revert 없이 가스 한도 안에서 완료되는지. 여기서 실패한 트랜잭션은 그래도 채굴되어 익스플로러에 Fail 상태로 표시되고, 수수료는 소모됩니다.

오류가 어느 부류에 속하는지 알면 두 가지를 한 번에 알 수 있습니다. 돈을 잃었는지, 그리고 고칠 곳이 내 쪽(트랜잭션)인지 컨트랙트 쪽(입력값)인지.

2. 빠른 참조: 흔한 오류 전부

가장 자주 마주칠 순서로 정리한 정확한 문자열입니다. 문구는 go-ethereum 소스에서 가져왔으며, 지갑은 이를 줄여서 보여 주기도 합니다.

오류 메시지뜻가스 소모?해결법
nonce too low이 nonce를 가진 트랜잭션이 이미 확인됨아니요지갑을 새로 고치고, 다시 보내기 전에 익스플로러를 확인
nonce too high더 낮은 nonce가 아직 비어 있어 이 트랜잭션은 아직 실행될 수 없음아니요빠진 nonce를 보내거나 정리. 로컬 체인을 재시작했다면 개발용 지갑을 초기화
replacement transaction underpriced대기 중인 트랜잭션과 같은 nonce인데 수수료를 충분히 올리지 않음아니요두 수수료 필드를 모두 10퍼센트 이상 올림
transaction underpriced수수료가 노드의 최소값보다 낮음아니요최대 수수료와 우선 수수료를 올림
insufficient funds for gas * price + value잔액이 금액 더하기 가스 한도 곱하기 최대 수수료를 감당하지 못함아니요네이티브 코인(ETH, POL, BNB)을 더하거나 금액을 줄임
intrinsic gas too low가스 한도가 트랜잭션의 고정 기본 비용보다 낮음아니요가스 한도를 올림. 단순 전송은 21,000
exceeds block gas limit / transaction gas limit too high가스 한도가 블록 허용치보다 크거나 16,777,216 상한을 넘음아니요가스 한도를 낮춤
max fee per gas less than block base fee최대 수수료가 현재 기본 수수료보다 낮음아니요최대 수수료를 올리거나 기본 수수료가 내려갈 때까지 기다림
max priority fee per gas higher than max fee per gas팁이 전체 수수료 상한보다 높게 설정됨아니요우선 수수료를 최대 수수료 이하로 설정
already known노드에 이미 똑같은 트랜잭션이 있음아니요할 일 없음. 확인될 때까지 기다림
invalid sender서명을 복원할 수 없음. 대개 체인 ID 불일치아니요RPC가 보고하는 체인 ID로 서명
execution reverted컨트랙트 코드가 호출을 거부함채굴된 경우에만입력값을 수정: 허용량(allowance), 슬리피지, 잔액, 기한
out of gas블록 안에서 실행이 가스 한도를 넘김예더 높은 가스 한도로 다시 보냄

3. "nonce too low"는 무슨 뜻일까?

모든 계정은 자기 트랜잭션에 0부터 번호를 매기며, 각 번호는 한 번만 쓸 수 있습니다. "Nonce too low"는 방금 보낸 트랜잭션이 그 계정에서 네트워크가 이미 확인한 번호를 달고 있다는 뜻입니다. 노드는 트랜잭션의 nonce를 계정의 다음 예상 nonce와 비교해, 그보다 낮은 것은 모두 거부합니다.

지갑이 알고 있는 다음 nonce가 오래된 값일 때 생깁니다. 같은 계정에서 다른 지갑이나 기기로 트랜잭션을 보냈거나, 가속이나 취소가 이미 그 번호를 썼거나, 로컬 개발 체인을 재시작해 계정의 카운터는 0으로 돌아갔는데 MetaMask는 계속 세고 있었던 경우입니다. 하드웨어 지갑에서는 트랜잭션에 두 번 서명했을 때도 나타납니다.

해결법은 지갑이 다시 동기화하게 두는 것입니다. 먼저 익스플로러에서 주소를 조회하세요. 하려던 일이 그 nonce로 이미 처리되었다면 다시 보내지 마세요. 지갑이 계속 오래된 번호를 내민다면 MetaMask의 "Delete activity and nonce data"(활동 및 nonce 데이터 삭제) 옵션(설정, 개발자 도구)이 현재 네트워크의 로컬 카운터를 지웁니다. MetaMask는 이 작업이 되돌릴 수 없고, 현재 네트워크에만 적용되며, 잔액에는 영향이 없다고 안내합니다. 코드에서는 직접 카운터를 유지하는 대신 서명 전에 eth_getTransactionCount를 "pending" 태그로 호출해 다음 nonce를 읽으세요.

4. "nonce too high"는 무슨 뜻일까?

반대 방향의 틈입니다. 트랜잭션의 nonce가 계정의 다음 예상값보다 높아서 구멍이 생겼습니다. 더 낮은 번호가 아직 확인되지 않은 것입니다. 노드는 이런 트랜잭션을 실행하지 않고 대기열에 두며, 일부는 이 메시지와 함께 바로 거부합니다.

흔한 원인은 앞선 트랜잭션 하나가 탈락한 트랜잭션 묶음이거나, 반대 방향의 로컬 체인 초기화입니다(체인은 초기화됐는데 지갑은 아니어서, nonce 0을 기대하는 체인에 지갑이 nonce 40을 보내는 경우). 빠진 nonce를 보내 틈을 메우거나, 위에서처럼 지갑의 활동 데이터를 지우세요.

5. "replacement transaction underpriced"는 무슨 뜻일까?

대기 중인 트랜잭션을 대체하려 했는데(가속, 취소, 또는 그냥 같은 nonce로 다시 보내기) 새 트랜잭션이 이전 것보다 충분히 더 내지 않는 경우입니다. 노드는 수수료가 최소 비율 이상 오를 때만 대기 중인 트랜잭션을 같은 nonce의 다른 트랜잭션으로 바꿔 주며, go-ethereum에서 이 인상 폭의 기본값은 10퍼센트이고 최대 수수료와 우선 수수료 모두에 적용됩니다.

nonce는 맞고, 가격이 문제입니다. 현재 네트워크 요율이 아니라 대기 중인 트랜잭션을 기준으로 두 수수료 필드를 모두 10퍼센트 이상 올리세요. 관련된 "transaction underpriced" 대화상자에 대한 MetaMask의 안내는 우선 수수료를 10퍼센트 이상, 최대 수수료를 30퍼센트 이상 높이라는 것입니다. 대신 취소하려면 MetaMask의 오류 가이드에 설명된 대로 같은 nonce와 올린 수수료로 자기 주소에 0 ETH를 보내세요. 어느 쪽이든 대체 트랜잭션은 새 트랜잭션 해시를 받고 이전 것은 버려집니다.

6. "transaction underpriced"는 무슨 뜻일까?

"replacement"라는 단어가 없는 이것은 단순한 가격 검사입니다. 트랜잭션의 수수료가 노드가 풀에 보관하려는 수준보다 낮은 것입니다. 노드는 스팸을 막기 위해 최소 가스 가격을 정해 두는데, 붐비는 시간대에는 지갑의 "낮음" 수수료 추정치가 그 아래로 떨어질 수 있습니다. 비슷한 메시지인 "transaction gas price below minimum"도 같은 뜻입니다.

최대 수수료와 우선 수수료를 올려 다시 보내세요. 온체인에는 아무것도 기록되지 않았으므로 정리해야 할 멈춘 트랜잭션도 없습니다. 특정 네트워크에서 반복해서 보인다면 그 네트워크의 최소값이 지갑의 기본값보다 높은 것이며, 가스 트래커의 네트워크별 페이지에서 현재 시세를 볼 수 있습니다.

7. "insufficient funds for gas * price + value"는 무슨 뜻일까?

보내는 쪽의 네이티브 코인 잔액은 보내는 금액에 최악의 경우 수수료, 즉 가스 한도에 가스당 최대 수수료를 곱한 값을 더한 만큼을 감당해야 합니다. 이 규칙은 EIP-1559에 적혀 있습니다. 서명자는 value에 더해 gas_limit 곱하기 max_fee_per_gas를 지불할 수 있어야 합니다. 노드는 트랜잭션이 실제로 들 비용이 아니라 최대값을 기준으로 검사하므로, 최종 수수료라면 충분했을 트랜잭션도 이 검사에서 실패할 수 있습니다.

거의 모든 경우가 세 가지 원인으로 설명됩니다. 토큰은 있지만 네이티브 코인이 없는 경우: 베이스의 USDC는 가스로 ETH가 필요하고, 폴리곤의 USDT는 POL이, BNB 스마트 체인의 모든 것은 BNB가 필요합니다. 잔액 전부를 보내느라 수수료 몫을 남기지 않은 경우: 최대 수수료를 먼저 빼세요. 아니면 컨트랙트 호출 때문에 가스 한도가 부풀려져 최악의 경우가 실제 비용보다 훨씬 큰 경우입니다.

해결법은 네이티브 코인을 채우거나, 더 적은 금액을 보내거나, 최대 수수료나 가스 한도가 넉넉히 잡혀 있다면 낮추는 것입니다. 관련된 "insufficient funds for transfer"는 가스를 따지기도 전에 금액만으로 잔액을 넘는다는 뜻입니다.

8. Intrinsic gas too low, out of gas, 가스 한도 오류

가스 한도와 관련된 메시지는 네 가지이며, 실패하는 시점이 서로 다릅니다. "Intrinsic gas too low"는 포함 전 거부입니다. 모든 트랜잭션에는 코드가 실행되기 전의 고정 기본 비용이 있는데, 단순 전송은 21,000 가스에 데이터 바이트당 요금이 더해지며, 가스 한도가 그보다 낮은 것입니다. ethereum.org 가스 문서는 표준 전송을 21,000 단위로 적고 있으며, 토큰 전송이나 컨트랙트 호출은 더 필요합니다. 한도를 올리거나, 지갑이나 라이브러리가 추정하게 두세요.

"Out of gas"는 포함 후 버전입니다. 한도가 기본 비용은 감당해 트랜잭션은 채굴되었지만, 그다음 컨트랙트 코드가 한도보다 많은 가스를 필요로 한 것입니다. EVM은 모든 상태 변경을 되돌리지만, 같은 문서가 말하듯 수행된 작업에 대해 제공된 가스는 모두 소모됩니다. 수수료는 사라지고 트랜잭션은 익스플로러에 실패로 표시됩니다. 더 높은 한도로 다시 보내세요. 지갑이 보통 추정치에 여유를 더하는 이유가 바로 이것입니다.

"Exceeds block gas limit"은 설정한 한도가 그 네트워크에서 블록 하나가 담을 수 있는 양보다 크다는 뜻입니다. "Transaction gas limit too high"는 더 최근의 것으로, EIP-7825 이후 트랜잭션 하나가 16,777,216 가스(2의 24제곱)를 넘게 요청할 수 없으며, 상한을 넘는 트랜잭션은 거부됩니다. 둘 다 한도를 낮추면 해결됩니다. 정상적인 트랜잭션이 그 숫자 근처까지 필요한 일은 없습니다.

9. 최대 수수료와 우선 수수료 오류

EIP-1559 이후 트랜잭션에는 수수료 필드가 둘 있습니다. 단위당 지불할 최대 금액인 가스당 최대 수수료(max fee per gas)와, 밸리데이터에게 주는 팁인 가스당 최대 우선 수수료(max priority fee per gas)입니다. 프로토콜은 이 둘과 블록의 기본 수수료 사이에 두 가지 관계를 강제하며, 각각에 고유한 오류가 있습니다.

"Max fee per gas less than block base fee": 최대 수수료가 현재 기본 수수료보다 낮아서, 팁을 얼마로 하든 트랜잭션이 포함될 수 없습니다. 한산할 때 서명했다가 기본 수수료가 오른 뒤에 브로드캐스트한 트랜잭션과, 수수료를 하드코딩해 만든 트랜잭션이 여기에 걸립니다. 최대 수수료를 올리거나 기다리세요. 기본 수수료는 블록마다 움직이므로 상한 아래로 내려오면 트랜잭션은 다시 유효해집니다.

"Max priority fee per gas higher than max fee per gas": 팁이 전체 상한을 넘는 경우로, 기본 수수료가 먼저 채워지고 팁은 남은 몫에서만 나올 수 있기 때문에 명세가 금지합니다. 우선 수수료를 최대 수수료 이하로 설정하세요. 제대로 만든 트랜잭션은 최대 수수료가 대략 기본 수수료의 두 배에 팁을 더한 값이어서, 기다리는 동안 기본 수수료가 올라도 여유가 있습니다.

10. "execution reverted"는 무슨 뜻일까?

호출한 컨트랙트가 일부러 실행을 멈춘 것입니다. Solidity의 require, revert, assert 문은 모두 이 메시지로 끝나며, 뒤에 컨트랙트 자체의 이유 문자열이 따라오는 경우가 많습니다. "ERC20: transfer amount exceeds allowance", "UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT", "Pausable: paused" 같은 것들입니다. 이유가 비어 있으면 "execution reverted"만 보이거나 원시 오류 데이터가 보입니다.

대개는 보내기 전에 보게 됩니다. 지갑이 eth_estimateGas로 호출을 돌려 보는데 그 시뮬레이션이 revert되기 때문이며, MetaMask는 그러면 가스를 추정할 수 없다고 알립니다. 이것이 저렴한 버전입니다. 아무것도 보내지지 않았습니다. 비싼 버전은 시뮬레이션을 통과해 채굴되었지만 그 사이 상태가 바뀌어 온체인에서 revert된 트랜잭션입니다(스왑 가격이 슬리피지를 넘어 움직였거나, 다른 사람이 마지막 물량을 샀거나, 기한이 지났거나). 익스플로러에 Fail로 표시되고 수수료는 지불됩니다.

해결법은 결코 더 높은 가스 한도가 아닙니다. 이유 문자열을 읽고 입력값을 바꾸세요. 토큰을 먼저 승인(approve)하고, 슬리피지를 넓히거나 금액을 줄이고, 컨트랙트가 일시 정지 상태가 아닌지 확인하고, 컨트랙트가 있는 네트워크에 접속해 있는지 확인하세요. 채굴된 실패의 revert 이유는 익스플로러의 트랜잭션 페이지에 표시되며, Etherscan 가이드에서 어디를 보면 되는지 알려 줍니다.

11. Already known, invalid sender, oversized data

"Already known"은 실질적인 의미에서 오류가 아닙니다. 노드가 보낸 것과 똑같은 트랜잭션을 이미 갖고 있는 것으로, 보통 라이브러리가 브로드캐스트를 재시도했거나 두 지갑이 같은 서명 바이트를 밀어 넣은 경우입니다. 원래 것이 확인될 때까지 기다리세요.

"Invalid sender"는 노드가 서명에서 유효한 서명자를 복원하지 못했다는 뜻입니다. EIP-155 이후 체인 ID가 서명 대상에 포함되므로, 체인 1용으로 서명해 체인 137에 보낸 트랜잭션은 엉뚱한 값으로 복원되어 거부됩니다. 서명 설정의 체인 ID를 RPC 엔드포인트가 보고하는 값과 대조하세요. 체인 ID 목록에 번호와 불일치 사례가 정리되어 있습니다.

"Oversized data"는 트랜잭션의 바이트 크기가 노드가 풀에 받아들이는 한도를 넘는다는 뜻으로, 아주 큰 컨트랙트 배포나 calldata에서만 생깁니다. 데이터를 나누거나 팩토리를 통해 배포하세요.

12. 실패한 트랜잭션도 가스가 들까?

어디서 실패했느냐에 따라 다릅니다. 이 가이드의 첫 번째 부류(nonce, underpriced, 자금 부족, intrinsic gas, 수수료 상한, already known, invalid sender, oversized data)는 모두 거부입니다. 노드가 트랜잭션을 버렸고 어느 블록에도 들어 있지 않으므로 수수료가 청구되지 않았고 익스플로러에서 찾을 것도 없습니다. 다시 보내도 추가 비용이 들지 않습니다.

"Out of gas"와 채굴된 "execution reverted"는 두 번째 부류입니다. 트랜잭션이 Fail 상태로 블록에 들어 있고, 밸리데이터가 작업을 했으며, 수수료는 전액 지불됩니다. ethereum.org 문서는 트랜잭션의 성공 여부와 관계없이 수수료가 지불된다고 명시합니다. 옮기려던 ETH나 토큰은 그대로 있고, 수수료만 사라집니다.

13. 코드에서 이 오류를 피하는 방법

네 가지 습관이면 전송 서비스에서 이 목록의 대부분이 사라집니다. 카운터를 직접 유지하는 대신 노드에서 pending nonce를 읽고, 현재 네트워크의 수수료 추정치를 노드에서 가져오고, 서명 전에 가스를 추정해 여유를 더하고, 브로드캐스트 전에 잔액을 금액 더하기 최악의 경우 수수료와 비교하는 것입니다. ChainGate SDK는 transfer() 안에서 이 네 가지를 모두 처리하고, 직접 다뤄야 하는 한 가지 경우를 타입이 있는 오류로 드러냅니다:

import { ChainGate, importWallet, NotEnoughFundsError } from 'chaingate';

const cg = new ChainGate({ apiKey: process.env.CHAINGATE_API_KEY });
const wallet = importWallet({ phrase: process.env.MNEMONIC });
const eth = cg.connect(cg.networks.ethereum, wallet);

try {
  // Nonce, gas limit and EIP-1559 fees are read from the node for you
  const tx = await eth.transfer(cg.networks.ethereum.amount('0.05'), '0x...');
  tx.setFee(tx.recommendedFees().normal);

  if (!tx.enoughFunds()) {
    // amount + worst-case fee exceeds the balance: nothing is broadcast
    console.log('short by', tx.missingFunds());
    return;
  }

  const sent = await tx.signAndBroadcast();
  console.log(sent.transactionId);
} catch (err) {
  if (err instanceof NotEnoughFundsError) {
    console.error('Not enough ETH for amount + fee');
  }
  throw err;
}

이더리움과 UTXO 체인의 전체 흐름은 JavaScript로 암호화폐를 보내는 튜토리얼에 있고, transfer 문서에는 수수료 등급과, 네이티브 코인이 정확히 얼마나 부족한지 알려 주는 missingFunds 필드가 정리되어 있습니다.

14. 다음에 볼 것

이 오류의 대부분은 수수료에 관한 것이므로, 다음으로 읽을 페이지는 가스비란 무엇이고 최대 수수료, 우선 수수료, 기본 수수료가 어떻게 맞물리는지이고, 그다음은 각 네트워크의 현재 요율을 보여 주는 가스 트래커입니다. 트랜잭션이 실제로 나갔고 어떻게 되었는지 알아야 한다면, 트랜잭션 해시 가이드에서 조회하는 방법을 보여 줍니다. 그리고 이더리움, EVM 레이어 2, 비트코인에 걸쳐 nonce, 수수료, 잔액 검사를 대신 처리해 주는 TypeScript 라이브러리를 찾는다면, ChainGate가 이 사이트를 뒷받침하는 SDK입니다.

자주 묻는 질문

MetaMask의 "nonce too low"는 무슨 뜻인가요?

MetaMask가 쓰려던 트랜잭션 번호가 그 계정에서 이미 확인된 것입니다. 보통 다른 지갑이나 기기, 또는 가속이 먼저 그 번호를 썼거나, 로컬 체인이 초기화된 경우입니다. 익스플로러에서 해당 작업이 이미 처리되었는지 확인한 뒤, 그 네트워크의 MetaMask 활동 및 nonce 데이터를 지워 다시 동기화하세요.

"replacement transaction underpriced"는 어떻게 고치나요?

대체 트랜잭션의 최대 수수료와 우선 수수료를 모두 대체 대상 트랜잭션보다 10퍼센트 이상 올리세요. go-ethereum의 기본 최소 인상 폭은 10퍼센트입니다. 가속 대신 취소하려면 같은 nonce와 더 높은 수수료로 자신에게 0 ETH를 보내세요.

"intrinsic gas too low"는 무슨 뜻인가요?

트랜잭션의 가스 한도가 고정 기본 비용보다 낮다는 뜻입니다. 단순 ETH 전송은 21,000 가스이고, 토큰 전송과 컨트랙트 호출은 더 듭니다. 가스 한도를 올리거나 지갑이 추정하게 두세요. 포함 전에 거부되었으므로 수수료는 청구되지 않았습니다.

"insufficient funds for gas * price + value"는 무슨 뜻인가요?

계정의 네이티브 코인 잔액이 보내는 금액에 가스 한도 곱하기 가스당 최대 수수료를 더한 값을 감당하지 못한다는 뜻입니다. 토큰만 있어서는 안 됩니다. 가스는 이더리움과 베이스에서는 ETH, 폴리곤에서는 POL, BNB 스마트 체인에서는 BNB로 냅니다. 네이티브 코인을 채우거나 더 적게 보내세요.

"execution reverted"도 가스가 드나요?

트랜잭션이 채굴된 경우에만 듭니다. 지갑이 가스 추정 중에 이 오류를 알리면 아무것도 보내지지 않았고 아무것도 청구되지 않았습니다. 채굴된 트랜잭션이 revert되면 수수료는 전액 지불되고 익스플로러에는 Fail 상태가 표시됩니다.

가스 한도를 설정했는데도 트랜잭션이 "out of gas"로 실패하는 이유는?

한도가 받아들여질 만큼은 높았지만 실행된 컨트랙트 코드에는 너무 낮았던 것입니다. EVM은 변경 사항을 되돌리고 제공된 가스를 모두 소모하므로 수수료는 소모됩니다. 더 높은 한도로 다시 보내세요. eth_estimateGas의 추정치에 여유를 더하면 이를 피할 수 있습니다.

"max fee per gas less than block base fee"는 무슨 뜻인가요?

트랜잭션의 최대 수수료가 현재 기본 수수료보다 낮아서 어느 블록에도 포함될 수 없다는 뜻입니다. 최대 수수료를 올리거나, 기본 수수료가 상한 아래로 내려올 때까지 기다리세요. 수수료를 하드코딩해 미리 서명해 둔 트랜잭션에서 흔히 생깁니다.

거부된 트랜잭션은 비용이 드나요?

아니요. nonce too low, transaction underpriced, insufficient funds, intrinsic gas too low 같은 거부는 트랜잭션이 블록에 들어가기 전에 일어나므로 수수료가 청구되지 않고 익스플로러에도 아무것도 나타나지 않습니다. 채굴된 트랜잭션이 가스를 다 쓰거나 revert될 때만 수수료가 듭니다.

베이스, 아비트럼, 폴리곤, BNB 스마트 체인에서도 이 오류는 같나요?

같습니다. 이 네트워크들은 같은 코드에서 파생된 EVM 클라이언트를 운영하므로 메시지, nonce 규칙, 수수료 검사가 동일합니다. 금액은 다릅니다. 가스는 각 네트워크의 네이티브 코인으로 내고, 최소 수수료는 이더리움 메인넷보다 훨씬 낮습니다.

ChainGate로 만들기

아이디어를 코드로 연결하세요 — ChainGate는 Ethereum과 20여 개 블록체인을 위한 지갑, 트랜잭션, 관리형 RPC를 하나의 라이브러리로 제공합니다.