NextCoin NextCoin цифровая монета
1 NXT -
1 NXT -
Принимаете оплату в NXT на своём сайте?

Подключается одним файлом и одной функцией. Рабочий пример и код на странице приёма оплаты.

Устройство сети

Здесь собрано то, что раньше висело на главной странице. Обычному человеку эти цифры не нужны, а тому, кто хочет проверить, они пригодятся.

Интервал блока
6 c
Фиксированно, один валидатор
Всего монет
1 000 000 000
Задано в генезисе, допэмиссии нет
Знаков после запятой
6
Внутри всегда целые базовые единицы
Идентификатор сети
nextcoin-1
Входит в подписываемые данные
Подписи
Ed25519
RFC 8032, адреса вида nxt1
Нода
Python 3
Только стандартная библиотека

Текущее состояние сети всегда можно посмотреть по адресу /info, а сверку цепочки по /health. Распределение монет и крупнейших держателей видно в эксплорере.

Документация

Нода - чистый Python, только стандартная библиотека. Блок каждые 6 секунд, один валидатор, chain_id nextcoin-1. Базовый адрес https://nxt.stackworks.ru.

Информация о сети

ПараметрЗначение
chain_idnextcoin-1
Интервал6 секунд, PoS, один валидатор
Эмиссия1 000 000 000 NXT, генезис
Валидатор-
Высота-
НодаPython 3, только стандартная библиотека
ПодписиEd25519 (RFC 8032)

Эндпоинты

МетодПутьОписание
GET/infoвысота, хэш, валидатор, supply, mempool
GET/chain?limit=20&offset=0&order=descсписок блоков, лимит до 100
GET/block/:heightблок по высоте
GET/balance/:addressбаланс и nonce
GET/mempoolтранзакции в очереди
GET/tx/:hashтранзакция по хэшу
POST/txотправить транзакцию

Примеры curl

curl https://nxt.stackworks.ru/info
curl "https://nxt.stackworks.ru/chain?limit=10&order=desc"
curl https://nxt.stackworks.ru/block/0
curl https://nxt.stackworks.ru/balance/nxt1as0uf7dfpsqcfkz2wwv2dp0kgrt8x24ehfrlax
curl https://nxt.stackworks.ru/tx/783845d95fdfd7fd49f167a8f25a6921dc91efe7062788931c180cea839165e9
curl -X POST https://nxt.stackworks.ru/tx -H "Content-Type: application/json" -d '{"sender_pubkey":"...","recipient":"nxt1...","amount":2750000,"nonce":1,"fee":1000,"signature":"..."}'

Суммы в базовых единицах. 1 NXT = 1 000 000, то есть 2750000 это 2.75 NXT, а 1000 это 0.001 NXT.

Формат транзакции

{
  "sender_pubkey": "64 hex - публичный ключ Ed25519",
  "recipient": "nxt1 и 38 символов",
  "amount": 100,
  "nonce": 1,
  "fee": 1,
  "signature": "128 hex - R(64) + S(64)",
  "hash": "64 hex - sha256 канонического JSON"
}

Поля сортируются по ключу при хэшировании. fee уходит валидатору. nonce строго по порядку, начиная с 1.

Как подписывать

Под подпись уходит не голое тело транзакции, а тело с доменной меткой. Сначала берётся канонический JSON с полями amount, fee, nonce, recipient, sender_pubkey, отсортированными по ключу и без пробелов. Затем перед ним ставится метка nextcoin-1/tx/v1: два байта её длины, сама метка, нулевой байт, потом тело. Получившийся набор байт подписывается Ed25519. Метка нужна, чтобы подпись из тестовой сети не подошла в боевой, а подпись транзакции нельзя было выдать за подпись блока.

// Готовые модули для браузера лежат в web/js: ed25519.js, nxtaddr.js, units.js.
// Они сверены с серверными chain/*.py побайтово.
const pub = pubFromPriv(privHex) // G^priv mod p
const msg = await sha256(canonicalJSON({sender_pubkey:pub, recipient, amount, nonce, fee}))
const sig = await signTx(privHex, msg, pub)
await fetch("https://nxt.stackworks.ru/tx", {
  method: "POST",
  headers: {"Content-Type":"application/json"},
  body: JSON.stringify({sender_pubkey:pub, recipient, amount, nonce, fee, signature:sig})
})

Пагинация

// последние 10 блоков
curl "https://nxt.stackworks.ru/chain?limit=10&order=desc"
// следующие 10
curl "https://nxt.stackworks.ru/chain?limit=10&offset=10&order=desc"

Валидатор

Один валидатор, адрес nxt1ntc5qxd69uu5hd64dkylv9npf0qcuv2a327mhs. Собирает комиссии. Награда за блок пока не начисляется, эмиссия выключена.