Project Structure
Understanding the generated project structure
Generated Structure
When you create a project using the Midnight Contracts Wizard, it generates a complete directory structure with all necessary files.
Directory Layout
my-project/
├── src/
│ ├── [selected-contracts]/
│ │ └── *.compact
│ └── managed/ # Compiled contracts
├── dist/ # Distribution files
├── package.json
├── tsconfig.json
├── tsconfig.build.json
└── README.mdDirectory Breakdown
/src
Contains all your contract source files.
src/
├── tokenization/ # If selected
│ └── token.compact
├── staking/ # If selected
│ └── staking.compact
├── identity/ # If selected
│ └── identity.compact
├── oracle/ # If selected
│ └── oracle.compact
├── lending/ # If selected
│ └── lending.compact
└── managed/ # Auto-generated
└── *.ts # Compiled TypeScript/src/managed
Automatically generated directory containing compiled TypeScript files from your .compact contracts. Do not edit manually - these files are regenerated on each build.
/dist
Output directory for the final compiled JavaScript and type definitions, ready for distribution or deployment.
Configuration Files
package.json
Contains project metadata, dependencies, and build scripts:
{
"name": "my-project",
"version": "1.0.0",
"scripts": {
"build": "tsc -p tsconfig.build.json",
"compile": "compact-cli compile src/**/*.compact",
"clean": "rm -rf dist src/managed"
},
"dependencies": {
"@midnight-ntwrk/compact-runtime": "^0.8.1",
"@midnight-ntwrk/midnight-js-types": "^2.0.2"
}
}tsconfig.json
Main TypeScript configuration for development:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"lib": ["ES2020"],
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"outDir": "./dist",
"rootDir": "./src"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}tsconfig.build.json
Extends main config for production builds:
{
"extends": "./tsconfig.json",
"compilerOptions": {
"declaration": true,
"declarationMap": true,
"sourceMap": true
},
"exclude": ["**/*.test.ts", "**/*.spec.ts"]
}Contract Files
Each selected contract includes its .compact source file:
Example: src/tokenization/token.compact
contract Token {
// ZK circuit implementations
circuit mint(amount: Secret) -> Public {
// Minting logic
}
circuit transfer(to: Address, amount: Secret) -> Public {
// Transfer logic
}
// Additional circuits...
}README.md
Each generated project includes a comprehensive README with:
- Project overview
- Installation instructions
- Build commands
- Contract descriptions
- Usage examples
- Deployment guide
Next Steps
Now that you understand the project structure:
- Start modifying contracts in
src/ - Run builds with
npm run build - Integrate with your dApp
- Deploy to Midnight Network