CircuitExecutor

class CircuitExecutor(context: Context, ioDispatcher: CoroutineDispatcher = Dispatchers.IO)

Executes Compact smart contract circuits on Android via QuickJS + Rust FFI.

Wraps the full lifecycle: QuickJS environment setup, native FFI registration, runtime loading, witness bridging, circuit execution, transcript transformation, and transaction assembly.

Usage:

val executor = CircuitExecutor(context)
val result = executor.executeCircuit(
contractJs = loadContractIife(),
contractAddress = "abcd...",
circuitName = "post",
circuitArgs = listOf("'Hello from Android!'"),
witnesses = mapOf("localSecretKey" to WitnessProvider {
WitnessResult(null, secretKeyBytes)
}),
initialPrivateState = "{ secretKey: new Uint8Array(32) }",
coinPublicKey = ByteArray(32),
)
// result.unprovenTxHex is ready for proving

Constructors

Link copied to clipboard
constructor(context: Context, ioDispatcher: CoroutineDispatcher = Dispatchers.IO)

Types

Link copied to clipboard
object Companion

Functions

Link copied to clipboard
suspend fun executeCircuit(contractJs: String, contractAddress: String, circuitName: String, circuitArgs: List<String> = emptyList(), witnesses: Map<String, WitnessProvider>, initialPrivateState: String, coinPublicKey: ByteArray, networkId: String = "undeployed", onChainStateHex: String? = null, ledgerParametersHex: String? = null): ExecutionResult

Execute a contract circuit and assemble an UnprovenTransaction.

Link copied to clipboard
suspend fun executeConstructor(contractJs: String, witnesses: Map<String, WitnessProvider>, initialPrivateState: String, coinPublicKey: ByteArray, networkId: String = "undeployed", verifierKeys: Map<String, String> = emptyMap()): DeployExecutionResult