Entropy staging stuck on Base Sepolia β€” "Unable to estimate gas usage" despite 500k callback budget

Chain: Base Sepolia (84532)

Timestamp: Started ~2026‑04‑21 18:50 UTC, still stuck at time of posting. First affected request tx: 2026-04-20 20:26 UTC / block 40473046.

Environment

  • EntryPoint / Entropy: 0x41c9e39574f40ad34c79f1c99b66a45efb830d4c
  • Provider: 0x6cc14824ea2918f5de5c2f75a9da968ad4bd6344 (Fortuna staging)
  • My requester contract: 0x5d7Cff5fD3021032Bc05F305b4461BDCE05C7144
  • Stuck sequences: 33454, 33455, 33456, 33459 (all manually recovered via expirePendingRequest since)
  • SDK: @pythnetwork/entropy-sdk-solidity

Steps to reproduce

  1. EOA calls buyPickFourTickets(…) on my requester contract.
  2. Contract internally calls entropy.requestV2{value: entropyFee}() (no‑arg variant).
  3. Pyth Requested(V2) event is emitted on-chain β€” gasLimit: 500_000 (verified on every affected tx).
  4. Fortuna staging picks up the request but never submits revealWithCallback.
  5. Explorer shows my request row with Error response: Unable to estimate gas usage.
  6. Request stays pending indefinitely until I call expirePendingRequest(seq) myself.

Observed scope: zero Revealed events emitted by this provider for ~30+ min across all callers, not just mine. Seems provider-wide, but
wanted to confirm.

What I already verified

  • gasLimit: 500_000 is in every Requested(V2) emitted β€” Pyth clamps up.
  • My entropyCallback uses ~103k gas (measured via debug_traceCall on a forked Base Sepolia, winning and losing paths). Succeeds at 196k
    budget, so 500k = 2.5Γ— headroom.
  • On-chain validateUserOp returns 0 (signature valid).
  • Tested a patched contract with explicit requestV2(300_000) on a Foundry fork β€” Pyth still emits gasLimit: 500_000. Identical behavior to
    no-arg.
  • Other requesters on the same provider emit successful callbacks at ~330k gas used, so the provider itself is wired correctly β€” it’s
    specifically the estimator step that’s failing for my op.

Code snippet (the call into Entropy)

// V6.sol β€” inside buyPickFts
uint128 entropyFee = entropy.getFeeV2();
if (address(this).balance < entropyFee) revert InsufficientEntropyFunds(entropyFee, address(this).balance);
// … USDC transferFrom from buyer …
uint64 sequenceNumber = entropy.requestV2{value: entropyFee}();

Callback (works fine when reached β€” only hits ~103k gas):

function entropyCallback(uint64 sequenceNumber, address provider, bytes32 randomNumber)
internal override nonReentrant
{
// decode pending state, tier settlement, USDC transfers, events
// measured gas usage: ~103k
}

Links

Question

Given 500k is emitted and the callback only uses ~100k: is this a provider-side / Fortuna estimator issue, or is there something I should
still change on the contract side (e.g., explicitly pass a lower gasLimit via the requestV2(gasLimit) overload)? Docs suggest explicit gas
limits as a remedy, but my tests show Pyth clamps to 500k anyway.

Thanks!

Hi, Sorry for the late reply.

I see all of the requested pending were manually recovered. Moving ahead, if you find any pending request, which are not getting fulfilled by the provider. Please send it here and tag me.