데이터 및 트랜잭션 흐름

ieum의 모든 결제 이벤트는 Receipt(영수증) 모델을 중심으로 관리됩니다. 영수증은 결제(실행)와 정산(확정)을 연결하는 표준 데이터 구조입니다.

Receipt 주요 필드 명세

requestId: 멱등성 보장을 위한 고유 요청 ID

merchantId: 가맹점 식별자

amount: 결제 금액

status: 현재 영수증 상태 (INIT, AUTHORIZED 등)

merkleRoot: 배치 포함 시 계산된 머클 루트

anchorTxHash: 아발란체 서브넷에 기록된

트랜잭션 해시트랜잭션 수명 주기 및 상태 전이

1. INIT: 결제 요청이 수신되어 requestId가 생성된 초기 상태입니다.

2. AUTHORIZED: 정책 엔진이 잔액 및 리스크 정책을 즉시 평가하여 승인한 상태입니다. 오프체인 장부(SSOT)에 기록되며, 1초 내 UX 확정이 완료됩니다.

3. COMMITTED: 비동기 큐/워커를 통해 온체인 트랜잭션 실행이 확정 잠금된 상태입니다. txHash를 확보하여 회계적 고정점을 형성합니다.

4. BATCHED/ANCHORED: 일정 주기별로 영수증을 머클 루트 기반으로 묶어 아발란체 서브넷에 기록한 상태입니다. 이 시점에서 정산은 기술적으로 번복 불가능한 최종성(Finality)을 갖습니다.

◦ Impact: 머클 루트 기반 앵커링을 통해 개별 트랜잭션 대비 가스 비용을 90% 이상 절감하면서도 강력한 감사 증빙을 제공합니다.

멱등성(Idempotency) 및 Nonce 최적화:

모든 결제 요청은 CreatePaymentDto 구조를 따르며, 중복 승인을 방지하기 위해 requestId 기반으로 처리됩니다. 가스비 절감을 위해 Nonce 관리를 최적화하여 스토리지 사용량을 최소화했습니다.

Last updated