왜 전송 상태가 계속 Pending으로 표시되나요?
주된 이유는 두 가지입니다. 첫째, 블록체인 네트워크에 거래가 몰려 혼잡(congestion) 이 발생한 경우입니다. 이때는 가스비를 높여 거래를 가속하거나, 블록이 순차적으로 거래를 포장할 때까지 기다려야 합니다. 둘째, 전송 시 설정한 채굴 수수료(가스비)가 너무 낮은 경우 입니다. 채굴자는 가스비가 높은 거래를 우선적으로 포장하기 때문에, 가스비가 낮게 설정된 거래는 오랫동안 Pending 상태로 남을 수 있습니다.
이 문제를 정확히 이해하려면 Nonce 라는 개념을 알아야 합니다.
Nonce(넘스)는 암호화 통신에서 한 번만 사용할 수 있는 숫자(Number once) 를 의미합니다. 인증 프로토콜에서 재전송 공격(replay attack)을 방지하기 위해 사용되는 무작위 또는 의사 난수 값입니다.
블록체인에서는 각 거래에 Nonce 값이 있으며, 이는 해당 주소에서 발행한 거래 횟수 를 계산하는 데 사용됩니다. 모든 전송은 발신 시점 기준으로 0부터 시작해 순서대로 Nonce가 부여됩니다. 주소가 거래를 한 번 전송할 때마다 Nonce는 1씩 증가하며, 다른 주소에서 이 주소로 전송하는 거래는 이 주소의 Nonce에 영향을 주지 않습니다.

Nonce와 관련해 블록체인에는 다음과 같은 규칙이 있습니다.
1. 채굴자는 Nonce가 작은 거래부터 큰 거래 순서로 블록에 포함합니다. 따라서 Nonce가 0인 거래가 아직 포장되지 않았다면, Nonce 1, 2, 3… 에 해당하는 다른 거래는 가스비를 아무리 높게 설정해도 대기 상태에 머무르게 됩니다.
2. Nonce는 연속적이어야 하며, 건너뛸 수 없습니다. 예를 들어 Nonce 1에 해당하는 거래가 아직 발행되지 않았다면, Nonce를 0에서 바로 2로 건너뛸 수 없습니다. 즉, Nonce 2 거래는 반드시 Nonce 1 거래 이후에만 포장될 수 있습니다.
3. 동일한 Nonce를 가진 두 개의 거래가 존재할 경우, 그 중 하나가 먼저 성공하면 다른 한 건은 대체되어(덮어써져) 실패 처리됩니다.
따라서 전송 가속의 원리는 간단합니다. 같은 Nonce 값을 사용하되 더 높은 가스비를 설정한 새로운 거래를 다시 보내 기존 거래를 덮어쓰는 것 입니다. 이렇게 하면 채굴자가 더 높은 수수료가 걸린 새 거래를 우선적으로 포장하게 되어, 원래 거래보다 더 빨리 처리됩니다.
Last updated