compact

Compact Smart Contracts

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "compact" with this command: npx skills add fractionestate/midnight-dev-skills/fractionestate-midnight-dev-skills-compact

Compact Smart Contracts

Compact (being renamed to Minokawa) is Midnight's domain-specific language for privacy-preserving smart contracts. Contracts compile to ZK-SNARKs, enabling selective disclosure of data.

Note: As of compiler v0.26.0, the language is being renamed from "Compact" to "Minokawa" under the Linux Foundation Decentralized Trust. The toolchain commands still use compact .

Quick Start

pragma language_version 0.18;

export ledger message: Opaque<"string">;

export circuit setMessage(input: Opaque<"string">): [] { message = disclose(input); // Makes private input public }

Contract Structure

Every Compact contract has three parts:

  • Pragma - Language version (pragma language_version 0.18; )

  • Ledger - On-chain state declarations

  • Circuits - ZK-proven functions

Core Concepts

Privacy Model

Level Syntax Visibility

Private const x = input;

Only prover

Disclosed disclose(value)

Allowed to become public

Proven disclose(a >= b)

Public boolean only

Witness witness f(...): T;

Private, DApp-provided

Notes:

  • Circuit arguments and witness returns are treated as potentially private (“witness data”).

  • disclose(...) is a compiler acknowledgement: it does not itself publish anything, it just permits an expression to flow into public outputs (ledger writes / exported circuit returns / cross-contract comms).

  • Only Opaque<"string"> and Opaque<"Uint8Array"> are currently supported.

Ledger Types

ledger counter: Counter; // Auto-incrementing ledger balances: Map<Bytes<32>, Uint<64>>; // Key-value ledger members: Set<Field>; // Membership tracking ledger tree: MerkleTree<20, Field>; // Cryptographic proofs

Reference Files

Topic Resource

Type System references/types.md - Full type reference

Standard Library references/stdlib.md - Hashing, coins, EC ops

VS Code extension references/vscode-extension.md - Editor setup and tasks

Ledger Patterns references/ledger-patterns.md - State management

Advanced Patterns references/advanced-patterns.md - Access control, state machines

Detailed API Patterns references/detailed-api-patterns.md - API, code

Templates

Template Description

assets/basic-contract.compact Simple ledger + circuit

assets/token-contract.compact Token with transfers

assets/private-voting.compact Anonymous voting

assets/commitment-reveal.compact Commit-reveal pattern

Compilation

Compile contract

compact compile contracts/my-contract.compact contracts/managed/my-contract

Output structure

contracts/managed/my-contract/ ├── contract/ # JSON artifacts ├── keys/ # ZK proving/verifying keys └── zkir/ # ZK Intermediate Representation

Common Errors

Error Cause Fix

Type mismatch

Wrong bit width Use correct Uint<N> size

Cannot assign private to public

Missing disclose Add disclose() wrapper

Undefined symbol

Import missing Check pragma and imports

Best Practices

  • ✅ Start with pragma language_version 0.18;

  • ✅ Use witness for private inputs that need proofs

  • ✅ Choose smallest Uint<N> that fits your data

  • ✅ Use persistentHash for on-chain data, transientHash for temp

  • ❌ Don't expose secrets via disclose() unnecessarily

  • ❌ Avoid large state (increases gas costs)

Resources

  • Writing a contract

  • Language reference

  • Explicit disclosure

  • Compact standard library

  • Ledger ADTs

  • Opaque data types

  • Examples Repository

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

turborepo

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

nextjs

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

playwright

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

dapp-integration

No summary provided by upstream source.

Repository SourceNeeds Review