🪟 Windows TippsSeptemberaktion: Office 2024 für 28 Euro & Win 11 ab 10 Euro(17.09.2026 um 13:28 Uhr)
🪟 Windows ServerAuch Druckerprobleme nach September-Updates - Swiss IT Magazine(17.09.2026 um 16:32 Uhr)
🪟 Windows ServerWindows Update sperrt Domänen-Nutzer aus | Nau.ch(17.09.2026 um 16:36 Uhr)
🪟 Windows ServerKB5124008 Domain Trust Fehler: Ursache und Fix - WindowsPower.de(17.09.2026 um 17:18 Uhr)
🪟 Windows TippsSeptemberaktion: Office 2024 für 28 Euro & Win 11 ab 10 Euro(17.09.2026 um 13:28 Uhr)
🪟 Windows ServerAuch Druckerprobleme nach September-Updates - Swiss IT Magazine(17.09.2026 um 16:32 Uhr)
🪟 Windows ServerWindows Update sperrt Domänen-Nutzer aus | Nau.ch(17.09.2026 um 16:36 Uhr)
🪟 Windows ServerKB5124008 Domain Trust Fehler: Ursache und Fix - WindowsPower.de(17.09.2026 um 17:18 Uhr)
🔧 Programmierung 🕛 vor 4 Monaten 4 Min Lesezeit
0

Building a Full-Stack ZK-Privacy App on Midnight: A Step-by-Step Guide

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht




Introduction



Hello everyone! 🚀



In this post, we are diving deep into Midnight, the privacy-focused blockchain!



Previously, we covered how to connect a frontend application to Lace Wallet. Now, we’re taking the next big step: connecting to a smart contract!



Implementing a full-stack ZK (Zero-Knowledge) application can be tricky, but I’ve navigated the pitfalls and version mismatches so you don't have to. Let’s get started!






What You Will Learn




  • How to develop a full-stack application on Midnight.

  • Concrete source code for calling smart contract functions via Lace Wallet.

  • Real-world "gotchas" and how to solve them.









The Sample App: A Full-Stack Counter



We’ll build a simple app that connects to Lace Wallet, displays balances, and interacts with a Counter smart contract.






Prerequisites





  • .

  • Docker installed (for running the Proof Server).






GitHub Repository



Check out the full source code here:







Technical Features
















































Category Feature Description
Contract Build Compiles Compact files into WASM/ZKIR/Managed Code.
Contract Simulator Logic verification using CounterSimulator without a live network.
CLI Deploy Deploys to Standalone/TestNet and retrieves the contract address.
CLI Interaction Direct CLI commands to increment and check counter values.
App Wallet Connect Integration with Lace Wallet extension to fetch account data.
App Sync Automatically joins and fetches current state from a contract address.
App ZK Increment One-click UI to generate ZK proofs and send transactions.




Tech Stack
































Layer Technology
Frontend React 19, Vite 5, Tailwind CSS v4, Lucide React, RxJS
Contract Compact (Midnight's ZK DSL)
SDK
@midnight-ntwrk/* (SDK v2 / DApp Connector API v4)
Infrastructure Midnight Node, Indexer, Proof Server (via Docker)
Tooling Bun, Biome, Vitest, TypeScript






Deep Dive: Key Implementation Logic



The core logic resides in src/lib/counter.ts and src/hooks/useCounter.ts. This was the most challenging part of the build due to SDK version transitions and compatibility issues with Lace Wallet.





src/lib/counter.ts



This file handles the contract instance creation, state querying, and transaction calls.





1. Contract Instance Creation



We use the SDK to wrap the compiled Compact contract.




CODE
import * as CompactJs from "@midnight-ntwrk/compact-js";

// Initialize the compiled contract instance
export const counterContractInstance: CounterContract = (CompactJs.CompiledContract.make(
"counter",
Counter.Contract as any,
) as any).pipe(
CompactJs.CompiledContract.withVacantWitnesses,
);









2. Querying State



Using queryContractState, we can fetch the ledger data (in this case, the round number of our counter).




CODE
export const getCounterValue = async (
providers: CounterProviders,
contractAddress: ContractAddress,
): Promise<bigint | null> => {
assertIsContractAddress(contractAddress);

const contractState = await providers.publicDataProvider.queryContractState(
contractAddress,
);

return contractState != null
? Counter.ledger(contractState.data as any).round
: null;
};









3. Calling Updates (Transactions)



The magic happens in callTx. This triggers the ZK proof generation and requests a signature from Lace Wallet.




CODE
export const incrementCounter = async (
counterContract: DeployedCounterContract,
): Promise<void> => {
// Call the increment() method on the contract
await (counterContract as any).callTx.increment();
};












Getting Started: Run it Locally






1. Clone & Install






CODE
git clone https://github.com/mashharuki/midnight-lace-react-sample-app.git
cd midnight-lace-react-sample-app
bun install









2. Start the Proof Server



Midnight requires a Proof Server to generate ZK Proofs locally before sending transactions to the network.




CODE
cd pkgs/cli
# Start the Proof Server (Ensure it's version 8.0.3)
docker compose -f standalone.yml up -d









3. Build & Deploy the Contract






CODE
bun contract build

# Deploy to the PreProd network
bun cli preprod






Note: Copy the contract address displayed in the terminal!






4. Setup & Start the Frontend






CODE
# Set environment variables
cp pkgs/app/.env.local.example pkgs/app/.env

# Build and start
bun app build
bun app dev






Visit localhost:5173. You should see the following:





Wait a few moments for the ZK proof generation and network finalization. Once done, refresh to see the updated value!









Sequence Diagrams



Unlike traditional blockchains, Midnight involves a local ZK Proof generation step in every state-changing transaction.






Contract Deployment Flow








Summary



Building with ZK-privacy is a paradigm shift. While there were hurdles—especially around SDK versions and wallet compatibility—overcoming them allows you to build applications that truly respect user privacy.



I even created a custom AI Agent skill to help debug the Midnight SDK logic, which made the final stretch much smoother! You can find my Claude skills in the repo if you're interested.



Happy coding, and see you in the next one where we might tackle some hackathon challenges! 🛡️✨






References





Vollständiger Original-Artikel
Den kompletten Beitrag mit allen Details direkt auf dev.to lesen.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
1 Quelle
Avision AD7100 & AD7100N - Dreifach kontrolliert gegen Doppelblätter und Papierstau
1 Quelle
Windows Server 2022: Mainstream-Support endet am 13. Oktober - ad-hoc-news.de
1 Quelle
Lenovo ThinkAgile VX850 V4: Neue Infrastruktur für KI und Virtualisierung - ad-hoc-news.de
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Building a Full-Stack ZK-Privacy App on Midnight: A Step-by-Step Guide

Thematisch verwandte Begriffe: Building, FullStack, ZKPrivacy, Midnight · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...