readCircuitLocal

suspend fun readCircuitLocal(contractJs: String, circuitName: String, circuitArgs: List<String> = emptyList(), initialPrivateState: String, coinPublicKey: ByteArray, constructorArgs: List<String> = emptyList(), networkId: String = "undeployed", witnesses: Map<String, WitnessProvider> = emptyMap()): String

Run a circuit LOCALLY against the contract's initialState() — no on-chain state, no fetch. The engine-level counterpart of readCircuit for state-independent (pure) circuits: it omits the onChainStateHex entirely (null → executeInQuickJs builds from initialState()), so there is no deployed instance to validate and no hex to supply.

Intended for computing things a contract exposes as PURE circuits before any deploy — e.g. persistentHash commitments — so the app derives them with the contract's OWN logic rather than a reimplementation. An impure circuit run this way sees only empty initial state.