What we observed
indexer.preprod.midnight.network is currently ~23 hours behind the chain.
This causes all dust spend transactions to fail with Custom error 171
(OutOfDustValidityWindow), because the wallet SDK pulls
blockData.timestamp from the indexer and uses it as DustActions.ctime.
Numbers (captured 2026-05-18 04:19 UTC)
- chain RPC
chain_getBlockheight: 828,592 @ 2026-05-18T04:19:12.000Z - indexer GraphQL
block.timestamp: 814,809 @ 2026-05-17T05:20:54.001Z - WSL
Date.now(): 2026-05-18T04:19:13.108Z (NTP-synced, +1.1s vs chain) - indexer lag: -13,783 blocks ≈ 22.97 hours behind
- WSL ↔ indexer delta: +82,699,910 ms (~23h)
Root cause trace
In @midnight-ntwrk/wallet-sdk-dust-wallet v1,
RunningV1Variant.js:84 does:
Effect.let('currentTime', ({ blockData }) => currentTime ?? blockData.timestamp)
Callers (e.g. WalletFacade.balanceUnboundTransaction) don’t expose
currentTime as an option, so the fallback blockData.timestamp is
always used. When the indexer is stale, this becomes
tblock - 23h and triggers:
// midnight-ledger/ledger/src/dust.rs (ledger-8)
if self.ctime > tblock || self.ctime + params.dust.dust_grace_period < tblock {
Err(MalformedTransaction::OutOfDustValidityWindow { ... })
}
with dust_grace_period (per nel349’s earlier post: ~1-3h) far exceeded.
Impact
- Every new transaction rejected with
1010: Invalid Transaction: Custom error: 171 - Wallet reports
isSynced=true(synced to indexer tip, not chain tip) so
the failure mode is silent until submission - Failure persists indefinitely until indexer catches up
Repro
chain RPC returns the latest block normally. indexer GraphQL block { timestamp height } returns a value ~23h behind. Submitting any
dust-spending tx fails with 171.
Questions
- Is this a known Preprod indexer maintenance state, or unexpected?
- ETA for indexer to catch up?
- Recommended workaround for production-like services that rely on
Preprod for staging (besides waiting)? - Would it be reasonable to expose
currentTimeas a
balanceUnboundTransactionoption so callers can override with
Date.now()when they know the indexer is behind?
Environment
- Network: Preprod
- SDKs:
@midnight-ntwrk/wallet-sdk-*v1 (ledger-v8 compatible) - Node: v22.x
- Indexer endpoint:
https://indexer.preprod.midnight.network/api/v4/graphql - RPC endpoint:
https://rpc.preprod.midnight.network