BACK TO JOURNALEngineering
Under the Hood: Integrating Freighter Wallet with ZK Circuits
A developer walkthrough of binding private keys to anonymous zero-knowledge commitments using the Freighter browser API.
AS
Ashish
May 29, 2026•10 min read
FREIGHTER BINDINGREADY
const signature = await signAuthEntry(entry);
const witness = generateWitness(signature);
// private commitments
User Address reduced to field element:
19827384910283748291038472910382918...
Integrating browser-based wallets with zero-knowledge circuits requires bridging two distinct cryptographic environments. In this developer guide, we walk through how Luminar utilizes the Freighter Wallet browser API to obtain a secure signature, which is then used as a private seed within the client-side Noir circuit.
This seed generates the Poseidon2 nullifier and user commitments. We detail the mechanics of Freighter's API calls, the modular conversion of Ed25519 public keys to BN254 field elements, and how to verify that the generated ZK witness matches the user's connected wallet address without revealing it.
