현상
Provider가 /acp/providers/jobs/{jobId}/accept 호출 → 201 + txHash 반환
온체인 tx 성공(status=0x1) + confirmations 500+로 finality 문제 아님
receipt 내 로그에서 jobId(1002599728) + provider wallet(0x8DF0…) 관련 이벤트가 실제로 emit됨
그럼에도 백엔드 job state가 NEGOTIATION에서 TRANSACTION으로 전환되지 않음
Provider runtime은 소켓 연결 유지 중인데도 TRANSACTION 이벤트 미수신
결국 job은 EXPIRED로 끝나고 0.02 USDC 환불 발생
핵심 증거
txHash: 0xe61a4ad2...933308c
network: Base mainnet
receipt: status=0x1, mined, confirmations 500+ (block 0x28e4ba8)
receipt에서 to = 0x0000000071727de22e5e9d8baf0edac6f37da032 → ERC‑4337 EntryPoint
receipt logs:
EntryPoint의 UserOperationEvent 형태로 sender = provider wallet(0x8DF0…)가 topic에 포함
별도 컨트랙트 로그에서 jobId = 0x3bc27530 (= 1002599728) 가 topic으로 찍힘
job status (CLI):
phase: "EXPIRED"
memoHistory에 APPROVED 1개만 있고 nextPhase가 여전히 NEGOTIATION
priceValue 0.02 USDC
가장 유력한 원인(backend 쪽)
accept 트랜잭션이 AA(UserOp) 로 들어오면서 tx.to가 Marketplace가 아니라 EntryPoint가 됨
백엔드 인덱서/phase-transition worker가 아래 중 하나로 구현돼 있으면 AA tx를 놓칩니다:
- tx.to == marketplaceContract 같은 tx.to 기반 필터
- tx.from == providerWallet 같은 EOA 가정
- receipt.logs 스캔/eth_getLogs 백필(backfill) 없이 “직접 호출 tx만 처리”
결과적으로 온체인 이벤트가 존재해도 백엔드가 이를 job과 매칭하지 못해 NEGOTIATION → TRANSACTION 전환이 발생하지 않는 상태
Provider /accept returns 201 + txHash, and onchain tx is success (status=0x1) with 500+ confirmations on Base mainnet
txHash: 0xe61a4ad2…933308c, block 0x28e4ba8
receipt shows to = 0x0000000071727de22e5e9d8baf0edac6f37da032 (ERC-4337 EntryPoint), and logs include:
UserOperationEvent topics include sender = 0x8DF0…(provider wallet)
application-level logs include jobId = 1002599728 (0x3bc27530) and provider wallet
Despite that, backend job state never moves NEGOTIATION → TRANSACTION, provider runtime receives no TRANSACTION socket event, and job eventually becomes EXPIRED (refund 0.02 USDC)
job status --json for 1002599728 shows phase:"EXPIRED" and memoHistory contains only one APPROVED entry with nextPhase:"NEGOTIATION" (no subsequent transition memo)
현상
Provider가 /acp/providers/jobs/{jobId}/accept 호출 → 201 + txHash 반환
온체인 tx 성공(status=0x1) + confirmations 500+로 finality 문제 아님
receipt 내 로그에서 jobId(1002599728) + provider wallet(0x8DF0…) 관련 이벤트가 실제로 emit됨
그럼에도 백엔드 job state가 NEGOTIATION에서 TRANSACTION으로 전환되지 않음
Provider runtime은 소켓 연결 유지 중인데도 TRANSACTION 이벤트 미수신
결국 job은 EXPIRED로 끝나고 0.02 USDC 환불 발생
핵심 증거
txHash: 0xe61a4ad2...933308c
network: Base mainnet
receipt: status=0x1, mined, confirmations 500+ (block 0x28e4ba8)
receipt에서 to = 0x0000000071727de22e5e9d8baf0edac6f37da032 → ERC‑4337 EntryPoint
receipt logs:
EntryPoint의 UserOperationEvent 형태로 sender = provider wallet(0x8DF0…)가 topic에 포함
별도 컨트랙트 로그에서 jobId = 0x3bc27530 (= 1002599728) 가 topic으로 찍힘
job status (CLI):
phase: "EXPIRED"
memoHistory에 APPROVED 1개만 있고 nextPhase가 여전히 NEGOTIATION
priceValue 0.02 USDC
가장 유력한 원인(backend 쪽)
accept 트랜잭션이 AA(UserOp) 로 들어오면서 tx.to가 Marketplace가 아니라 EntryPoint가 됨
백엔드 인덱서/phase-transition worker가 아래 중 하나로 구현돼 있으면 AA tx를 놓칩니다:
결과적으로 온체인 이벤트가 존재해도 백엔드가 이를 job과 매칭하지 못해 NEGOTIATION → TRANSACTION 전환이 발생하지 않는 상태
Provider /accept returns 201 + txHash, and onchain tx is success (status=0x1) with 500+ confirmations on Base mainnet
txHash: 0xe61a4ad2…933308c, block 0x28e4ba8
receipt shows to = 0x0000000071727de22e5e9d8baf0edac6f37da032 (ERC-4337 EntryPoint), and logs include:
UserOperationEvent topics include sender = 0x8DF0…(provider wallet)
application-level logs include jobId = 1002599728 (0x3bc27530) and provider wallet
Despite that, backend job state never moves NEGOTIATION → TRANSACTION, provider runtime receives no TRANSACTION socket event, and job eventually becomes EXPIRED (refund 0.02 USDC)
job status --json for 1002599728 shows phase:"EXPIRED" and memoHistory contains only one APPROVED entry with nextPhase:"NEGOTIATION" (no subsequent transition memo)