# Швидкий старт

> Швидкий старт NeuroChain на локальній ноді — перевірка мережі, створення й поповнення гаманця, підписаний переказ, читання і виклик контракту, розгортання токена NRC-20.

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

Від нуля до розгорнутого токена в **локальній мережі** приблизно за десять хвилин.

::: info Перш ніж почати
Публічна мережа ще не запущена, тож цей посібник використовує ноду і gateway на вашому комп'ютері. Запустіть їх з `CHAIN_ENV=testnet` (так вмикається кран) — див. [Запуск ноди](/uk/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)
```

Для підпису потрібен криптомодуль WASM, який SDK завантажує в браузері. Див. [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>"}'
```

Кран за замовчуванням дає 50 тестових NRO і прив'язує ваш публічний ключ до адреси. У вебзастосунку є кнопка **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, … }
```

У відповіді — `hash` транзакції зі статусом `pending`; за секунду `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](/uk/ai/vmguardian), створює контракт за адресою `neuro:<10 hex>.app` і викликає `initialize` з вашими `initArgs`. Вказуйте `total_supply` у цілих токенах, а `decimals` — **числом**: нода переведе пропозицію в найменші одиниці токена (`1000000` при 6 знаках стає 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](/uk/neurowasm/) — як написати власний контракт.
