Bulletin board CLI
이 튜토리얼에서는 게시판 컨트랙트 튜토리얼에서 생성한 게시판 스마트 컨트랙트 와 상호작용하는 명령줄 인터페이스를 구축하는 방법을 설명합니다.
Prerequisites
시작하기 전에 다음 사항을 확인하세요:
- 게시판 컨트랙트 튜토리얼을 완료하고 컨트랙트가
contract/src/managed/bboard/에 컴파일되어 있어야 합니다 - Docker Desktop이 설치되어 실행 중이어야 합니다
- Node.js 버전 22 이상
Architecture overview
게시판 CLI는 세 개의 패키지로 구성된 모노레포 구조를 사용합니다:
- contract: Compact 스마트 컨트랙트 (이전 튜토리얼에서 작성)
- api: 컨트랙트 상호작용을 위한 재사용 가능한 추상화 계층
- bboard-cli: 명령줄 애플리케이션
API 패키지는 컨트랙트 배포, 상태 관리, 트랜잭션 제출을 처리하면서 실시간 업데이트를 위한 반응형 상태 observable을 노출하는 고수준 인터페이스(BBoardAPI)를 제공합니다.
CLI 패키지는 지갑 관리, 사용자 상호작용 및 메인 애플리케이션 로직을 구현합니다.
Set up the root package
example-bboard 루트 디렉터리에서 package.json을 생성하거 나 업데이트합니다:
{
"name": "@midnight-ntwrk/example-bboard",
"version": "0.1.0",
"author": "IOG",
"license": "MIT",
"private": true,
"type": "module",
"workspaces": {
"packages": [
"bboard-cli",
"api",
"contract"
]
},
"dependencies": {
"@midnight-ntwrk/dapp-connector-api": "^4.0.0",
"@midnight-ntwrk/ledger-v8": "^8.0.0",
"@midnight-ntwrk/midnight-js-compact": "^4.0.0",
"@midnight-ntwrk/midnight-js-contracts": "^4.0.0",
"@midnight-ntwrk/midnight-js-fetch-zk-config-provider": "^4.0.0",
"@midnight-ntwrk/midnight-js-http-client-proof-provider": "^4.0.0",
"@midnight-ntwrk/midnight-js-indexer-public-data-provider": "^4.0.0",
"@midnight-ntwrk/midnight-js-level-private-state-provider": "^4.0.0",
"@midnight-ntwrk/midnight-js-node-zk-config-provider": "^4.0.0",
"@midnight-ntwrk/midnight-js-types": "^4.0.0",
"@midnight-ntwrk/midnight-js-utils": "^4.0.0",
"@midnight-ntwrk/testkit-js": "^4.0.0",
"@midnight-ntwrk/wallet-sdk-address-format": "^3.0.0",
"@midnight-ntwrk/wallet-sdk-facade": "^3.0.0",
"@midnight-ntwrk/wallet-sdk-hd": "^3.0.0",
"axios": "^1.13.5",
"buffer": "^6.0.3",
"fp-ts": "^2.16.11",
"pino": "^10.3.0",
"pino-pretty": "^13.1.3",
"rxjs": "^7.8.2",
"semver": "^7.7.3",
"testcontainers": "^11.11.0",
"ws": "^8.19.0"
},
"devDependencies": {
"@eslint/js": "^9.39.2",
"@originjs/vite-plugin-commonjs": "^1.0.3",
"@types/babel__core": "^7.20.5",
"@types/semver": "^7.7.1",
"@types/ws": "^8.18.1",
"@typescript-eslint/eslint-plugin": "^8.54.0",
"@typescript-eslint/parser": "^8.54.0",
"eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-react": "^7.37.5",
"http-server": "^14.1.1",
"prettier": "^3.8.1",
"ts-node": "^10.9.2",
"typescript": "^5.9.3",
"typescript-eslint": "^8.54.0",
"vite": "^7.3.1",
"vite-plugin-top-level-await": "^1.6.0",
"vite-plugin-wasm": "^3.5.0"
}
}
workspaces 설정은 npm에게 contract, API, bboard-cli를 연결된 패키지로 관리하도록 지시합니다. 루트 수준에서 정의된 의존성은 모든 workspace에서 공유되어 중복을 줄이고 버전 일관성을 보장합니다.
호환되는 버전을 사용하고 있는지 확인하려면 항상 릴리스 호환성 매트릭스를 참조하세요.
루트에서 모든 의존성을 설치합니다:
npm install
이 명령은 루트 패키지와 모든 workspace 패키지의 의존성을 설치하고, 로컬 개발을 위한 심볼릭 링크를 생성합니다.
Implementation guides
게시판 CLI를 구축하려면 다음 구현 가이드를 순서대로 따르세요:
-
API 구현: 컨트랙트 배포, 상태 관리, 트랜잭션 제출을 처리하는
BBoardAPI클래스로 API 패키지를 설정합니다. -
CLI 구현: 지갑 관리, DUST 생성, 대화형 명령줄 인터페이스로 CLI 패키지를 설정합니다.
Project structure
완성된 example-bboard 프로젝트는 npm workspaces를 사용하는 모노레포 구조를 사용합니다:
example-bboard/
├── package.json # 루트 패키지 (workspaces 포함)
├── contract/ # Compact 컨트랙트
│ ├── src/