For the complete documentation index, see llms.txt
Edda Midnight starter template
Edda Midnight Starter Template은 Midnight Network에서 DApp을 만들기 위한 풀스택 모노레포입니다. Compact 스마트 컨트랙트, React(Vite) 프론트엔드, CLI를 갖춘 동작하는 카운터 애플리케이션을 제공하며, 클론하고 빌드해 Vercel에 바로 배포할 수 있습니다. 라이브 데모는 counter.nebula.builders에서 확인할 수 있습니다.
이 프로젝트에는 영어, 스페인어, 포르투갈어 영상 가이드가 담긴 학습 자료가 포함되어 있어, Midnight을 처음 접하는 개발자에게 실용적인 출발점이 됩니다.
Edda Labs 유지보수자들은 MeshJS/midnight-starter-template을 포크해 이 템플릿을 만들었고, 여기에 Apache-2.0 라이선스, 배포 자동화, 학습 자료 디렉터리를 더했습니다.
이 템플릿은 Midnight Foundation이 아니라 Edda Labs가 유지보수합니다. 감사를 거치지 않았습니다. 스마트 컨트랙트는 학습용으로 만든 최소한의 카운터 예제이므로, 프로덕션에 사용할 때는 별도로 직접 검증하세요.
Prerequisites
템플릿을 사용하기 전에 다음을 갖췄는지 확인하세요.
- Node.js v22+ 설치.
- pnpm v10+ 설치.
- Docker 실행(proof server와 standalone 네트워크용).
- Git Large File Storage (LFS) 설치 - 영지식 증명 아티팩트(
.prover,.verifier,.bzkir,.zkir파일)에 필요합니다. - Compact developer tools 설치 후
0.30.0으로 업데이트. - Preview 네트워크에 맞게 설정한 Lace wallet 브라우저 확장.
Compatibility
이 템플릿은 특정 Compact 컴파일러, 런타임, 도구 버전을 대상으로 합니다. 빌드하기 전에 로컬 환경과 대조해 확인하세요.
| Component | Version | Notes |
|---|---|---|
| Compact compiler | 0.31.0 | compact update +0.31.0로 설정 |
| Compact language | >= 0.23 | 컨트랙트 소스의 pragma 기준 |
| Node.js | 22+ | .node-version과 engines.node에 고정 |
| pnpm | 10.14.0 | package.json의 packageManager로 고정 |
| Build orchestrator | Turborepo | 최상위 스크립트가 turbo run을 통해 실행 |
| Networks | undeployed, Preview, Preprod, Mainnet | standalone undeployed 네트워크는 Docker로 실행 |
| License | Apache-2.0 | (상위 Mesh 템플릿에는 라이선스가 없으며, Edda의 포크가 Apache-2.0을 추가함) |
Monorepo structure
이 템플릿은 코드를 세 개의 워크스페이스 패키지로 나눕니다.
| Package | Purpose |
|---|---|
counter-contract | 공개 round 카운터를 증가시키는 단일 increment circuit을 가진 Compact 스마트 컨트랙트. TypeScript 바인딩과 ZK proof 아티팩트로 컴파일됩니다. |
counter-cli | 터미널에서 컨트랙트를 배포하고 상호작용하는 CLI 도구. 세 네트워크를 모두 지원합니다. |
frontend-vite-react | Lace wallet 연동, TailwindCSS 스타일, TanStack Router를 갖춘 React 19 + Vite 프론트엔드. 배포된 컨트랙트에 연결해 카운터 상태를 표시합니다. |
Installation
저장소를 클론합니다.
git clone https://github.com/eddalabs/midnight-starter-template.git
cd midnight-starter-template
Git Large File Storage(LFS)로 영지식 증명 아티팩트를 내려받습니다.
git lfs install
git lfs pull
Compact Toolchain을 템플릿이 대상으로 하는 버전으로 업데이트합니다.
compact update +0.31.0
의존성을 설치하고 모든 워크스페이스 패키지를 빌드합니다.
pnpm install
pnpm build
counter-cli/와 frontend-vite-react/에는 모두 .env_template 파일이 들어 있습니다. 로컬에서 실행하기 전에 각각 .env로 복사하고 값을 채워 넣으세요.
저장소는 영지식 증명 아티팩트(prover key, verifier key, ZKIR 파일)를 Git LFS로 저장합니다. git lfs install과 git lfs pull을 거치지 않으면 이 파일들이 바이너리 데이터가 아니라 텍스트 포인터로 나타나, 컨트랙트 배포가 "mismatched verifier keys" 오류로 실패합니다.
Run locally
Preview 네트워크를 대상으로 프론트엔드를 실행합니다.
pnpm dev:frontend
외부 네트워크에 의존하지 않는 완전한 로컬 환경을 원하면, standalone 네트워크를 먼저 실행하세요.
pnpm setup-standalone
pnpm dev:frontend
standalone 네트워크는 Midnight node, indexer, proof server 컨테이너를 Docker에서 실행합니다.
Testing
CLI에는 각 네트워크에서 컨트랙트를 엔드투엔드로 실행하는 Vitest 기반 테스트 스위트가 들어 있습니다.
pnpm --filter @eddalabs/counter-cli test-undeployed
pnpm --filter @eddalabs/counter-cli test-preview
pnpm --filter @eddalabs/counter-cli test-preprod
이 스크립트들은 필요한 인프라(undeployed용 컨테이너, preview·preprod용 faucet 호출)를 띄우고, 컨트랙트를 배포한 뒤 circuit 동작을 검증합니다. 직접 컨트랙트 테스트 하네스를 구성할 때 유용한 참고 자료가 됩니다.
The smart contract
컨트랙트는 export된 circuit 하나만 가진 최소한의 카운터입니다.
pragma language_version >= 0.23;
import CompactStandardLibrary;
export ledger round: Counter;
export circuit increment(): [] {
round.increment(1);
}
컨트랙트는 의도적으로 최소한으로 만들어졌습니다. 이 템플릿의 가치는 컨트랙트 로직이 아니라 그 주변을 둘러싼 풀스택 스캐폴딩(지갑 연결, provider 연동, 배포 파이프라인)에 있습니다. 컨트랙트를 직접 만든 것으로 교체하면 주변 인프라가 그에 맞춰 동작합니다.
Deploy to Vercel
Edda Labs 팀은 전체 배포 절차를 DEPLOYMENT_PROCEDURE.md에 정리해 두었습니다. 핵심 단계는 다음과 같습니다.
- 첫 빌드 전에 Vercel 프로젝트 설정에서 Git LFS를 활성화하세요.
- 빌드 명령을
npm run build-production으로 설정하세요(이 스크립트는 워크스페이스를 인식하며, 빌드 전에 LFS 아티팩트를 가져옵니다). - 출력 디렉터리를
frontend-vite-react/dist로 설정하세요. - 배포한 컨트랙트 주소를 담아
VITE_CONTRACT_ADDRESS환경 변수를 추가하세요.
Vercel 설정에서 Git LFS를 활성화하지 않고 배포하면 빌드는 끝나지만 DApp이 런타임에 실패합니다. 증명 아티팩트가 바이너리 파일이 아니라 LFS 포인터이기 때문입니다. 먼저 LFS를 활성화한 뒤, 캐시 없이 다시 배포하세요.
Educational materials
저장소에는 다음 내용을 다루는 체계적인 세션 가이드가 담긴 educational-material/ 디렉터리가 들어 있습니다.
- 영지식 증명과 프라이버시를 강화한 DApp
- devnet, Preview, Testnet 환경
- Edda Labs YouTube 채널의 영상 가이드
- 영어, 스페인어, 포르투갈어로 제공
Resources
- Project repository: 소스, README, 기여자 가이드.
- Live demo: Preview 환경에서 동작하는 배포된 카운터 DApp.
- Deployment procedure: Git LFS 토글을 포함한 단계별 Vercel 배포.
- Educational material: devnet, Preview, Testnet 워크플로 세션 가이드.
- Edda Labs: 유지보수 조직. 형제 저장소:
eddalabs/midnight-contracts. - Upstream template (MeshJS): Edda의 포크가 기반으로 삼은 원본 스타터.
Report issues
템플릿 관련 문제는 Edda Labs 트래커에 제보하세요.
이 문서 페이지 관련 문제는 Midnight docs 저장소에 제보하세요.