
nonce: 이더리움 트랜잭션이 줄을 서는 이유
Bitcoin에서는 같은 지갑에서 보낸 서로 무관한 두 결제가 어떤 순서로든 확인될 수 있습니다. Ethereum에서는 그렇지 않습니다. 한 주소에서 나가는 모든 트랜잭션에는 번호가 붙고, 네트워크는 이를 엄격하게 순서대로 처리합니다. 그 번호가 바로 nonce이며, 이더리움 지갑에서 겪는 가장 혼란스러운 순간들을 설명해 줍니다. 한 트랜잭션이 확인되지 않고, 그 뒤의 모든 트랜잭션이 그 뒤에 막혀 버리는 상황 말입니다.
nonce란 무엇인가
일반적인 이더리움 계정에서 nonce는 카운터, 즉 해당 주소가 보낸 트랜잭션의 수입니다. 첫 번째 트랜잭션은 nonce 0을, 다음 트랜잭션은 1을 사용하는 식입니다. 서명하는 모든 트랜잭션에는 해당 nonce가 포함되며, 네트워크는 nonce n − 1이 블록에 포함된 뒤에야 nonce n을 받아들입니다.
nonce는 두 가지 역할을 합니다.
- 재전송 방지. 서명된 트랜잭션은 두 번 제출될 수 없습니다. nonce 5가 한 번 사용되면, 해당 주소에서 nonce 5를 가진 다른 모든 트랜잭션은 무효가 되기 때문입니다.
- 순서 보장. 한 계정의 트랜잭션은 의도한 순서 그대로 정확히 실행됩니다. 이는 한 트랜잭션이 다른 트랜잭션에 의존할 때 중요합니다. 예를 들어 먼저 승인하고, 그다음 스왑하는 경우입니다.
멈춘 트랜잭션 하나가 나머지를 막는 이유
순서 규칙에는 부작용이 있습니다. nonce 5가 수수료가 너무 낮아 처리되지 못한 채 멤풀에 머물러 있으면, nonce 6, 7, 8도 수수료를 얼마나 내든 블록에 포함될 수 없습니다. 모두 그 뒤에서 줄을 서서 기다립니다.
그래서 수수료가 너무 낮은 트랜잭션 하나만으로도 지갑이 멈춘 것처럼 보일 수 있습니다. 잃어버린 것은 없습니다. 대기열이 한 지점에서 막혀 있을 뿐입니다.
대기열 풀기
각 nonce는 한 번만 사용할 수 있으므로, 멈춘 트랜잭션은 대체하는 방식으로 해결합니다.
- 가속하기: 같은 nonce와 더 높은 수수료로 새 트랜잭션에 서명합니다. 노드는 이전 버전을 대체하며, 먼저 블록에 포함되는 쪽이 유효해집니다.
- 취소하기: 같은 nonce로 자기 자신에게 0을 보내는 트랜잭션에 더 높은 수수료를 붙여 서명합니다. 이 트랜잭션이 확인되면 원래 트랜잭션은 절대 확인될 수 없습니다.
대체 트랜잭션이 받아들여지려면 보통 원래 트랜잭션보다 눈에 띄게 높은 수수료가 필요합니다. 멈춘 트랜잭션과 수수료 대체에서 Bitcoin의 동등한 도구를 다룹니다.
흔한 nonce 문제
- "nonce가 너무 낮음"(오류 메시지
nonce too low). 해당 nonce를 가진 트랜잭션이 이미 사용되었습니다. 다른 지갑이나 기기가 같은 주소에서 전송한 경우가 많습니다. - 빈 번호. 계정이 아직 7에 있는데 nonce 9인 트랜잭션을 보내면 7과 8이 생길 때까지 기다리게 됩니다. 보통 무언가가 누락되었거나 다른 곳에서 서명되었다는 신호입니다.
- 기기 두 대, 계정 하나. 두 앱이 동시에 같은 주소에서 전송하면 둘 다 같은 nonce를 고를 수 있으며, 그중 한 트랜잭션은 실패합니다.
다른 체인은 어떻게 처리하나
- Bitcoin 및 기타 UTXO 체인에는 계정 nonce가 없습니다. 각 트랜잭션은 특정 코인을 사용하고, 코인은 한 번만 사용할 수 있습니다. 이것이 재전송과 이중 지불을 막는 원리입니다.
- Solana는 대신 최근 블록 해시를 사용합니다. 트랜잭션은 짧은 시간 동안만 유효합니다. 두 기기에서 승인을 모으는 것처럼 시간이 더 걸리는 서명을 위해, 특수 계정에 저장되는 영구 nonce를 제공합니다.
스마트 계정에도 nonce가 있다
ERC-4337 기반의 스마트 컨트랙트 계정은 일반 트랜잭션을 보내지 않습니다. 대신 사용자 작업에 서명하고, 번들러가 이를 공유 EntryPoint 컨트랙트를 통해 제출합니다. 각 계정에는 여전히 EntryPoint가 추적하는 nonce가 있으며, 동일한 재전송 방지 기능이 적용됩니다. 이 표준은 계정마다 서로 독립적인 여러 nonce 시퀀스도 허용하므로, 서로 관련 없는 작업이 서로를 기다릴 필요가 없습니다. 기본 원리부터 이해하는 계정 추상화에서 전체 그림을 설명합니다.
SSP의 nonce
Ethereum 및 SSP가 지원하는 다른 EVM 체인에서 SSP 계정은 2-of-2 멀티시그로 제어되는 ERC-4337 스마트 계정입니다. 모든 작업에는 nonce가 포함되며, SSP Wallet과 SSP Key가 모두 이를 포함해 서명합니다. 따라서 승인된 작업은 재전송될 수 없고, 기록의 다른 위치에서 재사용될 수도 없습니다.
실질적인 결과가 하나 있습니다. 계정 컨트랙트는 그 계정에서 보내는 첫 번째 작업에 의해 배포됩니다. 첫 전송에는 배포가 포함되므로 이후 전송보다 눈에 띄게 많은 가스를 사용합니다. 이는 예상된 동작이며, 체인별로 계정당 한 번만 발생합니다.
솔직한 요약
nonce는 모든 이더리움 계정이 자신의 트랜잭션을 한 번씩, 순서대로 처리하도록 만드는 카운터입니다. 덕분에 재전송으로부터 보호받고 서로 의존하는 트랜잭션의 순서도 유지되지만, 그 대가로 수수료가 너무 낮은 트랜잭션 하나가 그 뒤의 모든 것을 붙잡아 둘 수 있습니다.
그런 일이 생기면 그 위에 트랜잭션을 더 보내지 마세요. 멈춘 트랜잭션을 같은 nonce와 더 높은 수수료로 대체하거나 취소하면 대기열이 풀립니다.


