# 快速开始

> 在本地节点上快速上手 NeuroChain——检查网络、创建钱包并充值、发送签名转账、查询和调用合约、部署 NRC-20 代币。

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

在**本地网络**上从零开始部署一个代币，大约需要十分钟。

::: info 开始之前
公共网络尚未运行，因此本指南使用你本机上的节点和 gateway。以 `CHAIN_ENV=testnet` 启动它们（这样会启用水龙头）——参见[运行节点](/zh/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. 获取钱包

打开 Web 应用（`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，并把你的公钥绑定到该地址。Web 应用中的 **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. 部署代币

仓库在 `neurochain/contracts/nrc20/nrc20.hex` 提供了一个已编译的 NRC-20 代币。

```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](/zh/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'

// 读取——无需交易，不消耗 gas
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](/zh/neurowasm/)——编写你自己的合约。
