前言
在 Bitcoin 派生币中,比特币小型(Bitcoin Nano)是一个基于比特币的去中心化数字货币,其交易信息需要经过签名才能被广播到网络中,而 btcnano-message
就是用来辅助实现信息签名的一个 npm 包。 本文将从安装,使用,以及一些进阶的用法。
安装
btcnano-message
是一个可以在 node.js 和浏览器端使用的 npm 包,首先需要保证你已经安装了 node.js 环境。
如果你访问 npm 速度较慢,可以使用该命令设置 npm 源(这里以淘宝镜像为例):
npm config set registry https://registry.npm.taobao.org/
接着,在项目根目录下运行以下代码完成包的安装:
npm install btcnano-message
使用
sign(message, privateKey, compressed)
签名函数,返回该信息的签名。主要参数包括 message
、privateKey
和 compressed
。
message
: 待签名的信息,支持string
或Buffer
类型。privateKey
: 使用的私钥,支持string
或Buffer
类型。compressed
: 是否压缩签名,默认值为true
。压缩可以让签名更短,但会略微增加计算时间。
以下是一个简单的使用示例:
const btcnanoMessage = require('btcnano-message') const privateKey = Buffer.from('8d94f51887fa3783659c7ecdde1ab8e776a30fe2f16c1f439173e988d8928427', 'hex') const message = 'Hello, Bitcoin Nano!' const signature = btcnanoMessage.sign(message, privateKey) console.log(signature.toString('hex'))
输出:
1c4ded2d8a660430b0fb3b3c79d745ecf42d15dc08122bdd53e02c130feb0d1d6f27ff79fb6755662101e87dfdb64d922380aeff2a2f685c9fc990d72fc8ce98
verify(message, address, signature)
验证函数,返回验证结果 true
或 false
。 主要用于验证 sign
函数生成的签名是否正确。
message
: 待验证的信息。address
: 签名的地址。signature
: 需要验证的签名。
以下是一个基本的使用示例:
const btcnanoMessage = require('btcnano-message') const address = 'banrCoJ8dFduV7yhtdfJu4Q4bmUucnu24U' const message = 'Hello, Bitcoin Nano!' const signature = Buffer.from('1c4ded2d8a660430b0fb3b3c79d745ecf42d15dc08122bdd53e02c130feb0d1d6f27ff79fb6755662101e87dfdb64d922380aeff2a2f685c9fc990d72fc8ce98', 'hex') console.log(btcnanoMessage.verify(message, address, signature))
输出:
true
进阶用法
,magicSeed(magic)
该函数用于生成一个即将签名的"污染"seed值,以提高 SHA256d 算法的耐受性。 主要参数为 magic
,即种子污染器,支持任意string
或 Buffer
类型。如果不传入该参数,则默认使用 'Bitcoin Signed Message' 作为污染器。
以下是一个使用示例:
const btcnanoMessage = require('btcnano-message') btcnanoMessage.magicSeed("coturnix's testing magic seed") // => {0: 43, 1: 119, 2: 68, 3: 62, 4: 121, 5: 111, 6: 238, 7: 52, 8: 69, 9: 75, 10: 120, 11: 229, 12: 15, 13: 59, 14: 200, 15: 84, 16: 121, 17: 62, 18: 7, 19: 4, 20: 181, 21: 18, 22: 121, 23: 139, 24: 47, 25: 69, 26: 171, 27: 30, 28: 143, 29: 241}
signCompact(message, privateKey, compressed, magic)
该函数用于生成一个压缩格式的签名,主要参数为:
message
: 待签名的信息,支持string
或Buffer
类型。privateKey
: 使用的私钥,支持string
或Buffer
类型。compressed
: 是否压缩签名。默认值为true
。magic
: 污染器种子,默认值为 'Bitcoin Signed Message'
以下是使用示例:
const btcnanoMessage = require('btcnano-message') const privateKey = Buffer.from('8d94f51887fa3783659c7ecdde1ab8e776a30fe2f16c1f439173e988d8928427', 'hex') const message = 'Hello, Bitcoin Nano!' const signature = btcnanoMessage.signCompact(message, privateKey, true, "coturnix's testing magic seed") console.log(signature.toString('hex'))
输出:
1b5205696e95d6a38ea4d12f4abc34d1996cf384ad7a4f6d07a6a11a6a1f3b3d0f
recoverCompact(message, signature, compressed, magic)
该函数用于从签名中提取出公钥,主要参数为:
message
: 原始信息。signature
: 待验证的签名。compressed
: 签名是否压缩。默认值为true
。magic
: 污染器种子,默认值为 'Bitcoin Signed Message'
以下是使用示例:
const btcnanoMessage = require('btcnano-message') const message = 'Hello, Bitcoin Nano!' const signature = Buffer.from('1b5205696e95d6a38ea4d12f4abc34d1996cf384ad7a4f6d07a6a11a6a1f3b3d0f', 'hex') const pubKey = btcnanoMessage.recoverCompact(message, signature, true, "coturnix's testing magic seed") console.log(pubKey.toString('hex'))
输出:
03a78678faa6ffa77b66cdd0bbd107e7ddc2ffef903a512f4664ed4d986f195b9e
结语
btcnano-message
包提供了一种便捷、灵活的实现信息签名的方法,帮助我们更高效地完成开发。本篇文章对该 npm 包的安装、使用以及进阶用法作了详细介绍,并为读者提供了实用的示例代码,希望对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005722e81e8991b448e8542