메인 콘텐츠로 건너뛰기

Documentation Index

Fetch the complete documentation index at: https://docs.stablenet.network/llms.txt

Use this file to discover all available pages before exploring further.

StableNet으로 전송된 트랜잭션은 블록에 포함될 때까지 트랜잭션 풀(mempool)에 머뭅니다. 풀을 이해하면 트랜잭션이 대기 중인 이유와 해결 방법을 알 수 있습니다.

두 가지 상태: pending과 queued

풀의 모든 트랜잭션은 두 가지 상태 중 하나에 있습니다:
상태조건다음 블록에 포함?
Pending논스가 발신자의 현재 온체인 논스와 일치예 — 즉시 가능
Queued논스가 현재 온체인 논스보다 높음아니오 — 낮은 논스를 먼저 기다림
같은 발신자의 이전 논스가 모두 확인되면 트랜잭션이 자동으로 queued에서 pending으로 이동합니다.

트랜잭션이 pending인 이유

가장 흔한 이유:
  1. 논스 공백 — 논스 4가 아직 pending인데 논스 5를 전송한 경우. 논스 5는 논스 4가 포함될 때까지 queued 상태로 대기합니다.
  2. 가스 팁이 최솟값 미만 — 거버넌스 적용 최소 maxPriorityFeePerGas를 충족하지 못한 경우. 트랜잭션이 queued가 아닌 제출 단계에서 거부됩니다.
  3. 잔액 부족balance < value + gasLimit × maxFeePerGas. 트랜잭션이 유효성 검사에서 실패합니다.
  4. 풀 가득 참 — 전역 pending 한도(기본값 5,120 슬롯)에 도달했고 내 트랜잭션의 우선순위가 기존 트랜잭션보다 낮은 경우.

가스 팁과 우선순위

StableNet에서 가스 팁 경쟁은 이더리움 메인넷과 다르게 작동합니다. 일반 계정의 경우 실효 가스 팁은 GovValidator 거버넌스 컨트랙트가 고정합니다. 모든 일반 계정 트랜잭션은 동일한 팁을 납부합니다 — 팁을 높여서 다른 사용자를 앞지를 수 없습니다. 인증 계정 (GovCouncil이 설정)의 경우 트랜잭션의 GasTipCap이 그대로 사용되어 커스텀 우선순위가 가능합니다. 따라서 pending 시간은 팁 금액이 아닌 논스 순서와 풀 용량에 의해 거의 전적으로 결정됩니다.

막힌 트랜잭션 교체하기

pending 트랜잭션을 교체하려면 동일한 논스와 원래보다 최소 10% 높은 가스 가격으로 새 트랜잭션을 제출하세요:
const replacement = await wallet.sendTransaction({
  to: originalTx.to,
  value: originalTx.value,
  nonce: originalTx.nonce,               // 동일한 논스
  maxPriorityFeePerGas: ethers.parseUnits("30360", "gwei"),  // 원래보다 ≥ 10% 높게
  maxFeePerGas: ethers.parseUnits("90000", "gwei"),
});
10% 범프 요구사항은 사소하게 높은 가스 팁으로 트랜잭션을 스팸 교체하는 것을 방지합니다.

풀 상태 검사

txpool 네임스페이스로 풀 상태를 검사합니다:
// 모든 pending 및 queued 트랜잭션
const content = await provider.send("txpool_content", []);

// pending 수와 queued 수
const status = await provider.send("txpool_status", []);
console.log("pending:", parseInt(status.pending, 16));
console.log("queued:", parseInt(status.queued, 16));

// 특정 주소의 트랜잭션
const mine = await provider.send("txpool_contentFrom", [wallet.address]);

풀 한도

한도기본값설명
계정별 pending16 슬롯발신자당 최대 pending 트랜잭션 수
계정별 queued64 슬롯발신자당 최대 queued 트랜잭션 수
전역 pending5,120 슬롯모든 발신자의 총 pending
전역 queued1,024 슬롯모든 발신자의 총 queued
풀이 가득 차면 우선순위가 가장 낮은 트랜잭션이 먼저 제거됩니다. RPC를 통해 로컬에서 제출된 트랜잭션은 보호되어 마지막으로 제거됩니다.

블록 포함 이후 처리

새 블록이 추가되면 풀이:
  1. 블록에 포함된 트랜잭션을 제거합니다
  2. 논스 공백이 채워진 queued 트랜잭션을 pending으로 승격합니다
  3. 업데이트된 잔액에 대해 남은 트랜잭션을 재검증합니다
  4. GovValidator에서 최신 가스 팁을 조회하고 필터링을 업데이트합니다

개발자 이점

  • 풀 상태를 조회 가능 — txpool_contentFrom으로 내 트랜잭션을 모니터링
  • 논스 공백이 막힌 트랜잭션의 주요 원인 — 동시 발신자에서 논스를 신중하게 관리
  • 교체가 예측 가능 — 10% 가격 범프로 교체 보장

관련 문서