比特币JS(比特币J-lib)
用于节点.js和浏览器的javascript Bitcoin库. 写入TypeScript,但承诺JS文件进行校验.
根据《刑事诉讼法》的规定释放 麻省理工学院。 。 。 .
我应该用这个生产?
如果你在考虑使用 师傅 这个图书馆的分支生产, 停下来。 。 。 . 师傅不是稳定的,而是我们的发展分支 只有有标记的释放可归类为稳定释放。 。 。 .
我能相信这个密码吗?
别相信 校验.
我们推荐每个用户 这个库和 比特币js 生态系统审计和核实其有效性和适当性的任何基本守则,包括审查项目的任何和所有依赖性.
错误和错误发生,但有你的帮助 解决和报告 问题,我们可以一起生产开源软件,即:
- 容易审计和核实,
- 试验范围大于95%,
- 高级和特色丰富,
- 标准化,使用 更美丽 和节点
Buffer一直这样 - 友好,有强大而有帮助的社区,随时准备回答问题.
文档
拜访我们 文档 探讨现有资源。 我们正在不断改进我们的文献 增加丰富经验的功能 如果你需要更多的指导 实例 出价,不要犹豫 请求帮助我们是来帮你的.
你可以找到一个 网络用户界面 涵盖大部分 psbt.ts, (中文(简体) ), transaction.ts 财务报告和审定财务报表 p2*.ts APIs 密码 这里。 。 。 .
我怎么联系Github以外的开发者?
大多数时候,这是不恰当的。 创造问题和在公开场合拉动请求会帮助有类似问题的其他人,所以请尝试使用公有问题并拉动沟通请求.
尽管如此,有时开发者可能会对从唱片中取出的东西持开放态度(e. 你想分享你不希望公众获得帮助的代码). 在这种情况下,请就公众问题进行谈判,以确定您将在哪里联系.
我们在IRC上创建了公共房间#bitcoinjs 打开 libera.chat)和矩阵#bitcoinjs-dev:matrix.org) (中文(简体) ). 这两道被合并为一个矩阵"空间",它有一个矩阵室和一个可以与IRC室相交的IRC桥室. "空间"是 #bitcoinjs-space:matrix.org。 。 。 .
Matrix和IRC都有直接发送消息的功能,但IRC并没有结束加密,因此Matrix被推荐用于大多数通信. 由矩阵核心团队维护的官方矩阵客户端称为"Element",可在此下载: https://element.io/下行负荷 (账户创建在矩阵.org服务器上是免费的,它是元素的默认设置. )
我们曾经有一个Slack。 它已经死了。 如果你找到,没人会回答你.
不,我们不会做一个Discord.
安装
npm install bitcoinjs-lib
# optionally, install a key derivation library as well
npm install ecpair bip32
# ecpair is the ECPair class for single keys
# bip32 is for generating HD keys
以前的图书馆版本包括了密钥管理课(ECPair, HDNODE (- >"bip32")),但现在这些课已分入不同的图书馆. 如果不需要执行任何加密函数(将私有密钥转换为公钥并衍生出HD密钥),这可以显著地降低捆绑大小.
我们通常支持 节点维护 LTS 版本。将设定脚本目标 到ECMAScript版本,其中所有特性都由当前Active Node LTS完全支持. 然而,根据其他环境(浏览器等)的采纳情况,我们可能把目标保留一两年. 如果有疑问,请看 主语 ci.yml 我们不断的整合测试使用什么版本.
警告:我们目前没有提供任何工具来核实释放是否在进行 npm 与 GitHub 匹配 。 因此,你应该验证 任何下载 npm 与你自己核实的副本相对应.
使用量
加密很难.
在使用私钥工作时,随机数生成器从根本上来说是您所撰写的任何软件中最重要的部分之一.
对于随机数代,我们 默认 页:1 randombytes 模块,用于 window.crypto.getRandomValues 在浏览器中,或节点js' crypto.randomBytes,取决于您的构建系统.
虽然这种默认值为~OK,但没有简单的方法来检测所提供的基础RNG是否足够好,或者是否是 灾难性的坏。 。 。 .
你应该自己去核实一下.
此库使用 微秒256k1,用于 RFC6979 (法语) 帮助预防 k 重新使用和开采.
不幸的是 这不是银弹.
Javascript本身经常绕过这些反制措施来对付我们.
问题 Buffer (UInt8Array)例如,可以轻而易举地导致 灾难性基金损失 没有任何警告.
它可以通过破坏你的随机数组 意外生成一个 复制 k 价值,将 Bitcoin 发送给一个错误的输出脚本,或者任何百万种不同方式.
在你的目标环境中进行测试是重要的,也是不断核查的建议步骤.
终于, 遵守最佳做法。 。 。 . 我们并非最佳做法的权威来源,但至少:
- 别再用地址。 。 。 .
- 不要共享BIP32扩展公钥 ('xpubs'). 它们是责任,而它只需要一个错误的私人密钥(或者错误的执行!),你就容易受到伤害 灾难性基金损失。 。 。 .
- 别用
Math.random- 无论如何 - 不要. - 强制用户在播出前总是(手动)验证其预定交易的新鲜可读版本.
- 别 询问 用于生成映射的用户,或"大脑钱包",人类是可怕的随机数生成器.
- 最后,如果你可以的话,请使用 字体 或类似.
浏览器
建议的使用方法 bitcoinjs-lib 在您的浏览器中通过 浏览器。 。 。 .
如果您想要使用一个不同的(更现代的)构建工具 browserify,您只需将这个库及其依赖性编译成一个 JavaScript 文件:
$ npm install bitcoinjs-lib browserify
$ npx browserify --standalone bitcoin - -o bitcoinjs-lib.js <<<"module.exports = require('bitcoinjs-lib');"
然后可以导入为无害环境管理模块:
<script type="module">import "/scripts/bitcoinjs-lib.js"</script>
页:1: 我们使用节点维护 LTS 特性, 如果您需要严格的 ES5 , 请使用 --transform babelify 与《公约》有关的 browserify 步骤(使用 es2015 预设).
警告: iOS 设备有 问题,至少使用 缓冲器@ 5.0.5 测试套房 Buffer,以及任何其他依赖)在使用前通过.
键盘或 VSCode 用户
本库中包含Typescript的类型声明. 正常安装应包括所有需要的类型信息.
实例
以下例子作为综合测试加以实施,应当非常容易理解. 否则,拉动请求会得到赞赏. 一些实例(通过HTTPS)与第3个缔约方区块链提供者(3PBP)相互作用.
- 磁盘键花
- 生成随机地址
- 通过 WIF 导入地址
- 生成一个 2- 3 P2SH 多西格地址
- 生成 SegWit 地址
- 生成 SegWit P2SH 地址
- 生成一个 SegWit 3- of-4 多西格地址
- 生成一个 SegWit 2- of-2 P2SH 多西格地址
- 支持检索地址的交易(第3方块链)
- 生成一个测试网地址
- 生成 Litecoin 地址
- 创建一对一交易
- 创建(并通过 3PBP 广播) 一个典型的交易
- 创建(并通过 3PBP 播放) 带有 OP RETURN 输出的交易
- 通过 3PBP 创建(并通过 3PBP 广播) 包含 2–4 P2SH(多相)输入的交易
- 创建(并通过 3PBP 广播) 包含 SegWit P2SH( P2WPKH) 输入的交易
- 创建(并通过 3PBP 播放) 包含 SegWit P2WPKH 输入的交易
- 创建(并通过 3PBP 广播) 包含 SegWit P2PK 输入的交易
- 创建(并通过 3PBP 播放) 包含 SegWit 3- of-4 P2SH( P2WSH( 多相) ) 输入的交易
- 创建(并通过 3PBP 广播) 交易并用 HDSigner 接口签名 (bip32)
- 导入 BIP32 测试网 xpriv 并导出到 WIF
- 导出 BIP32 xpriv, 然后导入
- 导出 BIP32 xpub
- 创建 BIP32, 比特币, 账户 0, 外部地址
- 创建 BIP44, 比特币, 账户 0, 外部地址
- 创建 BIP49, 比特币测试网, 账户 0, 外部地址
- 使用 BIP39 生成 BIP32 地址
- 创建(并通过 3PBP 播放) 交易,爱丽丝可以在到期后( 过去) 赎回输出
- 创建(并通过 3PBP 广播) 交易,爱丽丝可以在到期后( 将来) 赎回输出
- 创建(并通过 3PBP 播放) 交易, 爱丽丝 和 Bob 可以随时赎回输出
- 创建(但未能通过 3PBP 播放) Alice 试图在到期前赎回的交易
- 创建(并通过3PBP广播)一个交易,爱丽丝可以在到期后(在未来)赎回输出(简单CHECKSEQUEVERIFY)
- 创建(但未能通过 3PBP 广播) Alice 试图在到期前赎回的交易( 简单 CHECKSEQUENCEVIFY)
- 创建(并通过 3PBP 广播) Bob 和 Charles 可以发送的交易( 复杂的 CHECKSEQUENCEVIFY)
- 创建(并通过3PBP广播)一个交易,爱丽丝(中介)和鲍勃可以在2个块后发送(复杂的CHECKSEQUENCEVIFY)
- 创建(并通过3PBP广播)一个交易,爱丽丝(中介)可在5个块后发送(复杂的CHECKSEQUENCEVIFY)
如果你有你觉得可以列在这里的用具,请 问吧来啊!
捐款
见 捐款额。 。 。 .
运行测试套件
npm test
npm run-script coverage
补充图书馆
- BIP21 投资促进局 - BIP21兼容的URL编码库
- BIP38 投资促进局 - 密码句保护的私人密钥
- BIP39 投资促进局 - 确定密钥的模拟生成
- BIP32-Utils (英语) - 与BIP32合作的一套公用事业
- BIP66 (英语) - 严格的DER签名解码
- BIP68 投资促进局 - 相对锁定时间编码库
- BIP69 投资促进局 - 交易投入和产出的地理学索引
- 基础58 - 基础58编码/解码
- 基础58 检查 - 基础58检查编码/解码
- 贝克32 - BIP173/BIP350兼容Bech32/Bech32m编码库
- 硬币选择 - 比特币-lib的收费优化、交易输入选择模块.
- 梅克莱- lib - 用于计算墨克勒根和树的性能意识库.
- 最小数据 - 检查比特币政策的一个模块:SCRIPT VRIFY MINIMALDATA