# 빠른 시작

> 로컬 노드에서 시작하는 NeuroChain 빠른 시작 — 네트워크 확인, 지갑 생성과 충전, 서명된 송금, 컨트랙트 조회와 호출, NRC-20 토큰 배포.

Source: https://docs.nro.world/ko/build/quickstart

**로컬 네트워크**에서 처음부터 토큰 배포까지 약 10분이면 됩니다.

::: info 시작하기 전에
공개 네트워크는 아직 운영되지 않으므로, 이 가이드는 여러분의 컴퓨터에서 실행하는 노드와 gateway를 사용합니다. `CHAIN_ENV=testnet`으로 실행하세요(이 설정으로 faucet이 활성화됩니다) — [노드 실행](/ko/operate/node)을 참고하세요. 그다음:

```bash
export NODE_RPC=http://localhost:9933
export GATEWAY=http://localhost:3000
```
:::

## 1. 네트워크 확인

```bash
curl -s "$GATEWAY/api/v1/network/status"
curl -s "$NODE_RPC/health"
```

`height`는 몇 초마다 증가해야 합니다. 로컬 노드 하나에서 `bft_ready: false`가 나오는 것은 정상입니다. 검증자가 7개 미만이라는 뜻입니다.

## 2. 지갑 만들기

웹 앱(`http://localhost:8080`)을 열고 **Create wallet**을 선택한 뒤 24개 단어를 적어 두세요. 앱에 `neuro:<15 hex>.human` 주소가 표시됩니다.

또는 [SDK](./sdk)로 여러분의 페이지에서 직접 도출할 수 있습니다.

```js
import { NeuroChain } from './neurochain.js'

const nc = new NeuroChain({ gateway: 'http://localhost:3000' })
const wallet = await nc.walletFromMnemonic('<24개 단어>')
console.log(wallet.address, wallet.publicKey)
```

서명에는 SDK가 브라우저에서 로드하는 암호화 WASM 모듈이 필요합니다. [JavaScript SDK → 암호화 모듈](./sdk#crypto-module)을 참고하세요.

## 3. 충전하기

```bash
curl -s -X POST "$NODE_RPC/api/v1/faucet" \
  -H 'Content-Type: application/json' \
  -d '{"address":"neuro:<15 hex>.human","public_key":"<공개 키 hex>"}'
```

faucet은 기본적으로 테스트용 NRO 50개를 지급하고 여러분의 공개 키를 주소에 바인딩합니다. 웹 앱의 **Faucet** 버튼도 같은 일을 합니다.

```bash
curl -s "$GATEWAY/api/v1/accounts/neuro:<15 hex>.human"
```

`balance_human`(NRO)과 `nonce`를 확인하세요.

## 4. NRO 보내기

::: warning 현재 빌드에서는 SDK 송금이 동작하지 않습니다
`nc.transfer()`는 금액을 JSON 문자열로 보내며, 노드는 이를 거부합니다(`Missing from/to/value`). SDK가 수정될 때까지는 숫자 `value`로 송금을 보내세요 — [JavaScript SDK → 알려진 문제](./sdk#known-issues)를 참고하세요.
:::

```js
import { toRaw } from './neurochain.js'

const { base_fee } = await nc.gasEstimate()
const gas_price = Math.ceil(base_fee * 1.5)          // 기본 수수료보다 높게 유지
const to = 'neuro:<다른 주소>.human'
const value = Number(toRaw('1.5'))                   // 1.5 NRO를 uNRO 단위 숫자로
const nonce = await nc.nextNonce(wallet.address)
const sig = wallet.sign(to, value, nonce)            // { signature, public_key }

const res = await fetch('http://localhost:3000/api/v1/transactions', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ from: wallet.address, to, value, nonce, gas_price, ...sig }),
}).then(r => r.json())
// { tx_hash, status: 'pending', estimated_block, sentinel_score, … }
```

응답에는 상태가 `pending`인 트랜잭션 `hash`가 들어 있습니다. 1초 뒤 `GET /api/v1/transactions/:hash`를 조회하면 `confirmed`로 표시됩니다.

## 5. 토큰 배포

저장소에는 컴파일된 NRC-20 토큰이 `neurochain/contracts/nrc20/nrc20.hex`에 포함되어 있습니다.

```js
const bytecodeHex = (await (await fetch('/nrc20.hex')).text()).trim()
await nc.deployContract({
  wallet,
  bytecodeHex,
  name: 'MyToken',
  template: 'nrc20',
  initArgs: { name: 'MyToken', symbol: 'MTK', decimals: 6, total_supply: '1000000' },
})
```

배포는 `neuro:system.deploy`로 보내는 트랜잭션입니다. 모든 검증자가 바이트코드에 대해 [VMGuardian](/ko/ai/vmguardian) 감사를 실행하고, `neuro:<10 hex>.app`에 컨트랙트를 생성한 뒤 여러분의 `initArgs`로 `initialize`를 호출합니다. `total_supply`는 토큰 전체 단위로, `decimals`는 **숫자**로 지정하세요. 노드가 공급량을 토큰의 최소 단위로 변환하며(소수 자릿수 6에서 `1000000`은 10¹² 단위가 됩니다), 전량이 여러분에게 발행됩니다. 저장소의 NRC-20 바이트코드는 신뢰 목록에 있으므로 보안 점수 100을 받습니다. 주소는 트랜잭션 기록이나 `GET /api/v1/contracts`에서 찾을 수 있습니다.

## 6. 컨트랙트 조회와 호출

```js
const token = 'neuro:<10 hex>.app'

// 조회 — 트랜잭션 없이 실행되며 가스가 들지 않음
await nc.contractQuery(token, 'balance_of', { address: wallet.address })
// → '{"ok":true,"value":1000000000000}'  (최소 단위)

// 쓰기 — JSON 호출 데이터를 담은 서명된 트랜잭션
await nc.contractCall({
  wallet,
  address: token,
  fn: 'transfer',
  args: { to: 'neuro:<다른 주소>.human', amount: '250' },  // 토큰 전체 단위 — 노드가 변환
  gasPrice: Math.ceil(base_fee * 1.5),
})
```

컨트랙트는 호출자가 누구인지 인자가 아니라 호스트(`get_caller()`)로부터 알아냅니다. [ABI와 호출 데이터](./abi)를 참고하세요.

## 다음 단계

- [JavaScript SDK](./sdk) — 모든 메서드.
- [컨트랙트 배포](./deploy) — 감사 게이트, 생성자, 제한.
- [NeuroWASM](/ko/neurowasm/) — 직접 컨트랙트 작성하기.
