compact
SKILL.md
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">andOpaque<"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
witnessfor private inputs that need proofs - ✅ Choose smallest
Uint<N>that fits your data - ✅ Use
persistentHashfor on-chain data,transientHashfor temp - ❌ Don't expose secrets via
disclose()unnecessarily - ❌ Avoid large state (increases gas costs)
Resources
Weekly Installs
3
Repository
fractionestate/…v-skillsFirst Seen
Jan 31, 2026
Security Audits
Installed on
gemini-cli3
opencode2
antigravity2
replit2
claude-code2
github-copilot2