Problem
All shielded kernel operations (receiveShielded, mintShieldedToken, sendShielded) fail with HTTP 400 from the proof server. Unshielded operations work fine on the same setup.
Minimal Reproduce
Contract with only 1 circuit — exact pattern from Compact standard library docs:
pragma language_version >= 0.20;
import CompactStandardLibrary;
witness localSecret(): Bytes<32>;
constructor() { const secret = localSecret(); }
export circuit receiveShieldedTokens(coin: ShieldedCoinInfo): [] {
receiveShielded(disclose(coin));
}
Compiles successfully. Deploy succeeds. Calling receiveShieldedTokens → proof server returns 400:
POST http://localhost:6300/prove → 400 Bad Request
Environment
┌───────────────────┬──────────────────────────────────┐
│ Component │ Version │
├───────────────────┼──────────────────────────────────┤
│ Compact Toolchain │ 0.5.1 (compactc 0.30.0) │
├───────────────────┼──────────────────────────────────┤
│ Proof Server │ midnightntwrk/proof-server:8.0.3 │
├───────────────────┼──────────────────────────────────┤
│ Ledger │ 8.0.3 │
├───────────────────┼──────────────────────────────────┤
│ Midnight.js SDK │ 4.0.2 │
├───────────────────┼──────────────────────────────────┤
│ Compact Runtime │ 0.15.0 │
├───────────────────┼──────────────────────────────────┤
│ Network │ preprod │
├───────────────────┼──────────────────────────────────┤
│ OS │ macOS Apple Silicon (Docker VMM) │
└───────────────────┴──────────────────────────────────┘
What I tested
- Minimal contract (1 circuit, zero ledger state) → 400
- Full contract (9 circuits) → 400
- Added witness to force larger proving key → 400
- Compact Toolchain 0.5.0 and 0.5.1 → both 400
- 3 different proof server images (official 8.0.3, meshsdk 1.0.0, pre-baked full params) → all 400
Unshielded equivalents (receiveUnshielded, mintUnshieldedToken, sendUnshielded) all work fine.
Full reproduce repo
Branch with minimal test contract + test web page + detailed bug report:
Steps: see BUG_REPORT_SHIELDED.md in the repo.
Question
Is this a known limitation of proof server 8.0.3? Are shielded kernel operations expected to work on preprod currently?