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!