Building zkApp on Android
Build a zkApp using Chrome mobile on Android and interact with Auro Wallet.
Step
Get projectId from Reown.
Init client.
const client = await SignClient.init({
projectId: process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECY_ID,
metadata: {
name: "Auro Wallet Demo",
description: "A Mina Protocol dApp with WalletConnect",
url: window.location.origin,
icons: ["https://www.aurowallet.com/imgs/auro.png"],
},
logger: "warn",
});
Request connect wallet.
const connectParams = {
requiredNamespaces: {
mina: {
chains: ["mina:mainnet", "mina:devnet", "zeko:testnet"], // Chains currently supported by the zkApp, requiring Auro Wallet support.
methods: [
// The current zkApp requires the following methods, consistent with other methods supported by Auro Wallet.
// The supported methods are listed below:
// List only the required methods:
"mina_sendPayment",
"mina_sendStakeDelegation",
"mina_sendTransaction",
"mina_signMessage",
"mina_sign_JsonMessage",
"mina_signFields",
"mina_createNullifier",
"mina_verifyMessage",
"mina_verify_JsonMessage",
"mina_verifyFields",
"wallet_info",
],
events: ["accountsChanged", "chainChanged"],
},
},
};
Set Up Event Listener (Optional). If the app requires authorization or signing, you can configure it to trigger the app for operations upon a successful callback, or prompt the user in the zkApp to manually switch to Auro Wallet.
client.on("session_request_sent", (event: any) => {
console.log("Session request sent:", event);
if (
[
"mina_sendPayment",
"mina_sendStakeDelegation",
"mina_sendTransaction",
"mina_signMessage",
"mina_sign_JsonMessage",
"mina_signFields",
"mina_createNullifier",
].includes(event?.request?.method)
) {
const deepLink = `aurowallet://`;
console.log("Auro Wallet Deep Link for request:", deepLink);
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
if (isMobile) {
openDeepLink(deepLink);
}
}
});
UI Interaction.
const handleSendZkTransaction = async () => {
if (!client || !session || !account) {
setError("Please connect wallet first");
return;
}
const zkTransaction = await getZkBuildBody(selectedChain, account);
const zkRequest = {
topic: session.topic,
chainId: selectedChain,
request: {
method: "mina_sendTransaction",
params: {
// Optional: Specifies the current browser's scheme.
// If set, the app automatically returns to the provided scheme's browser;
// otherwise, the app only displays a pop-up prompting the user to return.
scheme: chromeScheme,
from: account,
transaction: zkTransaction,
feePayer: {
fee: "0.01", // Optional
memo: "test zkApp", // Optional
},
},
},
};
const result = await client.request(zkRequest);
};
Reference Links
Test Website Visit Test Website
Core Code Examples
WalletConnect Integration Documentation
Last updated