교육 목적으로만 제공되며 재무 또는 보안 조언이 아닙니다. 교체나 취소로 의도하지 않은 거래가 실행될 수 있고 네트워크 수수료는 되돌릴 수 없습니다.
직접 답변
replacement transaction underpriced는 RPC 또는 거래 풀의 거부 메시지이며 EVM 컨트랙트 revert가 아닙니다. 일반적으로 노드가 같은 발신자와 같은 nonce의 거래를 이미 알고 있지만, 새로 제출한 거래의 관련 수수료 필드가 해당 노드의 교체 정책을 충족할 만큼 오르지 않았다는 뜻입니다.
먼저 체인, 발신자, nonce와 알려진 모든 거래 해시의 상태를 확인합니다. 원래 거래가 아직 대기 중이고 교체하려는 것이 맞다면 정확히 같은 nonce를 사용하고 지갑 또는 노드 정책에 따라 수수료 필드를 올립니다. gasLimit만 높이거나 슬리피지를 변경하거나 동일한 서명 거래를 반복 전송하는 것은 수수료 인상 규칙을 충족하지 못합니다.
작동 원리
- Nonce는 거래 순서를 식별합니다. 외부 소유 계정의 거래는 순차 nonce를 사용합니다. 어떤 발신자와 nonce의 거래를 이미 보유한 노드는 같은 위치의 다른 거래를 교체 후보로 처리합니다. 뒤 nonce의 거래는 앞 nonce가 포함되거나 다른 방식으로 해결될 때까지 대기열에 남을 수 있습니다.
- 교체는 로컬 풀 정책입니다. Ethereum 합의 규칙은 공통 인상 비율을 정하지 않습니다. 클라이언트, RPC 제공자, 프라이빗 릴레이마다 정책이나 알고 있는 대기 거래가 다를 수 있습니다. Geth legacy pool의 현재 기본값은
10%이지만 운영자가 변경할 수 있고 다른 클라이언트가 이를 따를 의무도 없습니다. - EIP-1559에는 두 가지 실행 수수료 상한이 있습니다.
maxPriorityFeePerGas는 검증자 팁을,maxFeePerGas는 블록 기본 수수료를 포함한 gas당 총액을 제한합니다. Geth legacy pool에서는 새 fee cap과 tip cap 모두 이전 값보다 높고 설정 비율의 임계치도 충족해야 합니다. 지갑은 한쪽만 바꾸지 말고 둘 다 계산해야 합니다. - 풀의 수락은 확인이 아닙니다. 한 노드가 교체 거래를 받아도 다른 노드는 원래 거래를 계속 보유할 수 있습니다. canonical 계정 순서에는 같은 발신자와 nonce의 거래 하나만 포함될 수 있습니다. 먼저 포함된 유효 후보가 그 체인에서 다른 후보를 무효화하지만 화면 반영은 늦을 수 있습니다.
- 수수료 상한과 실제 지불액은 다릅니다. EIP-1559의 유효 gas 가격은 fee cap으로 제한되고 사용하지 않은 gas에는 비용이 부과되지 않습니다.
maxFeePerGas를 높이면 최대 노출액이 늘지만 최종 가격이 반드시 오르는 것은 아닙니다. 다만 기본 수수료와 팁 조건에 따라 높은 상한까지 지불할 수 있습니다.
해결 절차와 예시
대기 거래의 nonce가 42, maxFeePerGas = 30 gwei, maxPriorityFeePerGas = 2 gwei라고 가정합니다. 10% 인상을 요구하는 노드는 31 gwei와 2.1 gwei 후보를 거부할 수 있고, 35 gwei와 2.5 gwei 후보는 이 예시 임계치를 넘습니다. 현재 기본 수수료 때문에 35 gwei fee cap 아래 유효 팁이 너무 적으면 여전히 대기할 수 있습니다. 이 비율은 예시일 뿐 네트워크 전체의 보장이 아닙니다.
다음 순서로 처리합니다.
- 올바른 네트워크와 발신자를 확인합니다. 지갑과 별도의 RPC 또는 블록 탐색기를 함께 사용해 원래 해시와 모든 교체 해시를 조회합니다.
- 확인된 거래 수와 pending 보기를 비교합니다. nonce
42가 이미 확인됐다면 아직 대기 중이라는 가정으로 다른 거래를 만들지 마십시오. - 원래 거래의
to,value,data를 디코딩합니다. 가속할 때는 의도한 작업과 nonce를 유지합니다. 취소할 때 지갑은 보통 같은 nonce로 발신자 자신에게0 ETH를 보내지만 이는 경쟁 교체일 뿐 프로토콜 수준의 회수가 아닙니다. - 가능하면 지갑의 가속 또는 취소 기능을 사용합니다. 그렇지 않다면 노드의 현재 인상 정책과 수수료 추정치를 얻고 정수 반올림 여유를 두어 EIP-1559 상한 둘 다 높입니다. 계정이
value + gasLimit x maxFeePerGas를 부담할 수 있는지도 확인합니다. - 전체 거래를 다시 확인한 뒤 서명합니다. 한 번만 전송하고 모든 해시를 보관하며 각 후보의 영수증을 추적합니다. 대기 해시에는 영수증이 없으며 올바른 체인과 블록에 연결된 영수증이 실행 확인 지점입니다.
위험
- 취소는 보장되지 않습니다. 취소 거래가 블록 생산자에게 도착하기 전에 원래 거래가 포함될 수 있고, 비공개이거나 전파가 약한 거래는 확인 중인 RPC에 보이지 않을 수 있습니다.
- 잘못된 nonce를 쓰면 이전 거래 교체가 아니라 새 결제나 컨트랙트 호출을 만들 수 있습니다. 오래된 calldata를 다시 서명하면 가격, allowance, 기한 또는 프로토콜 상태가 바뀐 작업이 실행될 수도 있습니다.
- 한 엔드포인트가 받은 교체를 다른 엔드포인트가 거부할 수 있습니다. RPC를 반복해서 바꾸면 여러 후보가 서로 다른 풀에 남아 지갑 표시가 혼란스러워질 수 있습니다.
gasLimit을 높여도 거래 우선순위는 오르지 않습니다. 수수료 상한을 무작정 높이면 불필요한 최대 비용이 생깁니다. 슬리피지나 컨트랙트 calldata 변경은 실행 의미를 바꾸며 풀 규칙을 해결하지 않습니다.- Blob 거래, 계정 추상화 user operation, L2, 프라이빗 릴레이는 서로 다른 풀과 교체 규칙을 사용할 수 있습니다. Geth의 일반 EVM 거래 정책이 적용된다고 가정하지 마십시오.
발신자나 nonce를 모르거나, 원래 calldata를 디코딩할 수 없거나, 거래가 이미 확인됐을 가능성이 있거나, 지갑이 다른 수신자나 금액을 제안하거나, RPC가 시드 문구 또는 개인 키를 요구한다면 다시 서명하지 말고 조사하십시오. 정상적인 문제 해결에는 비밀 복구 정보 공개가 필요하지 않습니다.
흔한 오해
- “계정 잔액이 부족하다.” 잔액 부족은 별도의 검증 오류입니다. 이 메시지는 경쟁 거래와 풀의 교체 가격 정책을 가리킵니다.
- “10% 올리면 항상 된다.” 이는 Geth의 일반적인 기본값이지 합의 규칙이 아닙니다. 제공자 설정, 클라이언트 소프트웨어, 거래 유형, 정수 반올림에 따라 더 필요할 수 있습니다.
- “수수료가 높은 거래가 모든 곳에서 원래 거래를 교체했다.” 거래 풀은 로컬입니다. 한 RPC의 수락은 모든 풀에서 원래 거래를 지우지 않으며 어떤 후보가 먼저 포함될지도 보장하지 않습니다.
- “취소는 확인된 거래를 되돌린다.” 그렇지 않습니다. 취소는 nonce가 미해결인 동안만 경쟁하며, 확인된 상태 변경에는 존재하는 경우에 한해 별도의 애플리케이션 수준 복구가 필요합니다.
관련 주제
출처
- 거래 - ethereum.org (조회일: 2026-08-21)
- EIP-1559: ETH 1.0 체인의 수수료 시장 변경 - Ethereum Improvement Proposals (조회일: 2026-08-21)
- go-ethereum legacy 거래 풀 교체 로직 - go-ethereum (조회일: 2026-08-21)
- txpool 네임스페이스 - go-ethereum (조회일: 2026-08-21)