Skip to main content
For the complete documentation index, see llms.txt

Deploy the hello world contract

Hello World tutorial은 미리 자금이 충전된 지갑이 있는 Docker 기반 로컬 devnet에 컨트랙트를 배포합니다. 이 가이드에서는 같은 example-hello-world 컨트랙트를 메인넷 출시 전 최종 테스트에 쓰는 공개 Midnight 테스트넷인 Preprod에 배포합니다. 배포가 끝나면 컨트랙트가 Preprod 블록 탐색기에 표시되고 모든 Preprod indexer에서 접근할 수 있습니다.

Prerequisites

시작하기 전에 다음을 준비하세요:

  • 로컬 devnet에서 Hello World tutorial 완료(yarn test:local 통과)
  • 컨트랙트가 이미 컴파일된 example-hello-world 클론(contracts/managed/hello-world/가 채워진 상태)
  • Preprod 네트워크용으로 설정된 Midnight 호환 지갑(Lace, 1AM 등), 또는 본인이 관리하는 24단어 mnemonic / 64자 hex seed
  • 실행 중인 Docker engine(proof server가 컨테이너로 실행됨)
1

Generate a wallet

배포 및 호출 트랜잭션에 서명하려면 Preprod 네트워크 지갑이 필요합니다. 테스트 스위트는 24단어 BIP-39 mnemonic과 64자 hex seed를 모두 지원하므로, 지갑이 내보내는 형식을 사용하면 됩니다.

Midnight 호환 지갑 사용(Lace, 1AM 등):

  1. 지갑에서 네트워크를 Preprod로 전환하고 새 지갑을 생성합니다. seed phrase를 안전하게 저장하세요.
  2. Unshielded 주소를 확인해 둡니다. 다음 단계에서 faucet에 붙여넣습니다.

이 seed phrase는 3단계에서 .env.preprod에 붙여넣습니다.

직접 키 사용: 24단어 BIP-39 mnemonic이나 64자 hex seed라면 무엇이든 동작합니다. 테스트 스위트가 여기서 shielded 키와 unshielded 키를 모두 파생합니다.

2

Fund the wallet with tNIGHT and tDUST

Preprod 트랜잭션 수수료는 tDUST로 지불하며, tDUST는 tNIGHT를 보유(및 위임)하면 생성됩니다. 자금 충전은 두 단계로 진행됩니다:

  1. faucet에서 tNIGHT 받기: Preprod faucet을 열고 Unshielded 주소를 붙여넣은 뒤 Request tokens를 클릭합니다. faucet이 몇 분 안에 1000 tNIGHT를 보냅니다.

  2. 위임하여 tDUST 생성 시작: 지갑의 위임 기능으로 tNIGHT를 위임하면 사용 가능한 tDUST 생성이 시작됩니다. 정확한 메뉴 이름은 지갑마다 다릅니다. tDUST가 없으면 테스트 스크립트가 Wallet.InsufficientFunds 오류로 실패합니다.

faucet 문제 해결은 Get faucet tokens를 참고하세요.

Verify balances before continuing

테스트를 실행하기 전에 지갑에서 tNIGHT와 tDUST 잔액을 모두 확인하세요. tDUST 잔액이 0이 아닐 때까지 기다립니다. DUST 생성은 네트워크가 위임 트랜잭션을 온체인에서 확정한 뒤에야 시작됩니다.

3

Configure .env.preprod

리포지토리에는 예제 파일이 포함되어 있습니다. 리포지토리 루트에서:

cp .env.preprod.example .env.preprod

.env.preprod을 열고 두 변수 중 하나만 설정하세요. 나머지 줄은 완전히 삭제합니다. 둘 다 정의하면 오류가 발생합니다.

# Use this line if your wallet exports a 24-word phrase:
MIDNIGHT_PREPROD_MNEMONIC=word1 word2 word3 ... word24

# Or this line if you have a raw seed (hex, no 0x prefix):
MIDNIGHT_PREPROD_SEED=abcd1234... # 64 hex characters
Keep .env.preprod private

이 파일에는 Preprod 지갑을 제어하는 비밀 정보가 들어 있습니다. 이미 .gitignore에 등록되어 있으니, 커밋하거나 공유하거나 채팅에 붙여넣지 마세요.

4

Start the proof server

proof server는 테스트가 네트워크에 제출하는 영지식 증명을 생성합니다. Preprod에서는 로컬 devnet 스택 전체가 아니라 proof server만 있으면 됩니다(테스트가 공개 Preprod 엔드포인트에 연결하므로 로컬 노드나 indexer는 필요하지 않습니다).

별도 터미널에서 프로젝트 루트로 이동해 실행하세요:

yarn proof:up

이 명령은 compose.yml에서 proof-server 서비스만 시작하고, http://127.0.0.1:6300에서 정상 상태가 될 때까지 기다립니다.

5

Run the test against Preprod

기본 터미널로 돌아와서:

yarn test:preprod

이 스크립트는 다음을 수행합니다:

  1. .env.preprod의 비밀 정보로 지갑을 빌드합니다.
  2. Preprod indexer에 맞춰 지갑을 동기화합니다. 첫 실행에서는 오래 걸릴 수 있습니다(기본 동기화 타임아웃은 로컬 10분, 원격 네트워크 60분). 로그가 상태 방출마다 한 줄씩 출력하므로 진행 상황을 지켜볼 수 있습니다.
  3. 자금이 있는지 확인하고, 아직 등록되지 않았다면 DUST 생성을 위해 지갑을 등록합니다.
  4. hello-world 컨트랙트를 배포하고 storeMessage("Hello World!") 호출을 제출합니다.

성공하면 다음과 유사한 출력으로 끝납니다:

INFO: Wallet sync complete after 23 emissions
INFO: Wallet NIGHT balance on 'preprod': ...
INFO: Providers initialized on 'preprod'. Ready to test!
INFO: Creating private state...
INFO: Setting the contract address...
INFO: Contract deployed at: bba6579743ae23b44301d4a9f8df30dbd5244d63a59d8fbc2c9fc7ea521a04f8
✓ src/test/hw.test.ts (2 tests)
✓ Hello World Contract (preprod) > Deploys the contract
✓ Hello World Contract (preprod) > Stores Hello World!
6

Verify on the block explorer

로그의 Contract deployed at: ... 줄에서 컨트랙트 주소를 복사해 Preprod 탐색기에서 조회하세요:

탐색기에는 배포 트랜잭션과 그 뒤에 이어지는 호출 트랜잭션이 표시됩니다.

7

Shut down

작업이 끝나면 proof server를 중지하세요:

yarn proof:down

컨테이너는 종료되지만 이미지는 다음 실행을 위해 캐시에 남습니다.

Troubleshooting

Wallet.InsufficientFunds: 지갑에 사용 가능한 tDUST가 없습니다. 지갑에서 tNIGHT뿐 아니라 tDUST 잔액도 0이 아닌지 확인하세요. DUST 생성은 위임 트랜잭션이 확정된 뒤에야 시작됩니다.

동기화가 끝나지 않음: 새로 만든 지갑의 Preprod 동기화는 느릴 수 있습니다. 기본 60분 타임아웃에 걸리면 MIDNIGHT_SYNC_TIMEOUT_MS 환경 변수로 늘리세요:

MIDNIGHT_SYNC_TIMEOUT_MS=7200000 yarn test:preprod # 2 hours

Set only one of MIDNIGHT_PREPROD_MNEMONIC or MIDNIGHT_PREPROD_SEED: .env.preprod에 두 변수를 모두 정의했습니다. 하나를 삭제하세요.

proof server에 연결할 수 없음: yarn proof:up이 완료되었고 http://127.0.0.1:6300이 응답하는지 확인하세요. 포트 6300이 사용 중이면 충돌하는 프로세스를 중지하거나 compose.yml에서 호스트 포트를 변경하세요.

Deploy to Preview

같은 방식으로 Preview도 지원합니다:

  1. .env.preview.example.env.preview로 복사하고 MIDNIGHT_PREVIEW_MNEMONIC 또는 MIDNIGHT_PREVIEW_SEED를 입력합니다.
  2. Preview faucet에서 지갑에 자금을 충전하고 tDUST를 위해 위임합니다.
  3. yarn test:preview를 실행합니다.

전체 네트워크 URL과 탐색기 목록은 Environments and endpoints를 참고하세요.