🔧 Programmierung 🕛 vor 1 Jahr 4 Min Lesezeit
0

Step-by-Step Guide to Building a zkApp with O1js

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

Zero-knowledge applications (zkApps) enable privacy-preserving decentralized apps on Mina Protocol. This tutorial uses O1js (formerly SnarkyJS), a TypeScript library for building zk-SNARK circuits, to create a simple zkApp.









Prerequisites




  1. Basic knowledge of TypeScript/JavaScript.

  2. Node.js (v18+ recommended).

  3. Familiarity with Mina Protocol concepts (e.g., zk-SNARKs).

  4. Terminal/CLI proficiency.









1. Environment Setup






Install Dependencies






CODE
npm install -g zkapp-cli # Mina zkApp CLI tool
npm install -g typescript ts-node # TypeScript tools












2. Initialize Project



Create a new zkApp project using the Mina CLI:




CODE
zk create my-zkapp --template simple # Use the "simple" template
cd my-zkapp
npm install









Project Structure






CODE
my-zkapp/
├── src/
│ ├── contracts/ # zkApp smart contracts
│ ├── tests/ # Test files
│ └── index.ts # Main entry (optional)
├── zkapp.config.json # Configuration
└── package.json












3. Write a zkApp Contract



Create src/contracts/NumberUpdate.ts:




CODE
import {
SmartContract,
State,
state,
method,
PublicKey,
PrivateKey,
} from 'o1js';

export class NumberUpdate extends SmartContract {
@state(Field) number = State<Field>(); // On-chain state

init() {
super.init();
this.number.set(Field(0)); // Initialize state
}

// Method to update the number with a constraint
@method updateNumber(newNumber: Field) {
const currentNumber = this.number.get();
this.number.assertEquals(currentNumber); // Verify current state
newNumber.assertLessThan(Field(100)); // Custom constraint: new number < 100
this.number.set(newNumber); // Update state
}
}









Key Concepts





  • @state: Declares on-chain state.


  • @method: Defines a zk-SNARK circuit (private computation).


  • Field: A primitive for finite field arithmetic.









4. Compile the Contract



Compile to generate proofs and AVM bytecode:




CODE
zk compile src/contracts/NumberUpdate.ts







  • Compilation may take 2-10 minutes (generates zk-SNARK keys).









5. Write Tests



Create src/tests/NumberUpdate.test.ts:




CODE
import { Test, expect } from 'zken';
import { NumberUpdate } from '../contracts/NumberUpdate';
import { Field, PrivateKey } from 'o1js';

describe('NumberUpdate', () => {
let zkApp: NumberUpdate;
let deployer: PrivateKey;

beforeAll(async () => {
deployer = PrivateKey.random(); // Test account
});

beforeEach(() => {
zkApp = new NumberUpdate(deployer.toPublicKey());
});

it('updates number correctly', async () => {
await zkApp.compile(); // Ensure contract is compiled

// Deploy
const tx = await Mina.transaction(deployer, () => {
zkApp.deploy();
zkApp.updateNumber(Field(42)); // Update to 42
});
await tx.prove(); // Generate proof
await tx.sign([deployer]).send(); // Submit to testnet

// Verify on-chain state
expect(zkApp.number.get()).toEqual(Field(42));
});
});






Run tests:




CODE
zk test












6. Deploy to Mina Network






Configure Network



Update zkapp.config.json:




CODE
{
"networks": {
"berkeley": {
"url": "https://proxy.berkeley.minaexplorer.com/graphql",
"keyPath": "./keys/berkeley.json"
}
}
}









Fund Account & Deploy




  1. Get testnet MINA from


  2. 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
6 Quellen
CVE-2022-44255 | TOTOLINK LR350 9.3.5u.6369_B20220309 buffer overflow (EUVD-2022-47204)
2 Quellen
CVE-2026-68426 | Linux Kernel up to 6.18.41/7.1.5/7.2-rc3 xfrm validate_xmit_skb_list use after free (Nessus ID 346426)
1 Quelle
Windows 11 Probleme mit gültiger Domänenanmeldung nach September-Update [Workaround]
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Step-by-Step Guide to Building a zkApp with O1js

Thematisch verwandte Begriffe: StepbyStep, Guide, Building, zkApp · 6 Treffer

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 ...