Kotlin SDK
In this section, you'll learn how to build a Kotlin SDK using Mopro's native bindings. The process includes the following steps:
- Generate the binding using the Mopro CLI
- Integrate the binding into a Kotlin Package
- How to install the Kotlin SDK via JitPack
- How to use the package
Generate the bindings using the Mopro CLI
To get started with building Mopro bindings, refer to the Getting Started section. If you’d like to generate custom bindings for your own circuits or proving schemes, see the guide: Rust Setup for Android/iOS Bindings.
Then you will have a MoproAndroidBindings
in the project directory.
Integrate the bindings into a Kotlin Package
- Clone the SDK template repository:
git clone https://github.com/zkmopro/mopro-kotlin-package
- Replace the generated bindings:
Replace the bindings directory MoproAndroidBindings/uniffi
and MoproAndroidBindings/jniLibs
with your generated files in the following location:
android/app/src/main/java/uniffi
android/app/src/main/jniLibs
Alternatively, you can run the following commands to copy your generated bindings into the correct location:
cp -r PATH/TO/MoproAndroidBindings/uniffi android/app/src/main/java
cp -r PATH/TO/MoproAndroidBindings/jniLibs android/app/src/main
How to install the Kotlin SDK via JitPack
To get this library from GitHub using JitPack:
Step 1. Add the JitPack repository to your settings.gradle.kts
at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
Step 2. Add the dependency to your build.gradle.kts
:
dependencies {
implementation("com.github.zkmopro:mopro-kotlin-package:Tag") // Or change to your own URL
}
Replace Tag
with the desired release version, e.g. v0.1.0
. See the JitPack page for available versions.
Note: If you're using an Android template from mopro create
, comment out these UniFFI dependencies in your build file to prevent duplicate class errors.
// // Uniffi
// implementation("net.java.dev.jna:jna:5.13.0@aar")
// implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
How to use the package
Here is an example of how to integrate and use this example package
import uniffi.mopro.generateCircomProof
import uniffi.mopro.verifyCircomProof
import uniffi.mopro.ProofLib
val inputStr = "{\"b\":[\"5\"],\"a\":[\"3\"]}"
val zkeyPath = "/path/to/multiplier2_final.zkey"
val proof = generateCircomProof(zkeyPath, inputStr, ProofLib.ARKWORKS)
val isValid = verifyCircomProof(zkeyPath, proof, ProofLib.ARKWORKS)
Or checkout the test-e2e app.