Build a dapp on Chia
모든 DIG 프리미티브는 각각 독립적으로 문서화되어 있습니다 — 스캐폴딩, 인페이지 지갑, 읽기 경로, 스펜드, 배포까지. 이 페이지는 이 모든 것을 하나로 엮어 실제로 배포된 dapp을 완성하는 단 하나의 흐름입니다. 빈 폴더에서 시작해, 자신의 도메인에서 라이브로 동작하는 지갑 연동 React 앱으로 마무리합니다.
게시 단계 전까지 전체 루프는 무료입니다 — 스캐폴딩, 개발, 미리보기는 비용이 들지 않습니다. 균일 capsule 가격을 $DIG로 지불하는 것은 배포 단계뿐입니다.
new ──▶ dev ──▶ wire wallet (dig-sdk) ──▶ build a spend (chip35) ──▶ deploy ──▶ custom domain
free free free free capsule price free
필요한 것
dig-storeCLI 설치.- Node 18+ 및
npm. - 자금이 있는 Chia 지갑 — 배포 단계에서만 필요(균일 capsule 가격의 $DIG + 소액의 XCH 수수료). 그 전까지는 모두 무료입니다.
1. React 앱 스캐폴딩하기 — 무료, 체인 없음
digs new는 실행 가능하고 지갑이 연결된 프로젝트를 생성합니다. React 템플릿을 선택하세요.
digs new vite-react my-dapp
cd my-dapp
Vite + React 앱과 dig.toml(output-dir = "dist", build-command = "npm install && npm run build"), 그리고 이미 인페이지 지갑에 연결된 App.jsx가 생성됩니다. store는 아직 민팅되지 않으며 아무것도 지출되지 않습니다 — new는 순수하게 로컬에서만 이루어집니다.
npm create dig-appnpm create dig-app@latest my-dapp -- --template vite-react는 npm에서 곧바로 동일한 템플릿을 스캐폴딩합니다 — JS 진입점이며, 시작하기 위해 dig-store 설치가 필요 없습니다. 다섯 가지 템플릿과 두 진입점을 비교한 내용은 앱 스캐폴딩을 참고하세요.
2. 실제 읽기 경로로 개발하기 — 무료
digs dev
dev는 빌드를 실행하고, 결과물을 진짜 chia:// 읽기 경로(컴파일 → 검증 → 복호화)로 서비스하며, 실제 지갑 없이도 지갑 흐름을 만들 수 있도록 **window.chia 개발용 셰임(shim)**을 주입합니다. src/App.jsx를 편집하고 저장하면 페이지가 실시간으로 다시 로드됩니다 — 체인과의 상호작용이나 지출 없이 방문자가 보게 될 것과 정확히 동일합니다.
3. SDK로 지갑 연결하기 — window.chia + WalletConnect 폴백
스캐폴드는 window.chia와 직접 통신하며, 이는 DIG Browser 안에서 완벽하게 동작합니다. 다른 브라우저의 사용자도 지원하려면 SDK를 추가하세요 — SDK는 주입된 window.chia 지갑을 우선 사용하고, 없으면 WalletConnect → Sage로 폴백하며, 하나의 정규화된 인터페이스 뒤에서 이루어지므로 지갑 흐름을 한 번만 작성하면 됩니다.
npm i @dignetwork/dig-sdk
npm i @walletconnect/sign-client # optional: only for the WalletConnect fallback
// src/App.jsx
import { useState } from "react";
import { ChiaProvider } from "@dignetwork/dig-sdk";
export default function App() {
const [address, setAddress] = useState(null);
async function login() {
// "auto" prefers the injected DIG Browser wallet, else WalletConnect → Sage.
const provider = await ChiaProvider.connect({
mode: "auto",
walletConnect: {
projectId: import.meta.env.VITE_WC_PROJECT_ID, // a PUBLIC build-time value
metadata: {
name: "My DIG dapp",
description: "Built with @dignetwork/dig-sdk",
url: "https://my-dapp.example",
icons: ["https://my-dapp.example/icon.png"],
},
onUri: (uri) => console.log("Scan to connect:", uri), // render a QR
},
});
setAddress(await provider.getAddress());
}
return (
<main>
<h1>My DIG dapp</h1>
<button onClick={login}>Connect wallet</button>
{address && <p>Connected: {address}</p>}
</main>
);
}
하나의 connect() 호출이 DIG Browser에서는 QR도 relay도 없이, 그 외 모든 곳에서는 WalletConnect로 동작합니다. provider.backend를 보면 어떤 전송 방식으로 연결되었는지 알 수 있습니다. 메서드 이름과 반환 형태는 어느 쪽이든 동일합니다 — 통합 가이드는 window.chia 사용하기를, 정확한 메서드/파라미터/반환값/오류 계약은 정규 window.chia 프로바이더 스펙을 참고하세요.
VITE_WC_PROJECT_ID는 번들에 컴파일되어 누구나 읽을 수 있으며, WalletConnect 클라우드 id로서는 그것이 올바른 사용법입니다. 절대 지갑 시드, 배포 키, 또는 어떤 비밀 정보도 번들에 넣지 마세요. capsule은 서버 비밀이 전혀 없는 blind 정적 아티팩트입니다.