AgentSkillsCN

compact-core:compilation-tooling

当您使用Compact编译器(compactc)进行开发、配置构建设置、理解zkir/证明者/验证者的输出产物、设置COMPACT_PATH,或为Midnight智能合约开发集成VS Code语言服务器支持时,可选用此功能。

SKILL.md
--- frontmatter
name: compact-core:compilation-tooling
description: Use when working with the Compact compiler (compactc), configuring build settings, understanding zkir/prover/verifier output artifacts, setting up COMPACT_PATH, or integrating VS Code language server support for Midnight smart contract development.

Compilation Tooling

Complete guide to the Compact compiler (compactc), project organization, build workflows, and understanding compilation output.

Quick Reference

Basic Compilation

bash
# Compile a contract
compactc contract.compact -o output/

# Compile with debug mode (faster, no ZK proofs)
compactc contract.compact -o output/ --skip-zk

# Generate VS Code language server support
compactc contract.compact -o output/ --vscode

Compiler Flags

FlagDescriptionExample
-o, --outputOutput directory-o build/
--skip-zkSkip ZK proof generation (dev mode)--skip-zk
--vscodeGenerate VS Code language server files--vscode
-I, --includeAdd include path-I ./lib
--verboseVerbose output--verbose
--jsonJSON output format--json
--no-typescriptSkip TypeScript generation--no-typescript

Environment Variables

VariablePurposeExample
COMPACT_PATHInclude path resolutionexport COMPACT_PATH="/libs:/project/src"
MIDNIGHT_NETWORKTarget networkexport MIDNIGHT_NETWORK="testnet"

Output Artifacts

Compilation produces several output files:

code
output/
├── zkir/                    # Zero-knowledge intermediate representation
│   ├── circuit_name.zkir    # Circuit IR for each exported circuit
│   └── ...
├── keys/
│   ├── prover/              # Prover keys (for proof generation)
│   │   └── circuit_name.pk
│   └── verifier/            # Verifier keys (for on-chain verification)
│       └── circuit_name.vk
├── contract.ts              # TypeScript types and contract interface
├── witnesses.ts             # Witness type definitions
└── index.ts                 # Main export file

Development Workflow

code
1. Write Compact contract
2. Compile with --skip-zk for fast iteration
3. Run TypeScript tests
4. When ready: Full compile (generates ZK keys)
5. Deploy to testnet

Fast Development Loop

bash
# Fast iteration (no proof generation)
compactc contract.compact -o build/ --skip-zk

# Full build for deployment
compactc contract.compact -o build/

Project Structure

Recommended project layout for Midnight DApps:

code
my-midnight-project/
├── contracts/
│   ├── main.compact           # Main contract entry point
│   ├── types.compact          # Shared type definitions
│   └── lib/                   # Helper modules
│       └── utils.compact
├── src/                       # TypeScript application code
│   ├── index.ts
│   ├── witnesses.ts           # Witness implementations
│   └── deploy.ts
├── build/                     # Compiled output (gitignored)
│   ├── zkir/
│   ├── keys/
│   └── *.ts
├── tests/
│   └── contract.test.ts
├── package.json
├── tsconfig.json
└── .env                       # Environment configuration

VS Code Integration

Generate language server support for VS Code:

bash
compactc contract.compact -o build/ --vscode

This creates .vscode/ configuration for:

  • Syntax highlighting
  • Error diagnostics
  • Type checking
  • Go to definition

References

For detailed documentation:

Examples

Working project templates and scripts: