Об этом проекте
NanoPay — библиотека для Node.js и TypeScript для криптовалютной сети Nano. В её README описаны два режима использования: высокоуровневый клиент для полных сценариев и экспортируемые функции для пошагового контроля. Оба режима используют одну и ту же криптографию Nano и сборщики блоков.
Установка: npm install nanopay. Версия 0.2.0 использует публичный Nano mainnet RPC BerryPay, когда createClient() или createRpcClient() вызываются без URL; версия 0.1.0 требует явного URL. Поддерживаются Node.js 22+, ESM, CommonJS, TypeScript и современные браузеры. Браузерный скрипт-бандл предоставляет NanoPay.
Аккаунты можно создавать или восстанавливать с помощью createWallet, walletFromSeed, accountFromPrivateKey и walletFromMnemonic. Нативные hex-сиды Nano используют вывод BLAKE2b, а сиды BIP39-мнемоник следуют пути Nano SLIP-0010 m/44'/165'/index'. README предупреждает, что пользователям следует создавать резервную копию сида кошелька либо мнемоники и её парольной фразы, а также что приватный ключ управляет только одним аккаунтом. Сиды и приватные ключи следует держать вне логов и RPC-запросов.
Для отправки, получения и подтверждения createClient возвращает клиент с getBalance, send, waitForConfirmation, receiveAll и changeRepresentative. Клиент читает состояние аккаунта, собирает блок, подписывает локально, запрашивает work, проверяет его и отправляет один раз. Записи в один и тот же аккаунт ставятся в очередь внутри экземпляра клиента; разные аккаунты и независимые чтения выполняются параллельно. Статус submitted означает, что узел принял блок, но перед тем как считать его окончательным, следует использовать waitForConfirmation. TransactionError сохраняет точный хеш и подписанный блок. ReceiveAllError.completed сохраняет предыдущие успешные отправки. Записи не повторяются автоматически, и сбой отправки блокирует дальнейшие записи в этот аккаунт с AccountBlockedError до тех пор, пока неудачная транзакция не будет согласована и не будет вызван client.resumeAccount.
Для полного контроля библиотека экспортирует generateSeed, derivePrivateKey, derivePublicKey, deriveAddress, buildSendBlock, hashBlock, signHash, attachSignature, getWorkRoot, attachWork и createRpcClient. Функциям сборки не нужны приватные ключи. signBlock объединяет хеширование и подпись. createSendBlock, createReceiveBlock и createChangeBlock объединяют сборку и подпись и возвращают объект с hash и block. Эти функции не обращаются к узлу. prepareSend, prepareReceive и prepareChangeRepresentative добавляют чтение реестра и возвращают неподписанные транзакции. Внешние подписанты реализуют publicKey и sign(hash). Подписи должны использовать Ed25519-BLAKE2b Nano, а не стандартный Ed25519-SHA512. Провайдеры work реализуют work с root, threshold и signal и могут использовать локальный WASM, GPU-сервис или отдельный work-узел.
Суммы используют строки, а не числа с плавающей точкой. Доступны nanoToRaw и rawToNano, где amount означает Nano, а amountRaw или balanceRaw означают raw. Один Nano — это 10^30 raw. Дробный raw и переполнение uint128 отклоняются. Историческая Unit.nano означает 10^24 raw, поэтому для обычных сумм Nano следует использовать nanoToRaw.
Платёжные ссылки и живые подтверждения поддерживаются через createPaymentUri, parsePaymentUri и watchConfirmations. Платёжные URI кодируют raw, как требуется в Nano. Уведомления WebSocket могут повторяться, поэтому пользователям следует дедуплицировать по хешу. Разрыв соединения, некорректное сообщение или переполненный буфер вызывают ошибку. У потока нет автоматического переподключения или постоянного учёта платежей.
Специализированные точки входа включают nanopay/keys, nanopay/blocks, nanopay/work, nanopay/amounts, nanopay/mnemonic, nanopay/rpc, nanopay/payments и nanopay/confirmations, каждая поддерживает ESM, CommonJS и TypeScript. Точка входа keys не содержит ни WASM, ни списка слов мнемоники. Движок work на WASM компилируется один раз на realm, изолирует параллельные вызовы и уступает между пакетами. workerIndex и workerCount разделяют пространство nonce и должны запускаться в отдельных Workers. Mainnet work вероятностен; для постоянных нагрузок рекомендуется GPU-сервис work.
Область применения и совместимость: набор инструментов охватывает локальные аккаунты, нативный вывод и вывод из мнемоники, state-блоки, подпись, work, чтение реестра, сценарии send/receive/change, отслеживание подтверждений и платёжные ссылки. client.request и rpc.request предоставляют доступ к дополнительным командам Nano RPC, поддерживаемым узлом. Он не запускает консенсусный узел, не выбирает представителя, не сохраняет и не шифрует секреты, не управляет биржевым учётом и не предоставляет транспорт для аппаратных устройств. Новые блоки используют формат state, а чтение блоков через RPC также поддерживает содержимое исторических блоков. Исходные имена функций и сигнатуры вызовов upstream сохранены в nanopay/legacy, включая deriveSecretKey и основанный на хеше signBlock. Старый API платёжной обёртки nanopay заменён.
Команды разработки включают npm ci, npm run check и npm run bench. Проверки охватывают протокольные векторы, сценарии, выполнение в браузере и Worker, форматирование и установку в чистый npm-проект. Playwright Chromium можно установить с помощью npx playwright install chromium. npm run build:wasm пересобирает включённый в репозиторий бинарник с LLVM clang и wasm-ld; обычные сборки используют существующий бинарник. NanoPay имеет лицензию GPL-3.0-only и основан на nanocurrency-js. Исходный код, скрипты сборки, оригинальные уведомления и лицензии включённых зависимостей поставляются с пакетом.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.