빠른 시작
로컬 네트워크에서 처음부터 토큰 배포까지 약 10분이면 됩니다.
시작하기 전에
공개 네트워크는 아직 운영되지 않으므로, 이 가이드는 여러분의 컴퓨터에서 실행하는 노드와 gateway를 사용합니다. CHAIN_ENV=testnet으로 실행하세요(이 설정으로 faucet이 활성화됩니다) — 노드 실행을 참고하세요. 그다음:
export NODE_RPC=http://localhost:9933
export GATEWAY=http://localhost:30001. 네트워크 확인
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로 여러분의 페이지에서 직접 도출할 수 있습니다.
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 → 암호화 모듈을 참고하세요.
3. 충전하기
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 버튼도 같은 일을 합니다.
curl -s "$GATEWAY/api/v1/accounts/neuro:<15 hex>.human"balance_human(NRO)과 nonce를 확인하세요.
4. NRO 보내기
현재 빌드에서는 SDK 송금이 동작하지 않습니다
nc.transfer()는 금액을 JSON 문자열로 보내며, 노드는 이를 거부합니다(Missing from/to/value). SDK가 수정될 때까지는 숫자 value로 송금을 보내세요 — JavaScript SDK → 알려진 문제를 참고하세요.
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에 포함되어 있습니다.
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 감사를 실행하고, neuro:<10 hex>.app에 컨트랙트를 생성한 뒤 여러분의 initArgs로 initialize를 호출합니다. total_supply는 토큰 전체 단위로, decimals는 숫자로 지정하세요. 노드가 공급량을 토큰의 최소 단위로 변환하며(소수 자릿수 6에서 1000000은 10¹² 단위가 됩니다), 전량이 여러분에게 발행됩니다. 저장소의 NRC-20 바이트코드는 신뢰 목록에 있으므로 보안 점수 100을 받습니다. 주소는 트랜잭션 기록이나 GET /api/v1/contracts에서 찾을 수 있습니다.
6. 컨트랙트 조회와 호출
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와 호출 데이터를 참고하세요.
다음 단계
- JavaScript SDK — 모든 메서드.
- 컨트랙트 배포 — 감사 게이트, 생성자, 제한.
- NeuroWASM — 직접 컨트랙트 작성하기.