这个项目能做什么
NanoPay 是一个用于 Nano 加密货币网络的 Node.js 和 TypeScript 库。其 README 描述了两种使用模式:一个用于完整工作流程的更高层客户端,以及用于逐步控制的导出函数。两者都共享相同的 Nano 密码学和区块构建器。
通过 npm install nanopay 安装。版本 0.2.0 在调用 createClient() 或 createRpcClient() 时,如果没有提供 URL,则使用 BerryPay 的公共 Nano 主网 RPC;版本 0.1.0 要求显式提供 URL。该库支持 Node.js 22+、ESM、CommonJS、TypeScript 和现代浏览器。浏览器脚本包中会暴露 NanoPay。
账户可以通过 createWallet、walletFromSeed、accountFromPrivateKey 和 walletFromMnemonic 创建或恢复。原生 Nano 十六进制种子使用 BLAKE2b 派生,而 BIP39 助记符种子则遵循 Nano SLIP-0010 路径 m/44'/165'/index'。README 警告用户应该备份钱包种子,或者助记符及其密码,因为私钥只控制一个账户。种子和私钥不应该出现在日志或 RPC 请求中。
对于发送、接收和确认,createClient 返回一个包含 getBalance、send、waitForConfirmation、receiveAll 和 changeRepresentative 的客户端。该客户端读取账户状态、构建区块、本地签名、请求工作、验证工作,并在工作完成后提交。对同一账户的写入会排队,而不同账户的读取和写入可以并发执行。状态 submitted 表示节点接受了区块,但应该使用 waitForConfirmation 来等待最终确认。TransactionError 会保留确切的哈希和已签名区块。ReceiveAllError.completed 会保存之前成功的提交。写入不会自动重试,如果提交失败,该账户会被锁定,直到通过 client.resumeAccount 恢复。
对于完全控制,库中导出了 generateSeed、derivePrivateKey、derivePublicKey、deriveAddress、buildSendBlock、hashBlock、signHash、attachSignature、getWorkRoot、attachWork 和 createRpcClient。构建函数不需要私钥。signBlock 结合了哈希和签名。createSendBlock、createReceiveBlock 和 createChangeBlock 结合了构建和签名,并返回一个包含哈希和区块的对象。这些函数不会联系节点。prepareSend、prepareReceive 和 prepareChangeRepresentative 会添加账本读取,并返回未签名的交易。外部签名者必须实现 publicKey 和 sign(hash)。签名必须使用 Nano 的 Ed25519-BLAKE2b,而不是标准的 Ed25519-SHA512。工作提供者必须实现带有 root、threshold 和 signal 的 work,并可以使用本地 WASM、GPU 服务或单独的工作节点。
金额使用字符串而不是浮点数。提供了 nanoToRaw 和 rawToNano,其中 amount 表示 Nano,而 amountRaw 或 balanceRaw 表示原始值。一个 Nano 等于 10^30 个原始单位。小数原始值和 uint128 溢出会导致错误。历史上的 Unit.nano 表示 10^24 个原始单位,因此 nanoToRaw 应该用于普通的 Nano 金额。
支付链接和实时确认通过 createPaymentUri、parsePaymentUri 和 watchConfirmations 支持。支付 URI 必须按照 Nano 的要求编码原始值。WebSocket 通知可能会重复,因此用户应该通过哈希进行去重。断开连接、消息格式错误或缓冲区满都会引发错误。该流没有自动重连或持久的支付会计功能。
重点入口点包括 nanopay/keys、nanopay/blocks、nanopay/work、nanopay/amounts、nanopay/mnemonic、nanopay/rpc、nanopay/payments 和 nanopay/confirmations,这些都支持 ESM、CommonJS 和 TypeScript。keys 入口点不包含 WASM 或助记符单词表。WASM 工作引擎在每个领域编译一次,隔离并发调用,并在批次之间让出。workerIndex 和 workerCount 会划分 nonce 空间,应该在单独的 Workers 中运行。主网工作是概率性的,因此对于持续的工作负载,建议使用 GPU 工作服务。
范围和兼容性:该工具包涵盖了本地账户、原生和助记符派生、状态区块、签名、工作、账本读取、发送/接收/更改工作流程、确认跟踪以及支付链接。client.request 和 rpc.request 暴露了节点支持的其他 Nano RPC 命令。该库不会运行共识节点、选择代表、持久化或加密秘密、管理交易所会计,也不会提供硬件设备传输。新区块使用状态格式,而 RPC 区块读取也支持历史区块内容。原始上游函数名称和调用签名在 nanopay/legacy 下保留,包括 deriveSecretKey 和基于哈希的 signBlock。旧的 nanopay payment-wrapper API 已经被替换。
开发命令包括 npm ci、npm run check 和 npm run bench。检查会覆盖协议向量、工作流程、浏览器和 Worker 执行、格式以及安装到干净的 npm 项目中。可以通过 npx playwright install chromium 安装 Playwright Chromium。npm run build:wasm 会使用 LLVM clang 和 wasm-ld 重建已签入的二进制文件;普通构建会使用现有的二进制文件。NanoPay 采用 GPL-3.0 许可证,并基于 nanocurrency-js。源代码、构建脚本、原始通知和捆绑的依赖许可证都包含在包中。
评论
0 评分人数达到10人后显示
登录后参与讨论。