Bitcoin Core

Bitcoin Core

比特币喜迎更新,0.17.1 版Bitcoin Core软件正式发布

资讯8btc 发表了文章 • 2018-12-26 12:35 • 来自相关话题

(图片来自免费图库:pxhere.com)


在2018年圣诞节之际,比特币core团队给出了一份非常棒的礼物:0.17.1版本的Bitcoin Core软件,那么这次更新到底有哪些新内容呢?

我们来看看开发团队给出的文档吧,以下为译文内容:

比特币Core 0.17.1版软件已正式发布,现在你可通过以下链接进行访问:

https://bitcoincore.org/bin/bitcoin-core-0.17.1/

这次发布的是一个次版本软件,其修复了一些漏洞,并对软件性能有了一些改进,此外还有一些翻译内容的更改。

开发者可以使用GitHub的问题跟踪器上报错误:

https://github.com/bitcoin/bitcoin/issues

若要接受安全及更新通知,请订阅:

https://bitcoincore.org/en/list/announcements/join/

 
如何更新
 

如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。

如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。

当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。

注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。

 
降级预警
 

此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何更旧版的客户端。你就需要运行旧版的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。

如果你的节点已启用了修建模式,那么就需要你重新下载和同步整个比特币区块链。

 
兼容性
 

Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。

Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。

需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0及之后版本的客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。

 
显著的更改
 

============== `listtransactions`标签支持

- --------------------------------

在0.17.0版本软件中,`listtransactions` RPC`account`参数被弃用了,其被重命名为`dummy`,而在更新版的软件当中,其又被重命名为`label`。

当比特币用`-deprecatedrpc = accounts`进行设置时,指定一个标签/帐户/伪参数将返回传出和传入 交易。而没有`-deprecatedrpc = accounts`设置,它只会返回传入交易(因为它曾经可创建来自特定账户支出的交易,但通过标签不再可能这样做。)

当设置`-deprecatedrpc = accounts`时,可传递空字符串“”,列出没有任何标签的交易。而没有设置`-deprecatedrpc = accounts`时,传递空字符串会是一个错误,因为只返回未标记的交易,通常不会是有用行为,并且可能会引起混乱。


0.17.1更改日志
 

==================
###P2P协议和网络代码

- - #14685`9406502`修复了一个反序列化溢出边缘情况(kazcw)

- - #14728 `b901578`在stringifying(字符串化)addrLocal时修复未初始化的读取(kazcw)

###钱包

- - #14441`5150acc`恢复按标签列出传入交易的能力(jnewbery)

- - # 13546 `91fa15a`修正了CWallet::CreateTransaction(...)中未初始化值 `bnb_use'的使用(practicalswift)

- - #14310 `bb90695` 确保钱包在签名前是解锁状态的(gustavonalle)

- - #14690 `5782fdc` 如果CPubKey在PSBT密钥路径序列化期间无效,则抛出错误(instagibbs)

- - #14852 `2528443` backport: [test]添加`wallet_..py'(MarcoFalke)

- - #14196 `3362a95` psbt:总是丢弃不必要的utxo,并在必要时将非验证utxo转换为验证utxo(achow101)

- - #14588 `70ee1f8` 重构PSBT签名逻辑,以强制执行不变量并修复签名错误(gwillen)

- - #14424 `89a9a9d` 停止要求导入的pubkey,以签署非PKH计划(sipa,MeshCollider)

### RPC和其他API

- - #14417 `fb9ad04`修复没有将地址作为字符串的listreceivedbyadd.(etscrivner)

- - #14596 `de5e48a`漏洞修正: RPC:为createmultisig添加名为param的`address_type` (luke-jr)

- - #14618 `9666dba`使HTTP RPC调试日志记录更具信息性 (practicalswift)

- - #14197 `7bee414` [psbt]如果创建了验证sig,则将非验证UTXO转换为验证UTXO(achow101)

- - #14377 `a3fe125` 检查是否找到psbt输入、输出和全局映射的分离器 (achow101)

- - #14356 `7a590d8` 修复converttopsbt permitigdata arg,添加基本测试(instagibbs)

- - # 14453 `75b5d8c` 在walletpassphrase(钱包密码)超时时,修复钱包卸载 (promag)

### GUI

- - #14403 `0242b5a` 恢复 "Force TLS1.0+ for SSL connections" (real-or-random)

- - #14593 `df5131b` 明确禁用macOS版客户端的“暗模式” (fanquake)

###构建系统

- - #14647 `7edebed` 删除darwin.mk中的非法间距 (ch4ot1c)

- - #14698 `ec71f06` 将bitcoin-tx.exe添加到Windows安装程序中(ken2812221)

###测试和质量保证

- - #13965 `29899ec` 修复扩展功能测试失败(ken2812221)

- - #14011 `9461f98` 在macOS minimal平台上禁用钱包和地址簿Qt测试 (ryanofsky)

- - #14180 `86fadee` 即使钱包没有被编译,也要运行所有测试(MarcoFalke)

- - #14122 `8bc1bad` 测试`rpc_help.py`失败:检查ZMQ是否启用(Kvaciral)

- - #14101 `96dc936` 在验证接受测试中,使用命名args(MarcoFalke)

- - #14020 `24d796a` 为RPC帮助添加测试 (promag)

- - #14052 `7ff32a6` 在`rpc_rawtransaction`中添加一些实际的验证内容 (MarcoFalke)

- - #14215 `b72fbab` 在示例测试中使用正确的python索引切片(sdaftuar)

- - #14024 `06544fa` 添加`TestNode::assert_debug_log` (MarcoFalke)

- - #14658 `60f7a97` 添加测试,以确保节点可以在运行时生成所有rpc帮助文本(MarcoFalke)

- - #14632 `96f15e8` 修正了一个comment (fridokus)

- - #14700 `f9db08e` 通过等待区块请求,来避免`p2p_invalid_block`中的竞争(MarcoFalke)

- - #14845 `67225e2` 添加 `wallet_balance.py` (jnewbery)

###文件

- - #14161 `5f51fd6` doc/descriptors.md tweaks(ryanofsky)

- - #14276 `85aacc4` 在ARM交叉编译中添加autogen.sh(walterwhite81)

 
贡献者
 

感谢直接为这次软件发布做出贡献的每一个人:

- - Andrew Chow

- - Chun Kuan Lee

- - David A. Harding

- - Eric Scrivner

- - fanquake

- - fridokus

- - Glenn Willen

- - Gregory Sanders

- - gustavonalle

- - John Newbery

- - Jon Layton

- - Jonas Schnelli

- - João Barbosa

- - Kaz Wesley

- - Kvaciral

- - Luke Dashjr

- - MarcoFalke

- - MeshCollider

- - Pieter Wuille

- - practicalswift

- - Russell Yanofsky

- - Sjors Provoost

- - Suhas Daftuar

- - Tim Ruffing

- - Walter

- - Wladimir J. van der Laan

以及所有在[Transifex]上帮助开发团队翻译文档的人。

----- PGP 签名信息 -----

iQEzBAEBCgAdFiEEnerg3HBjJJ+wVHRoHkrtYphs0l0FAlwh9x0ACgkQHkrtYphs 0l1yqQf/WzqxJkIrzyO9ZRaLKjaaxVz8E7jqHsyA+4mdObsSPjneGfKh7OEC2Fhx VV7EF+A5kNFQgwnPwXlW3AaiuDhcGHEG4T0AB0JGaggLD6KrjpzuWHYx5k0COwdG 5sYRH4tZxbtWoF1+IQ1R8Ceac20VBqBUBJJfAAntg4VrGaBjDqFJzf+0GmQM0gyW tq12nMIwevHWXsmtrQWhAbCeLI8pyhGLOtLqCgrrD5hqe72iV7t6Njs5E+kRkEM1 Um6a3nc7LTUMXufTwBf6Sie6azubybvI2/G2HvYEn7DKpLAXiihyO8iiheAi6g4U JtAgFUiyIvmeLh8etboF3pLy/Q8F5A== =LFNX


原文:https://lists.linuxfoundation.org/pipermail/bitcoin-core-dev/2018-December/000072.html
作者:bitcoin core 开发团队
翻译:洒脱喜 查看全部
201812260359563544.jpg

(图片来自免费图库:pxhere.com)


在2018年圣诞节之际,比特币core团队给出了一份非常棒的礼物:0.17.1版本的Bitcoin Core软件,那么这次更新到底有哪些新内容呢?

我们来看看开发团队给出的文档吧,以下为译文内容:

比特币Core 0.17.1版软件已正式发布,现在你可通过以下链接进行访问:

https://bitcoincore.org/bin/bitcoin-core-0.17.1/

这次发布的是一个次版本软件,其修复了一些漏洞,并对软件性能有了一些改进,此外还有一些翻译内容的更改。

开发者可以使用GitHub的问题跟踪器上报错误:

https://github.com/bitcoin/bitcoin/issues

若要接受安全及更新通知,请订阅:

https://bitcoincore.org/en/list/announcements/join/

 
如何更新
 

如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。

如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。

当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。

注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。

 
降级预警
 

此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何更旧版的客户端。你就需要运行旧版的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。

如果你的节点已启用了修建模式,那么就需要你重新下载和同步整个比特币区块链。

 
兼容性
 

Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。

Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。

需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0及之后版本的客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。

 
显著的更改
 

============== `listtransactions`标签支持

- --------------------------------

在0.17.0版本软件中,`listtransactions` RPC`account`参数被弃用了,其被重命名为`dummy`,而在更新版的软件当中,其又被重命名为`label`。

当比特币用`-deprecatedrpc = accounts`进行设置时,指定一个标签/帐户/伪参数将返回传出和传入 交易。而没有`-deprecatedrpc = accounts`设置,它只会返回传入交易(因为它曾经可创建来自特定账户支出的交易,但通过标签不再可能这样做。)

当设置`-deprecatedrpc = accounts`时,可传递空字符串“”,列出没有任何标签的交易。而没有设置`-deprecatedrpc = accounts`时,传递空字符串会是一个错误,因为只返回未标记的交易,通常不会是有用行为,并且可能会引起混乱。


0.17.1更改日志
 

==================
###P2P协议和网络代码

- - #14685`9406502`修复了一个反序列化溢出边缘情况(kazcw)

- - #14728 `b901578`在stringifying(字符串化)addrLocal时修复未初始化的读取(kazcw)

###钱包

- - #14441`5150acc`恢复按标签列出传入交易的能力(jnewbery)

- - # 13546 `91fa15a`修正了CWallet::CreateTransaction(...)中未初始化值 `bnb_use'的使用(practicalswift)

- - #14310 `bb90695` 确保钱包在签名前是解锁状态的(gustavonalle)

- - #14690 `5782fdc` 如果CPubKey在PSBT密钥路径序列化期间无效,则抛出错误(instagibbs)

- - #14852 `2528443` backport: [test]添加`wallet_..py'(MarcoFalke)

- - #14196 `3362a95` psbt:总是丢弃不必要的utxo,并在必要时将非验证utxo转换为验证utxo(achow101)

- - #14588 `70ee1f8` 重构PSBT签名逻辑,以强制执行不变量并修复签名错误(gwillen)

- - #14424 `89a9a9d` 停止要求导入的pubkey,以签署非PKH计划(sipa,MeshCollider)

### RPC和其他API

- - #14417 `fb9ad04`修复没有将地址作为字符串的listreceivedbyadd.(etscrivner)

- - #14596 `de5e48a`漏洞修正: RPC:为createmultisig添加名为param的`address_type` (luke-jr)

- - #14618 `9666dba`使HTTP RPC调试日志记录更具信息性 (practicalswift)

- - #14197 `7bee414` [psbt]如果创建了验证sig,则将非验证UTXO转换为验证UTXO(achow101)

- - #14377 `a3fe125` 检查是否找到psbt输入、输出和全局映射的分离器 (achow101)

- - #14356 `7a590d8` 修复converttopsbt permitigdata arg,添加基本测试(instagibbs)

- - # 14453 `75b5d8c` 在walletpassphrase(钱包密码)超时时,修复钱包卸载 (promag)

### GUI

- - #14403 `0242b5a` 恢复 "Force TLS1.0+ for SSL connections" (real-or-random)

- - #14593 `df5131b` 明确禁用macOS版客户端的“暗模式” (fanquake)

###构建系统

- - #14647 `7edebed` 删除darwin.mk中的非法间距 (ch4ot1c)

- - #14698 `ec71f06` 将bitcoin-tx.exe添加到Windows安装程序中(ken2812221)

###测试和质量保证

- - #13965 `29899ec` 修复扩展功能测试失败(ken2812221)

- - #14011 `9461f98` 在macOS minimal平台上禁用钱包和地址簿Qt测试 (ryanofsky)

- - #14180 `86fadee` 即使钱包没有被编译,也要运行所有测试(MarcoFalke)

- - #14122 `8bc1bad` 测试`rpc_help.py`失败:检查ZMQ是否启用(Kvaciral)

- - #14101 `96dc936` 在验证接受测试中,使用命名args(MarcoFalke)

- - #14020 `24d796a` 为RPC帮助添加测试 (promag)

- - #14052 `7ff32a6` 在`rpc_rawtransaction`中添加一些实际的验证内容 (MarcoFalke)

- - #14215 `b72fbab` 在示例测试中使用正确的python索引切片(sdaftuar)

- - #14024 `06544fa` 添加`TestNode::assert_debug_log` (MarcoFalke)

- - #14658 `60f7a97` 添加测试,以确保节点可以在运行时生成所有rpc帮助文本(MarcoFalke)

- - #14632 `96f15e8` 修正了一个comment (fridokus)

- - #14700 `f9db08e` 通过等待区块请求,来避免`p2p_invalid_block`中的竞争(MarcoFalke)

- - #14845 `67225e2` 添加 `wallet_balance.py` (jnewbery)

###文件

- - #14161 `5f51fd6` doc/descriptors.md tweaks(ryanofsky)

- - #14276 `85aacc4` 在ARM交叉编译中添加autogen.sh(walterwhite81)

 
贡献者
 

感谢直接为这次软件发布做出贡献的每一个人:

- - Andrew Chow

- - Chun Kuan Lee

- - David A. Harding

- - Eric Scrivner

- - fanquake

- - fridokus

- - Glenn Willen

- - Gregory Sanders

- - gustavonalle

- - John Newbery

- - Jon Layton

- - Jonas Schnelli

- - João Barbosa

- - Kaz Wesley

- - Kvaciral

- - Luke Dashjr

- - MarcoFalke

- - MeshCollider

- - Pieter Wuille

- - practicalswift

- - Russell Yanofsky

- - Sjors Provoost

- - Suhas Daftuar

- - Tim Ruffing

- - Walter

- - Wladimir J. van der Laan

以及所有在[Transifex]上帮助开发团队翻译文档的人。

----- PGP 签名信息 -----

iQEzBAEBCgAdFiEEnerg3HBjJJ+wVHRoHkrtYphs0l0FAlwh9x0ACgkQHkrtYphs 0l1yqQf/WzqxJkIrzyO9ZRaLKjaaxVz8E7jqHsyA+4mdObsSPjneGfKh7OEC2Fhx VV7EF+A5kNFQgwnPwXlW3AaiuDhcGHEG4T0AB0JGaggLD6KrjpzuWHYx5k0COwdG 5sYRH4tZxbtWoF1+IQ1R8Ceac20VBqBUBJJfAAntg4VrGaBjDqFJzf+0GmQM0gyW tq12nMIwevHWXsmtrQWhAbCeLI8pyhGLOtLqCgrrD5hqe72iV7t6Njs5E+kRkEM1 Um6a3nc7LTUMXufTwBf6Sie6azubybvI2/G2HvYEn7DKpLAXiihyO8iiheAi6g4U JtAgFUiyIvmeLh8etboF3pLy/Q8F5A== =LFNX


原文:https://lists.linuxfoundation.org/pipermail/bitcoin-core-dev/2018-December/000072.html
作者:bitcoin core 开发团队
翻译:洒脱喜

无惧“严寒”!比特币全节点数量突破1万个

资讯8btc 发表了文章 • 2018-11-21 18:34 • 来自相关话题

据Coin Dance本周提供的新数据显示,比特币公共节点数量大幅增加。目前比特币网络上共有10094个公共节点,继今年3月以来首次突破10000个。

大约95%的节点都在运行Bitcoin Core,这一比例自今年年初以来始终保持稳步增长。节点数量排名第二的客户端是Bitcore,但只占到了总数量的2%。

目前仍有56个节点在运行Bitcoin UASF,这个软件对那些不愿意从2017年8月开始采用隔离见证(SegWit)的矿工的反击。直到现在,业内很多人都认为这一举措是用户的胜利,打败了大集团利益。

在隔离见证软分叉之前,UASF(用户激活软分叉)节点达到了1350个,在顺利完成任务之后就迅速减少。在此之后,BCH就从比特币网络分离出来了,当时节点数量也开始迅速上涨。

除了比特币公共节点之外,闪电网络节点也随着该项技术的成熟而增加,本月初节点数量已经超过了4000。其网络容量也达到了历史新高,即118个BTC。

所有用户都可以运行比特币全节点,除了能够帮到比特币网络之外,还能保障用户的权益。运行比特币全节点的主要优势有:

1. 帮助比特币网络

运行全节点是控制并且确保比特币网络中的规则没有被破坏的唯一方式。节点可以拒绝那些没有遵守共识规则的区块和交易。从这层意义上来看,节点比算力更加重要,因为它们是确保区块链规则和秩序的唯一选择。就算某条链是最长的PoW链,节点依然能够通过判断这条链是否遵守规则来决定是否接受它。

比特币维基页面中提到:

无论如何,全节点都会执行共识规则。然而,轻节点不会这么做。轻节点只会按照大多数算力的动向行事。因此,假设大多数矿工集结在一起希望提高区块奖励,轻节点可能只会盲目追随。


2. 保证你的安全

如果你的比特币钱包不需要你运行全节点,那就意味着你必须信任服务商,这是很不安全的。有些网页钱包需要你信任一个中心节点,因为你的交易是通过这个节点广播的。Electrum等轻客户端也需要你信任他们的服务器。就连SPV客户端也需要信任第三方,因为你只需要下载区块头,而不用验证区块链规则。

3. 选择的机会

一旦硬分叉导致区块链被一分为二,同时两条链依然能够正常进行经济活动,那么运行全节点除了能够验证区块链规则之外,还可以发表自己的意见。运行特定客户端的节点是一种间接的投票方式,可以让矿工知道用户支持的是哪种规则。

4. 更多隐私

运行全节点能让你获得更多的隐私。依赖于第三方服务器来广播交易就相当于给了这些服务器记录你地址的机会。

5. 运行全节点也没那么难

对于不了解技术的用户来说,运行全节点似乎是一个挑战。但其实就相当于下载最新版的客户端然后保持开启状态。

比特币区块链已经超过100GB,因此,一开始同步节点需要花上一段时间。不过,Core在新版本中改进了验证速度和网络传播性能,未来网络同步和区块加载时间会逐渐缩短。

6. 运行全节点的成本不高

运行全节点需要保证电脑始终保持开启状态——或者至少大部分的时间要开着。其实你可以随时开启或者关闭节点,但频繁的开关操作并不实际。很多用户都不会在自己的电脑上运行节点,而是租一个虚拟服务器。


Bitcoin Core列出了运行比特币全节点的基本要求:

- 运行最新版Windows、Mac OS X或Linux的台式或笔记本电脑硬件

- 125GB的可用磁盘空间

- 2GB内存

- 网络上传速度至少50KB/S

- 不限量的网络连接、上传限制较高的连接或有定期监控的连接,以确保不超过其上传限制。对于高速连接上的所有节点来说,一个月使用200GB以上的容量是很常见的。每个月的下载使用量约为20GB,而在第一次启动节点时,还会额外需要100GB

- 你的全节点每天至少要运行6个小时(运行过程中你可以做其他事),运行时间越长越好,最好是不间断的运行。



原文:Bitcoin Public Full Node Count Surpasses 10,000
作者:EMILIO JANUS
编译:Wendy 查看全部
shutterstock_403738375.jpg

据Coin Dance本周提供的新数据显示,比特币公共节点数量大幅增加。目前比特币网络上共有10094个公共节点,继今年3月以来首次突破10000个。

大约95%的节点都在运行Bitcoin Core,这一比例自今年年初以来始终保持稳步增长。节点数量排名第二的客户端是Bitcore,但只占到了总数量的2%。

目前仍有56个节点在运行Bitcoin UASF,这个软件对那些不愿意从2017年8月开始采用隔离见证(SegWit)的矿工的反击。直到现在,业内很多人都认为这一举措是用户的胜利,打败了大集团利益。

在隔离见证软分叉之前,UASF(用户激活软分叉)节点达到了1350个,在顺利完成任务之后就迅速减少。在此之后,BCH就从比特币网络分离出来了,当时节点数量也开始迅速上涨。

除了比特币公共节点之外,闪电网络节点也随着该项技术的成熟而增加,本月初节点数量已经超过了4000。其网络容量也达到了历史新高,即118个BTC。

所有用户都可以运行比特币全节点,除了能够帮到比特币网络之外,还能保障用户的权益。运行比特币全节点的主要优势有:

1. 帮助比特币网络

运行全节点是控制并且确保比特币网络中的规则没有被破坏的唯一方式。节点可以拒绝那些没有遵守共识规则的区块和交易。从这层意义上来看,节点比算力更加重要,因为它们是确保区块链规则和秩序的唯一选择。就算某条链是最长的PoW链,节点依然能够通过判断这条链是否遵守规则来决定是否接受它。

比特币维基页面中提到:


无论如何,全节点都会执行共识规则。然而,轻节点不会这么做。轻节点只会按照大多数算力的动向行事。因此,假设大多数矿工集结在一起希望提高区块奖励,轻节点可能只会盲目追随。



2. 保证你的安全

如果你的比特币钱包不需要你运行全节点,那就意味着你必须信任服务商,这是很不安全的。有些网页钱包需要你信任一个中心节点,因为你的交易是通过这个节点广播的。Electrum等轻客户端也需要你信任他们的服务器。就连SPV客户端也需要信任第三方,因为你只需要下载区块头,而不用验证区块链规则。

3. 选择的机会

一旦硬分叉导致区块链被一分为二,同时两条链依然能够正常进行经济活动,那么运行全节点除了能够验证区块链规则之外,还可以发表自己的意见。运行特定客户端的节点是一种间接的投票方式,可以让矿工知道用户支持的是哪种规则。

4. 更多隐私

运行全节点能让你获得更多的隐私。依赖于第三方服务器来广播交易就相当于给了这些服务器记录你地址的机会。

5. 运行全节点也没那么难

对于不了解技术的用户来说,运行全节点似乎是一个挑战。但其实就相当于下载最新版的客户端然后保持开启状态。

比特币区块链已经超过100GB,因此,一开始同步节点需要花上一段时间。不过,Core在新版本中改进了验证速度和网络传播性能,未来网络同步和区块加载时间会逐渐缩短。

6. 运行全节点的成本不高

运行全节点需要保证电脑始终保持开启状态——或者至少大部分的时间要开着。其实你可以随时开启或者关闭节点,但频繁的开关操作并不实际。很多用户都不会在自己的电脑上运行节点,而是租一个虚拟服务器。


Bitcoin Core列出了运行比特币全节点的基本要求:


- 运行最新版Windows、Mac OS X或Linux的台式或笔记本电脑硬件

- 125GB的可用磁盘空间

- 2GB内存

- 网络上传速度至少50KB/S

- 不限量的网络连接、上传限制较高的连接或有定期监控的连接,以确保不超过其上传限制。对于高速连接上的所有节点来说,一个月使用200GB以上的容量是很常见的。每个月的下载使用量约为20GB,而在第一次启动节点时,还会额外需要100GB

- 你的全节点每天至少要运行6个小时(运行过程中你可以做其他事),运行时间越长越好,最好是不间断的运行。




原文:Bitcoin Public Full Node Count Surpasses 10,000
作者:EMILIO JANUS
编译:Wendy

比特币0.17.0版本客户端发布在即,隐私功能成为亮点

攻略8btc 发表了文章 • 2018-09-05 11:37 • 来自相关话题

 
比特币最新版的客户端Bitcoin Core 0.17.0距正式发布已越来越近,这也是10年来比特币的第17代客户端版本。
 
据Bitcoin Core 维护者Wladimir van der Laan预计,这一版本的客户端最早将于9月8日发布。目前其在github上的完成度已经达到了92%。
 
以下为0.17.0版本更新说明:(注意,这只是一个临时版的说明,正式发布时可能会稍作修改)
 
Bitcoin Core 0.17.0 版本可以在这里访问了:
 
https://bitcoincore.org/bin/bitcoin-core-0.17.0/
 
这是比特币的重大更新版本,更新内容包括新功能、各种bug修复,以及性能提升。
 
开发者可以使用GitHub的问题跟踪器上报错误:
 
若要接受安全及更新通知,请订阅:
 
https://bitcoincore.org/en/list/announcements/join/
 
 
如何更新
 
 
如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。
 
如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。
 
当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。
 
注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。在0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。
 
 
降级预警
 
 
此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何旧版的客户端,你就需要运行旧版本的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。
 
如果你的节点已启用了修建模式,那么就需要你重新下载同步整个比特币区块链。
 
 
兼容性
 
 
Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。
 
Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。
 
需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。
 
 
显著的更改
 
 
更改配置选项
 
-includeconf=<file>可用于包含附加配置文件。它只在bitcoin.conf文件内时起作用,并不作用于包含文件或命令行。它可包含多个文件。操作者可通过命令行-noincludeconf 禁用这一功能。请注意,例如-includeconf这样的多参数命令,将覆盖掉先前的-noincludeconf 命令行;
 
noincludeconf=1 includeconf=relative.conf
 
bitcoin.conf将仍然包含relative.conf 。
 
 
更新图形用户界面
 
在主选项卡中,区块存储可在参数选择栏中进行限制。而撤消此设置,需要再次下载完整的区块链。此模式与 -txindex 以及 -rescan 是不兼容的。
 
 
外部钱包文件
 
-wallet=<path>选项现在接受了全路径,不再需要把钱包放置于-walletdir目录当中。
新创建的钱包格式
如果 -wallet=<path> 指定了一个不存在的路径,那么它现在将在指定位置创建一个钱包目录(包括一个wallet.dat数据文件,一个db.log文件以及database/log.??????????文件),而不仅仅是在路径中创建一个数据文件,并将日志文件存储在父目录当中。这使得备份钱包的操作会比以前更简单,因为指定的钱包路径可以直接归档,而不必在父目录中查找交易日志文件。
 
为了实现向后兼容,钱包路径是以-walletdir目录中现有数据文件为名,则将继续被接受,并像以前一样被解释。
 
 
钱包的动态加载及创建
 
以前,钱包只有在命令行或bitcoin.conf文件中定义-wallet 参数时,才能实现加载或创建。而现在,客户端就可实现在运行时完成钱包动态的加载、创建和卸载操作:
 

现有的钱包可通过调用 loadwallet RPC(远程过程调用)来实现加载。钱包可以指定为文件/目录名(必须位于 walletdir目录当中),或作为文件/目录的绝对路径。
新的钱包可以通过调用createwallet RPC(远程过程调用)来进行创建(或加载)。所提供的名称,必须和walletdir目录中的钱包文件或当前加载的钱包的名字差异化。
加载钱包可以通过调用unloadwallet RPC命令行实现加载;

 
此特性目前只能通过RPC接口实现。
 
 
可选交易(Coin selection)
 
 
Partial spend avoidance(部分花费规避)
 
当一个地址被用于支付多次时,来自这些分离支付的币,就可单独地进行使用,而这样会连接到其它地址,从而有损交易的隐私性。
 
而新版客户端添加了一种新的 -avoidpartialspends 操作码(默认值为false)。如果启用了这个功能,那钱包总是会把现有的UTXO汇聚到同一个地址,即使它会导致更高的费用。这样做就可以提高交易的隐私性。
 
 
测试网和RegTest 测试网络的配置部分
 
现在,单个配置文件,可实现为不同的网络设置不同的选项了。实现方法如下:
 
main.uacomment=bitcoin test.uacomment=bitcoin-testnet regtest.uacomment=regtest [main] mempoolsize=300 [test] mempoolsize=100 [regtest] mempoolsize=20
 
根据配置文件的规则,addnode=, connect=, port=, bind=, rpcport=, rpcbind= 以及 wallet= 选项将只适用于比特币主网。
 
 
钱包的‘标签’和‘账户’API
 
新版本的钱包客户端引入了一个新的‘标签-label’API。这是为了取代被弃用的‘账户-account’API。通过'-deprecatedrpc=accounts' 参数,这个‘账户’仍可在V0.17客户端当中使用,而在V0.18版本客户端中,它将被完全移除。
 
这个标签RPC方法和账户功能是非常类似的,差异在于以下这几点:
 
    标签可以在任何地址上进行设置,而不仅仅是接收地址。此功能以前仅通过GUI可用。
    标签可通过 setlabel RPC的方法,重新分配所有地址,来进行删除;
    不支持从一个标签来发送交易,也不支持确定一笔交易是从哪个标签发送而来的;
    标签没有所谓的余额;
 
以下是RPC方法的变化:
 
 
被移除的方法 新的方法 注释
 
getaccount getaddressinfo  Getaddressinfo返回了一个具有地址信息的JSON对象,而不仅仅是字符串的账户名称
 
getaccountaddress  n/a 因为标签没有关联的接收地址,所以getaccountaddress就没有替换选项了
 
getaddressesbyaccount getaddressesbylabel Getaddressesbylabel返回了一个JSON对象,其地址为密钥,而不是字符串列表
 
getreceivedbyaccount getreceivedbylabel 行为上没有发生变化
 
listaccounts  listlabels  Listlabels不会返回余额,也不会接受minconf和watchonly参数
 
listreceivedbyaccount  listreceivedbylabel 这两种方法都返回新的标签字段,以及用于向后兼容的账户字段
 
move  n/a 没有替代方法
 
sendfrom n/a 没有替代方法
 
setaccount setlabel 这两种方法都具有:1、允许将标签分配给任何地址,而不是在地址不接收地址时引发错误。2、删除与某地址相关联的先前标签,当使用该标签的最后地址被重新分配到另一个标签时。而不是进行隐式的getaccountaddress调用(确保先前的标签仍然具有一个接收地址);
 
 
更改过的方法 注释
 
addmultisigaddress 将参数account重命名为 label,如果用'-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
getnewaddress 将参数account重命名为 label,如果用 '-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
listunspent 返回新的标签字段,如果使用'-deprecatedrpc=accounts'运行,account字段将将返回以向后兼容。
 
sendmany 将参数account重命名为 dummy,如果提供,则这个dummy参数必须设置为空字符串,除非使用 -deprecatedrpc=accounts 参数(在这种情况下,功能不变)运行
 
listtransactions 将参数account重命名为 dummy,如果提供,则这个dummy必须设置为*字符串,除非使用 -deprecatedrpc=accounts  参数(在这种情况下,功能不变)运行。
 
getbalance account, minconf 以及include_watchonly参数被弃用了,这些参数只有在使用 '-deprecatedrpc=accounts'运行时才能够使用。
 
 
 
BIP 174 : 支持部分签名比特币交易(Partially Signed Bitcoin Transactions support)
 
 
BIP 174 PSBT 是用于尚未完全签名的比特币交易的一种交换格式,它与相关元数据一起协助对像进行签署。其旨在简化多方合作交易时的工作流程。例子包括硬件钱包、多重签名设置,以及CoinJoin交易。
 
 
整体工作流程
 
 
总体而言,一笔具有完整签名的比特币交易,其构建经历了以下步骤:
 

一名创建者(Creator)提出了一笔要创建的特定交易。它构造了一笔包含某些输入(input)和输出(output),但没有附加元数据的PSBT交易;
对于每一个输出(output),更新者(Updater)会把交易所花费的UTXO信息添加到 PSBT交易当中;
潜在的其他更新者,会把每一个输入(以及可能的输出)中所涉及的脚本和公钥信息添加到PSBT交易当中;
签名者(Signers)会检查这笔PSBT交易及其元数据,然后决定是否同意交易。它们可以使用UTXO当中的数量信息来评估所涉及的价值和费用。如果同意,它们就会为具有相关密钥的输入,生产一个部分签名(partial signature)。
决策者(Finalizer)会把关每一个输入,并转换这个部分签名,并可能把脚本信息写入最终的scriptSig 以及/或scriptWitness 。
提取者(Extractor )会从一笔PSBT交易当中,提取并生产出一笔有效的比特币交易。

 
一般来说,上面的每一个参与者(不包括创建者和提取者)会简单地把越来越多的数据添加到特定的PSBT交易当中。在简单的工作流程当中,它们必须按顺序操作,将 PSBT交易从一方传递到下一方,直到提取者(Extractor )可以将其转换为一笔真正的比特币交易。为了允许并行操作,组合者(Combiners)可以把不同的PSBT交易的元数据合并到同一个未签名的交易当中。
 
上面使用粗体所表示的名称,是BIP174中定义角色的名称。这对于理解底层步骤很有用,但在实践过程中,软件和硬件通常同时担任了多个角色。
 
 
RPC
 

converttopsbt (创建者)是一个功能性RPC,它将未签名的原始交易转换为PSBT格式,其忽略了现有签名。
createpsbt(创建者)是一个功能性RPC,它负责获取输入和输出列表,并把它们转换为没有附加信息的PSBT,其相当于在converttopsbt之后调用createrawtransaction
walletcreatefundedpsbt (创建者, 更新者) 是一个钱包RPC,它负责创建具有指定输入和输出的PSTB,并向其添加额外的输入,更改以平衡之,并添加相关的元数据。
walletprocesspsbt(更新者,签名者,决策者)是一个钱包RPC,它负责接受PSBT作为输入,将UTXO、密钥和脚本数据添加到那些错过它的输入和输出当中,并可选地对输入进行签名。在可能的情况下,它也能够完成部分签名;
finalizepsbt (决策者,提取者)是一个功能性RPC,它用于完成任何部分签名,如果所有的输入都已完成,则将结果转换为完全签名的交易,该交易可以通过sendrawtransaction 进行广播;
combinepsbt (组合者)是一个功能性RPC,它的作用就是作为一个组合者,它可以在任何工作流程的任何时间点使用,其可以将信息添加到同一PSBT的不同版本当中。特别地,它对于多个更新者或签名者输出的组合而言,是有用的。
decodepsbt是一个诊断型RPC,它可以用于显示PSBT交易中所有的信息,并计算它的最终费用。

 
 
将非HD钱包升级为HD钱包
 
 
自Bitcoin Core 0.13.0版本客户端发布以来,Bitcoin Core 就可以支持创建新的BIP 32 分层确定性(HD)钱包,但旧的非HD钱包无法升级到HD钱包。现在,我们可通过-upgradewallet 命令行选项将非HD钱包升级到HD钱包。这一升级,将导致密钥池中的所有密钥会被标记为已使用,并生成新的密钥池。执行此升级时,操作者必须做好钱包备份。
 
此外,-upgradewallet命令行还可以把非分裂HD链(用m/0'/0'/i'生成的所有密钥)升级到一个分裂HD链(接收用 'm/0'/0'/i'生成的密钥,以及用m'/0'/1'/i'生成的更改密钥)。当发生此升级时,密钥池中已有的所有密钥,将保留在密钥池中以供使用,直到升级前所有的密钥被耗尽。这是为了避免备份及降级的问题(当一些密钥可能来自更改密钥池时)。用户们可以使用newkeypool RPC 命令行来使用新的分裂HD链密钥池,来标记密钥池中已使用的所有密钥,并开始使用这个分裂HD链中生成的新密钥池。
 
 
HD 主密钥控制
 
 
一个新的RPC sethdseed 已被引入到客户端当中,它允许用户设置新的HD种子,或设置自己的HD种子。需要注意的是,在设置新的HD种子时,用户必须进行新的备份。
 
 
重要性较低的 RPC更改
 

createrawtransaction RPC 现在将为outputs参数接受数组(array)或dictionary (保持兼容性),这意味着交易输出顺序,可以由客户端指定。
fundrawtransaction RPC 将拒绝先前被否定的 reserveChangeKey 选项;
sendmany 将负责打乱输出(output)以改善隐私性,因此,任何先前预期的关于输出排序的行为都变得不可靠了;
新的testmempoolaccept RPC ,可用来测试在不添加一笔交易的情况下,看其是否会被交易储蓄池(mempool)所接受;
JSON交易分解现在包括了一个权重字段,其它提供了交易的确切权重。在JSON模式下,它将纳入REST /rest/tx/ 以及/rest/block/ 端点中。它也会包含于getblock (verbosity=2),listsinceblock,listtransactions, 以及getrawtransaction RPC命令中。
新的fees字段将引入getrawmempool,getmempoolancestors, getmempooldescendants 以及 getmempoolentry,当子字段 ancestor, base, modified 以及 descendant以BTC计价,verbosity设置为 true时。这个新的字段会否定先前的费用字段,例如fee, modifiedfee, ancestorfee 以及 descendantfee;
新的RPC getzmqnotifications 会返回有关活跃ZMQ通知的信息。
当比特币并不以任何-wallet=<path>选项启动时,由getwalletinfo和listwallets 这两个RPC所返回的默认钱包名现在会是空字符串 "" ,而不是先前的"wallet.dat" 。如果是通过-wallet=<path>选项启动的,则和以前没有变化,任何钱包的名称只是其<path>字符串。
现在,将一个空字符串("") 作为address_type参数传递给getnewaddress, getrawchangeaddress, addmultisigaddress, fundrawtransaction RPC 会是一个错误。以前,这将回到使用默认地址类型。它仍然可以传递空字符串或将未设置的参数保留为使用默认地址类型。
空的多重签名输出,将不再自动被当做传入支付。由于此功能仅适用于多重签名输出,也就是你拥有钱包当中所有私钥的情况。与单个密钥方案相比,这通常没有什么用处。此外,当前并没有定义这样的输出地址格式,并且钱包软件不能很容易地发送给它。listtransactions,listunspent 命令行将不再显示这些输出,这些输出也不会和你余额有关,除非它们被明确监视(用十六进制脚本参数importaddress或importmulti,signrawtransaction*也可以使用)。
getwalletinfo RPC 现在会返回一个hdseedid值,它始终与不正确命名的hdmasterkeyid值相同。hdmasterkeyid将在V0.18版本客户端中被删除。

 
 
其他API更改
 
 
在dumpwallet 输出中的inactivehdmaster 已被更改为inactivehdseed
 
 
日志
 

日志时间戳的格式现在是ISO 8601 (例如"2018-02-28T12:34:56Z")。
当运行带有 -debug,而没有-daemon的bitcoind时,记录stdout现在就成为了默认行为。设置-printtoconsole=1 不再隐含地禁止记录到debug.log。相反,我们可通过设置-debuglogfile=0 来显式禁用记录到文件。

 
 
交易索引变化
 
 
交易索引现在和主节点过程分开构建,这意味着 -txindex 操作码,可在没有完全重新索引的情况下进行toggled切换。如果bitcoind是用-txindex 在一个已部分或完全同步的节点上运行的,则交易索引可在后台建立,并且一旦被捕获就可使用。当从运行-txindex,切换到不带这一flag的运行时,交易索引数据库将不会自动被删除,这意味着,我们可以在稍后的时间里重新打开它,而无需重新同步。
 
 
区块限制功能
 
 
在V0.15.1客户端当中,允许矿工限制其区块大小的-blockmaxsize 选项遭到了反对,现在这个选项被移除掉了。如果矿工们想要限制区块的大小,他们应使用-blockmaxweight 这个选项。
 
 
中断对Python  2.0的支持
 
 
对于所有测试文件及工具而言,新版本的客户端对Python 2.0的支持已经中断。
 
最后,感谢所有对该版本比特币客户端作出直接贡献的人,也感谢帮助翻译的每一个人。
 
 
原文:0.17.0 Release notes
作者:Bitcoin core开发组
编译:洒脱喜 查看全部
201809050303409478.jpg

 
比特币最新版的客户端Bitcoin Core 0.17.0距正式发布已越来越近,这也是10年来比特币的第17代客户端版本。
 
据Bitcoin Core 维护者Wladimir van der Laan预计,这一版本的客户端最早将于9月8日发布。目前其在github上的完成度已经达到了92%。
 
以下为0.17.0版本更新说明:(注意,这只是一个临时版的说明,正式发布时可能会稍作修改)
 
Bitcoin Core 0.17.0 版本可以在这里访问了:
 
https://bitcoincore.org/bin/bitcoin-core-0.17.0/
 
这是比特币的重大更新版本,更新内容包括新功能、各种bug修复,以及性能提升。
 
开发者可以使用GitHub的问题跟踪器上报错误:
 
若要接受安全及更新通知,请订阅:
 
https://bitcoincore.org/en/list/announcements/join/
 
 
如何更新
 
 
如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。
 
如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。
 
当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。
 
注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。在0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。
 
 
降级预警
 
 
此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何旧版的客户端,你就需要运行旧版本的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。
 
如果你的节点已启用了修建模式,那么就需要你重新下载同步整个比特币区块链。
 
 
兼容性
 
 
Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。
 
Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。
 
需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。
 
 
显著的更改
 
 
更改配置选项
 
-includeconf=<file>可用于包含附加配置文件。它只在bitcoin.conf文件内时起作用,并不作用于包含文件或命令行。它可包含多个文件。操作者可通过命令行-noincludeconf 禁用这一功能。请注意,例如-includeconf这样的多参数命令,将覆盖掉先前的-noincludeconf 命令行;
 
noincludeconf=1 includeconf=relative.conf
 
bitcoin.conf将仍然包含relative.conf 。
 
 
更新图形用户界面
 
在主选项卡中,区块存储可在参数选择栏中进行限制。而撤消此设置,需要再次下载完整的区块链。此模式与 -txindex 以及 -rescan 是不兼容的。
 
 
外部钱包文件
 
-wallet=<path>选项现在接受了全路径,不再需要把钱包放置于-walletdir目录当中。
新创建的钱包格式
如果 -wallet=<path> 指定了一个不存在的路径,那么它现在将在指定位置创建一个钱包目录(包括一个wallet.dat数据文件,一个db.log文件以及database/log.??????????文件),而不仅仅是在路径中创建一个数据文件,并将日志文件存储在父目录当中。这使得备份钱包的操作会比以前更简单,因为指定的钱包路径可以直接归档,而不必在父目录中查找交易日志文件。
 
为了实现向后兼容,钱包路径是以-walletdir目录中现有数据文件为名,则将继续被接受,并像以前一样被解释。
 
 
钱包的动态加载及创建
 
以前,钱包只有在命令行或bitcoin.conf文件中定义-wallet 参数时,才能实现加载或创建。而现在,客户端就可实现在运行时完成钱包动态的加载、创建和卸载操作:
 


现有的钱包可通过调用 loadwallet RPC(远程过程调用)来实现加载。钱包可以指定为文件/目录名(必须位于 walletdir目录当中),或作为文件/目录的绝对路径。
新的钱包可以通过调用createwallet RPC(远程过程调用)来进行创建(或加载)。所提供的名称,必须和walletdir目录中的钱包文件或当前加载的钱包的名字差异化。
加载钱包可以通过调用unloadwallet RPC命令行实现加载;


 
此特性目前只能通过RPC接口实现。
 
 
可选交易(Coin selection)
 
 
Partial spend avoidance(部分花费规避)
 
当一个地址被用于支付多次时,来自这些分离支付的币,就可单独地进行使用,而这样会连接到其它地址,从而有损交易的隐私性。
 
而新版客户端添加了一种新的 -avoidpartialspends 操作码(默认值为false)。如果启用了这个功能,那钱包总是会把现有的UTXO汇聚到同一个地址,即使它会导致更高的费用。这样做就可以提高交易的隐私性。
 
 
测试网和RegTest 测试网络的配置部分
 
现在,单个配置文件,可实现为不同的网络设置不同的选项了。实现方法如下:
 
main.uacomment=bitcoin test.uacomment=bitcoin-testnet regtest.uacomment=regtest [main] mempoolsize=300 [test] mempoolsize=100 [regtest] mempoolsize=20
 
根据配置文件的规则,addnode=, connect=, port=, bind=, rpcport=, rpcbind= 以及 wallet= 选项将只适用于比特币主网。
 
 
钱包的‘标签’和‘账户’API
 
新版本的钱包客户端引入了一个新的‘标签-label’API。这是为了取代被弃用的‘账户-account’API。通过'-deprecatedrpc=accounts' 参数,这个‘账户’仍可在V0.17客户端当中使用,而在V0.18版本客户端中,它将被完全移除。
 
这个标签RPC方法和账户功能是非常类似的,差异在于以下这几点:
 
    标签可以在任何地址上进行设置,而不仅仅是接收地址。此功能以前仅通过GUI可用。
    标签可通过 setlabel RPC的方法,重新分配所有地址,来进行删除;
    不支持从一个标签来发送交易,也不支持确定一笔交易是从哪个标签发送而来的;
    标签没有所谓的余额;
 
以下是RPC方法的变化:
 
 
被移除的方法 新的方法 注释
 
getaccount getaddressinfo  Getaddressinfo返回了一个具有地址信息的JSON对象,而不仅仅是字符串的账户名称
 
getaccountaddress  n/a 因为标签没有关联的接收地址,所以getaccountaddress就没有替换选项了
 
getaddressesbyaccount getaddressesbylabel Getaddressesbylabel返回了一个JSON对象,其地址为密钥,而不是字符串列表
 
getreceivedbyaccount getreceivedbylabel 行为上没有发生变化
 
listaccounts  listlabels  Listlabels不会返回余额,也不会接受minconf和watchonly参数
 
listreceivedbyaccount  listreceivedbylabel 这两种方法都返回新的标签字段,以及用于向后兼容的账户字段
 
move  n/a 没有替代方法
 
sendfrom n/a 没有替代方法
 
setaccount setlabel 这两种方法都具有:1、允许将标签分配给任何地址,而不是在地址不接收地址时引发错误。2、删除与某地址相关联的先前标签,当使用该标签的最后地址被重新分配到另一个标签时。而不是进行隐式的getaccountaddress调用(确保先前的标签仍然具有一个接收地址);
 
 
更改过的方法 注释
 
addmultisigaddress 将参数account重命名为 label,如果用'-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
getnewaddress 将参数account重命名为 label,如果用 '-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
listunspent 返回新的标签字段,如果使用'-deprecatedrpc=accounts'运行,account字段将将返回以向后兼容。
 
sendmany 将参数account重命名为 dummy,如果提供,则这个dummy参数必须设置为空字符串,除非使用 -deprecatedrpc=accounts 参数(在这种情况下,功能不变)运行
 
listtransactions 将参数account重命名为 dummy,如果提供,则这个dummy必须设置为*字符串,除非使用 -deprecatedrpc=accounts  参数(在这种情况下,功能不变)运行。
 
getbalance account, minconf 以及include_watchonly参数被弃用了,这些参数只有在使用 '-deprecatedrpc=accounts'运行时才能够使用。
 
 
 
BIP 174 : 支持部分签名比特币交易(Partially Signed Bitcoin Transactions support)
 
 
BIP 174 PSBT 是用于尚未完全签名的比特币交易的一种交换格式,它与相关元数据一起协助对像进行签署。其旨在简化多方合作交易时的工作流程。例子包括硬件钱包、多重签名设置,以及CoinJoin交易。
 
 
整体工作流程
 
 
总体而言,一笔具有完整签名的比特币交易,其构建经历了以下步骤:
 


一名创建者(Creator)提出了一笔要创建的特定交易。它构造了一笔包含某些输入(input)和输出(output),但没有附加元数据的PSBT交易;
对于每一个输出(output),更新者(Updater)会把交易所花费的UTXO信息添加到 PSBT交易当中;
潜在的其他更新者,会把每一个输入(以及可能的输出)中所涉及的脚本和公钥信息添加到PSBT交易当中;
签名者(Signers)会检查这笔PSBT交易及其元数据,然后决定是否同意交易。它们可以使用UTXO当中的数量信息来评估所涉及的价值和费用。如果同意,它们就会为具有相关密钥的输入,生产一个部分签名(partial signature)。
决策者(Finalizer)会把关每一个输入,并转换这个部分签名,并可能把脚本信息写入最终的scriptSig 以及/或scriptWitness 。
提取者(Extractor )会从一笔PSBT交易当中,提取并生产出一笔有效的比特币交易。


 
一般来说,上面的每一个参与者(不包括创建者和提取者)会简单地把越来越多的数据添加到特定的PSBT交易当中。在简单的工作流程当中,它们必须按顺序操作,将 PSBT交易从一方传递到下一方,直到提取者(Extractor )可以将其转换为一笔真正的比特币交易。为了允许并行操作,组合者(Combiners)可以把不同的PSBT交易的元数据合并到同一个未签名的交易当中。
 
上面使用粗体所表示的名称,是BIP174中定义角色的名称。这对于理解底层步骤很有用,但在实践过程中,软件和硬件通常同时担任了多个角色。
 
 
RPC
 


converttopsbt (创建者)是一个功能性RPC,它将未签名的原始交易转换为PSBT格式,其忽略了现有签名。
createpsbt(创建者)是一个功能性RPC,它负责获取输入和输出列表,并把它们转换为没有附加信息的PSBT,其相当于在converttopsbt之后调用createrawtransaction
walletcreatefundedpsbt (创建者, 更新者) 是一个钱包RPC,它负责创建具有指定输入和输出的PSTB,并向其添加额外的输入,更改以平衡之,并添加相关的元数据。
walletprocesspsbt(更新者,签名者,决策者)是一个钱包RPC,它负责接受PSBT作为输入,将UTXO、密钥和脚本数据添加到那些错过它的输入和输出当中,并可选地对输入进行签名。在可能的情况下,它也能够完成部分签名;
finalizepsbt (决策者,提取者)是一个功能性RPC,它用于完成任何部分签名,如果所有的输入都已完成,则将结果转换为完全签名的交易,该交易可以通过sendrawtransaction 进行广播;
combinepsbt (组合者)是一个功能性RPC,它的作用就是作为一个组合者,它可以在任何工作流程的任何时间点使用,其可以将信息添加到同一PSBT的不同版本当中。特别地,它对于多个更新者或签名者输出的组合而言,是有用的。
decodepsbt是一个诊断型RPC,它可以用于显示PSBT交易中所有的信息,并计算它的最终费用。


 
 
将非HD钱包升级为HD钱包
 
 
自Bitcoin Core 0.13.0版本客户端发布以来,Bitcoin Core 就可以支持创建新的BIP 32 分层确定性(HD)钱包,但旧的非HD钱包无法升级到HD钱包。现在,我们可通过-upgradewallet 命令行选项将非HD钱包升级到HD钱包。这一升级,将导致密钥池中的所有密钥会被标记为已使用,并生成新的密钥池。执行此升级时,操作者必须做好钱包备份。
 
此外,-upgradewallet命令行还可以把非分裂HD链(用m/0'/0'/i'生成的所有密钥)升级到一个分裂HD链(接收用 'm/0'/0'/i'生成的密钥,以及用m'/0'/1'/i'生成的更改密钥)。当发生此升级时,密钥池中已有的所有密钥,将保留在密钥池中以供使用,直到升级前所有的密钥被耗尽。这是为了避免备份及降级的问题(当一些密钥可能来自更改密钥池时)。用户们可以使用newkeypool RPC 命令行来使用新的分裂HD链密钥池,来标记密钥池中已使用的所有密钥,并开始使用这个分裂HD链中生成的新密钥池。
 
 
HD 主密钥控制
 
 
一个新的RPC sethdseed 已被引入到客户端当中,它允许用户设置新的HD种子,或设置自己的HD种子。需要注意的是,在设置新的HD种子时,用户必须进行新的备份。
 
 
重要性较低的 RPC更改
 


createrawtransaction RPC 现在将为outputs参数接受数组(array)或dictionary (保持兼容性),这意味着交易输出顺序,可以由客户端指定。
fundrawtransaction RPC 将拒绝先前被否定的 reserveChangeKey 选项;
sendmany 将负责打乱输出(output)以改善隐私性,因此,任何先前预期的关于输出排序的行为都变得不可靠了;
新的testmempoolaccept RPC ,可用来测试在不添加一笔交易的情况下,看其是否会被交易储蓄池(mempool)所接受;
JSON交易分解现在包括了一个权重字段,其它提供了交易的确切权重。在JSON模式下,它将纳入REST /rest/tx/ 以及/rest/block/ 端点中。它也会包含于getblock (verbosity=2),listsinceblock,listtransactions, 以及getrawtransaction RPC命令中。
新的fees字段将引入getrawmempool,getmempoolancestors, getmempooldescendants 以及 getmempoolentry,当子字段 ancestor, base, modified 以及 descendant以BTC计价,verbosity设置为 true时。这个新的字段会否定先前的费用字段,例如fee, modifiedfee, ancestorfee 以及 descendantfee;
新的RPC getzmqnotifications 会返回有关活跃ZMQ通知的信息。
当比特币并不以任何-wallet=<path>选项启动时,由getwalletinfo和listwallets 这两个RPC所返回的默认钱包名现在会是空字符串 "" ,而不是先前的"wallet.dat" 。如果是通过-wallet=<path>选项启动的,则和以前没有变化,任何钱包的名称只是其<path>字符串。
现在,将一个空字符串("") 作为address_type参数传递给getnewaddress, getrawchangeaddress, addmultisigaddress, fundrawtransaction RPC 会是一个错误。以前,这将回到使用默认地址类型。它仍然可以传递空字符串或将未设置的参数保留为使用默认地址类型。
空的多重签名输出,将不再自动被当做传入支付。由于此功能仅适用于多重签名输出,也就是你拥有钱包当中所有私钥的情况。与单个密钥方案相比,这通常没有什么用处。此外,当前并没有定义这样的输出地址格式,并且钱包软件不能很容易地发送给它。listtransactions,listunspent 命令行将不再显示这些输出,这些输出也不会和你余额有关,除非它们被明确监视(用十六进制脚本参数importaddress或importmulti,signrawtransaction*也可以使用)。
getwalletinfo RPC 现在会返回一个hdseedid值,它始终与不正确命名的hdmasterkeyid值相同。hdmasterkeyid将在V0.18版本客户端中被删除。


 
 
其他API更改
 
 
在dumpwallet 输出中的inactivehdmaster 已被更改为inactivehdseed
 
 
日志
 


日志时间戳的格式现在是ISO 8601 (例如"2018-02-28T12:34:56Z")。
当运行带有 -debug,而没有-daemon的bitcoind时,记录stdout现在就成为了默认行为。设置-printtoconsole=1 不再隐含地禁止记录到debug.log。相反,我们可通过设置-debuglogfile=0 来显式禁用记录到文件。


 
 
交易索引变化
 
 
交易索引现在和主节点过程分开构建,这意味着 -txindex 操作码,可在没有完全重新索引的情况下进行toggled切换。如果bitcoind是用-txindex 在一个已部分或完全同步的节点上运行的,则交易索引可在后台建立,并且一旦被捕获就可使用。当从运行-txindex,切换到不带这一flag的运行时,交易索引数据库将不会自动被删除,这意味着,我们可以在稍后的时间里重新打开它,而无需重新同步。
 
 
区块限制功能
 
 
在V0.15.1客户端当中,允许矿工限制其区块大小的-blockmaxsize 选项遭到了反对,现在这个选项被移除掉了。如果矿工们想要限制区块的大小,他们应使用-blockmaxweight 这个选项。
 
 
中断对Python  2.0的支持
 
 
对于所有测试文件及工具而言,新版本的客户端对Python 2.0的支持已经中断。
 
最后,感谢所有对该版本比特币客户端作出直接贡献的人,也感谢帮助翻译的每一个人。
 
 
原文:0.17.0 Release notes
作者:Bitcoin core开发组
编译:洒脱喜

比特币喜迎更新,0.17.1 版Bitcoin Core软件正式发布

资讯8btc 发表了文章 • 2018-12-26 12:35 • 来自相关话题

(图片来自免费图库:pxhere.com)


在2018年圣诞节之际,比特币core团队给出了一份非常棒的礼物:0.17.1版本的Bitcoin Core软件,那么这次更新到底有哪些新内容呢?

我们来看看开发团队给出的文档吧,以下为译文内容:

比特币Core 0.17.1版软件已正式发布,现在你可通过以下链接进行访问:

https://bitcoincore.org/bin/bitcoin-core-0.17.1/

这次发布的是一个次版本软件,其修复了一些漏洞,并对软件性能有了一些改进,此外还有一些翻译内容的更改。

开发者可以使用GitHub的问题跟踪器上报错误:

https://github.com/bitcoin/bitcoin/issues

若要接受安全及更新通知,请订阅:

https://bitcoincore.org/en/list/announcements/join/

 
如何更新
 

如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。

如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。

当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。

注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。

 
降级预警
 

此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何更旧版的客户端。你就需要运行旧版的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。

如果你的节点已启用了修建模式,那么就需要你重新下载和同步整个比特币区块链。

 
兼容性
 

Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。

Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。

需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0及之后版本的客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。

 
显著的更改
 

============== `listtransactions`标签支持

- --------------------------------

在0.17.0版本软件中,`listtransactions` RPC`account`参数被弃用了,其被重命名为`dummy`,而在更新版的软件当中,其又被重命名为`label`。

当比特币用`-deprecatedrpc = accounts`进行设置时,指定一个标签/帐户/伪参数将返回传出和传入 交易。而没有`-deprecatedrpc = accounts`设置,它只会返回传入交易(因为它曾经可创建来自特定账户支出的交易,但通过标签不再可能这样做。)

当设置`-deprecatedrpc = accounts`时,可传递空字符串“”,列出没有任何标签的交易。而没有设置`-deprecatedrpc = accounts`时,传递空字符串会是一个错误,因为只返回未标记的交易,通常不会是有用行为,并且可能会引起混乱。


0.17.1更改日志
 

==================
###P2P协议和网络代码

- - #14685`9406502`修复了一个反序列化溢出边缘情况(kazcw)

- - #14728 `b901578`在stringifying(字符串化)addrLocal时修复未初始化的读取(kazcw)

###钱包

- - #14441`5150acc`恢复按标签列出传入交易的能力(jnewbery)

- - # 13546 `91fa15a`修正了CWallet::CreateTransaction(...)中未初始化值 `bnb_use'的使用(practicalswift)

- - #14310 `bb90695` 确保钱包在签名前是解锁状态的(gustavonalle)

- - #14690 `5782fdc` 如果CPubKey在PSBT密钥路径序列化期间无效,则抛出错误(instagibbs)

- - #14852 `2528443` backport: [test]添加`wallet_..py'(MarcoFalke)

- - #14196 `3362a95` psbt:总是丢弃不必要的utxo,并在必要时将非验证utxo转换为验证utxo(achow101)

- - #14588 `70ee1f8` 重构PSBT签名逻辑,以强制执行不变量并修复签名错误(gwillen)

- - #14424 `89a9a9d` 停止要求导入的pubkey,以签署非PKH计划(sipa,MeshCollider)

### RPC和其他API

- - #14417 `fb9ad04`修复没有将地址作为字符串的listreceivedbyadd.(etscrivner)

- - #14596 `de5e48a`漏洞修正: RPC:为createmultisig添加名为param的`address_type` (luke-jr)

- - #14618 `9666dba`使HTTP RPC调试日志记录更具信息性 (practicalswift)

- - #14197 `7bee414` [psbt]如果创建了验证sig,则将非验证UTXO转换为验证UTXO(achow101)

- - #14377 `a3fe125` 检查是否找到psbt输入、输出和全局映射的分离器 (achow101)

- - #14356 `7a590d8` 修复converttopsbt permitigdata arg,添加基本测试(instagibbs)

- - # 14453 `75b5d8c` 在walletpassphrase(钱包密码)超时时,修复钱包卸载 (promag)

### GUI

- - #14403 `0242b5a` 恢复 "Force TLS1.0+ for SSL connections" (real-or-random)

- - #14593 `df5131b` 明确禁用macOS版客户端的“暗模式” (fanquake)

###构建系统

- - #14647 `7edebed` 删除darwin.mk中的非法间距 (ch4ot1c)

- - #14698 `ec71f06` 将bitcoin-tx.exe添加到Windows安装程序中(ken2812221)

###测试和质量保证

- - #13965 `29899ec` 修复扩展功能测试失败(ken2812221)

- - #14011 `9461f98` 在macOS minimal平台上禁用钱包和地址簿Qt测试 (ryanofsky)

- - #14180 `86fadee` 即使钱包没有被编译,也要运行所有测试(MarcoFalke)

- - #14122 `8bc1bad` 测试`rpc_help.py`失败:检查ZMQ是否启用(Kvaciral)

- - #14101 `96dc936` 在验证接受测试中,使用命名args(MarcoFalke)

- - #14020 `24d796a` 为RPC帮助添加测试 (promag)

- - #14052 `7ff32a6` 在`rpc_rawtransaction`中添加一些实际的验证内容 (MarcoFalke)

- - #14215 `b72fbab` 在示例测试中使用正确的python索引切片(sdaftuar)

- - #14024 `06544fa` 添加`TestNode::assert_debug_log` (MarcoFalke)

- - #14658 `60f7a97` 添加测试,以确保节点可以在运行时生成所有rpc帮助文本(MarcoFalke)

- - #14632 `96f15e8` 修正了一个comment (fridokus)

- - #14700 `f9db08e` 通过等待区块请求,来避免`p2p_invalid_block`中的竞争(MarcoFalke)

- - #14845 `67225e2` 添加 `wallet_balance.py` (jnewbery)

###文件

- - #14161 `5f51fd6` doc/descriptors.md tweaks(ryanofsky)

- - #14276 `85aacc4` 在ARM交叉编译中添加autogen.sh(walterwhite81)

 
贡献者
 

感谢直接为这次软件发布做出贡献的每一个人:

- - Andrew Chow

- - Chun Kuan Lee

- - David A. Harding

- - Eric Scrivner

- - fanquake

- - fridokus

- - Glenn Willen

- - Gregory Sanders

- - gustavonalle

- - John Newbery

- - Jon Layton

- - Jonas Schnelli

- - João Barbosa

- - Kaz Wesley

- - Kvaciral

- - Luke Dashjr

- - MarcoFalke

- - MeshCollider

- - Pieter Wuille

- - practicalswift

- - Russell Yanofsky

- - Sjors Provoost

- - Suhas Daftuar

- - Tim Ruffing

- - Walter

- - Wladimir J. van der Laan

以及所有在[Transifex]上帮助开发团队翻译文档的人。

----- PGP 签名信息 -----

iQEzBAEBCgAdFiEEnerg3HBjJJ+wVHRoHkrtYphs0l0FAlwh9x0ACgkQHkrtYphs 0l1yqQf/WzqxJkIrzyO9ZRaLKjaaxVz8E7jqHsyA+4mdObsSPjneGfKh7OEC2Fhx VV7EF+A5kNFQgwnPwXlW3AaiuDhcGHEG4T0AB0JGaggLD6KrjpzuWHYx5k0COwdG 5sYRH4tZxbtWoF1+IQ1R8Ceac20VBqBUBJJfAAntg4VrGaBjDqFJzf+0GmQM0gyW tq12nMIwevHWXsmtrQWhAbCeLI8pyhGLOtLqCgrrD5hqe72iV7t6Njs5E+kRkEM1 Um6a3nc7LTUMXufTwBf6Sie6azubybvI2/G2HvYEn7DKpLAXiihyO8iiheAi6g4U JtAgFUiyIvmeLh8etboF3pLy/Q8F5A== =LFNX


原文:https://lists.linuxfoundation.org/pipermail/bitcoin-core-dev/2018-December/000072.html
作者:bitcoin core 开发团队
翻译:洒脱喜 查看全部
201812260359563544.jpg

(图片来自免费图库:pxhere.com)


在2018年圣诞节之际,比特币core团队给出了一份非常棒的礼物:0.17.1版本的Bitcoin Core软件,那么这次更新到底有哪些新内容呢?

我们来看看开发团队给出的文档吧,以下为译文内容:

比特币Core 0.17.1版软件已正式发布,现在你可通过以下链接进行访问:

https://bitcoincore.org/bin/bitcoin-core-0.17.1/

这次发布的是一个次版本软件,其修复了一些漏洞,并对软件性能有了一些改进,此外还有一些翻译内容的更改。

开发者可以使用GitHub的问题跟踪器上报错误:

https://github.com/bitcoin/bitcoin/issues

若要接受安全及更新通知,请订阅:

https://bitcoincore.org/en/list/announcements/join/

 
如何更新
 

如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。

如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。

当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。

注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。

 
降级预警
 

此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何更旧版的客户端。你就需要运行旧版的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。

如果你的节点已启用了修建模式,那么就需要你重新下载和同步整个比特币区块链。

 
兼容性
 

Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。

Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。

需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0及之后版本的客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。

 
显著的更改
 

============== `listtransactions`标签支持

- --------------------------------

在0.17.0版本软件中,`listtransactions` RPC`account`参数被弃用了,其被重命名为`dummy`,而在更新版的软件当中,其又被重命名为`label`。

当比特币用`-deprecatedrpc = accounts`进行设置时,指定一个标签/帐户/伪参数将返回传出和传入 交易。而没有`-deprecatedrpc = accounts`设置,它只会返回传入交易(因为它曾经可创建来自特定账户支出的交易,但通过标签不再可能这样做。)

当设置`-deprecatedrpc = accounts`时,可传递空字符串“”,列出没有任何标签的交易。而没有设置`-deprecatedrpc = accounts`时,传递空字符串会是一个错误,因为只返回未标记的交易,通常不会是有用行为,并且可能会引起混乱。


0.17.1更改日志
 

==================
###P2P协议和网络代码

- - #14685`9406502`修复了一个反序列化溢出边缘情况(kazcw)

- - #14728 `b901578`在stringifying(字符串化)addrLocal时修复未初始化的读取(kazcw)

###钱包

- - #14441`5150acc`恢复按标签列出传入交易的能力(jnewbery)

- - # 13546 `91fa15a`修正了CWallet::CreateTransaction(...)中未初始化值 `bnb_use'的使用(practicalswift)

- - #14310 `bb90695` 确保钱包在签名前是解锁状态的(gustavonalle)

- - #14690 `5782fdc` 如果CPubKey在PSBT密钥路径序列化期间无效,则抛出错误(instagibbs)

- - #14852 `2528443` backport: [test]添加`wallet_..py'(MarcoFalke)

- - #14196 `3362a95` psbt:总是丢弃不必要的utxo,并在必要时将非验证utxo转换为验证utxo(achow101)

- - #14588 `70ee1f8` 重构PSBT签名逻辑,以强制执行不变量并修复签名错误(gwillen)

- - #14424 `89a9a9d` 停止要求导入的pubkey,以签署非PKH计划(sipa,MeshCollider)

### RPC和其他API

- - #14417 `fb9ad04`修复没有将地址作为字符串的listreceivedbyadd.(etscrivner)

- - #14596 `de5e48a`漏洞修正: RPC:为createmultisig添加名为param的`address_type` (luke-jr)

- - #14618 `9666dba`使HTTP RPC调试日志记录更具信息性 (practicalswift)

- - #14197 `7bee414` [psbt]如果创建了验证sig,则将非验证UTXO转换为验证UTXO(achow101)

- - #14377 `a3fe125` 检查是否找到psbt输入、输出和全局映射的分离器 (achow101)

- - #14356 `7a590d8` 修复converttopsbt permitigdata arg,添加基本测试(instagibbs)

- - # 14453 `75b5d8c` 在walletpassphrase(钱包密码)超时时,修复钱包卸载 (promag)

### GUI

- - #14403 `0242b5a` 恢复 "Force TLS1.0+ for SSL connections" (real-or-random)

- - #14593 `df5131b` 明确禁用macOS版客户端的“暗模式” (fanquake)

###构建系统

- - #14647 `7edebed` 删除darwin.mk中的非法间距 (ch4ot1c)

- - #14698 `ec71f06` 将bitcoin-tx.exe添加到Windows安装程序中(ken2812221)

###测试和质量保证

- - #13965 `29899ec` 修复扩展功能测试失败(ken2812221)

- - #14011 `9461f98` 在macOS minimal平台上禁用钱包和地址簿Qt测试 (ryanofsky)

- - #14180 `86fadee` 即使钱包没有被编译,也要运行所有测试(MarcoFalke)

- - #14122 `8bc1bad` 测试`rpc_help.py`失败:检查ZMQ是否启用(Kvaciral)

- - #14101 `96dc936` 在验证接受测试中,使用命名args(MarcoFalke)

- - #14020 `24d796a` 为RPC帮助添加测试 (promag)

- - #14052 `7ff32a6` 在`rpc_rawtransaction`中添加一些实际的验证内容 (MarcoFalke)

- - #14215 `b72fbab` 在示例测试中使用正确的python索引切片(sdaftuar)

- - #14024 `06544fa` 添加`TestNode::assert_debug_log` (MarcoFalke)

- - #14658 `60f7a97` 添加测试,以确保节点可以在运行时生成所有rpc帮助文本(MarcoFalke)

- - #14632 `96f15e8` 修正了一个comment (fridokus)

- - #14700 `f9db08e` 通过等待区块请求,来避免`p2p_invalid_block`中的竞争(MarcoFalke)

- - #14845 `67225e2` 添加 `wallet_balance.py` (jnewbery)

###文件

- - #14161 `5f51fd6` doc/descriptors.md tweaks(ryanofsky)

- - #14276 `85aacc4` 在ARM交叉编译中添加autogen.sh(walterwhite81)

 
贡献者
 

感谢直接为这次软件发布做出贡献的每一个人:

- - Andrew Chow

- - Chun Kuan Lee

- - David A. Harding

- - Eric Scrivner

- - fanquake

- - fridokus

- - Glenn Willen

- - Gregory Sanders

- - gustavonalle

- - John Newbery

- - Jon Layton

- - Jonas Schnelli

- - João Barbosa

- - Kaz Wesley

- - Kvaciral

- - Luke Dashjr

- - MarcoFalke

- - MeshCollider

- - Pieter Wuille

- - practicalswift

- - Russell Yanofsky

- - Sjors Provoost

- - Suhas Daftuar

- - Tim Ruffing

- - Walter

- - Wladimir J. van der Laan

以及所有在[Transifex]上帮助开发团队翻译文档的人。

----- PGP 签名信息 -----

iQEzBAEBCgAdFiEEnerg3HBjJJ+wVHRoHkrtYphs0l0FAlwh9x0ACgkQHkrtYphs 0l1yqQf/WzqxJkIrzyO9ZRaLKjaaxVz8E7jqHsyA+4mdObsSPjneGfKh7OEC2Fhx VV7EF+A5kNFQgwnPwXlW3AaiuDhcGHEG4T0AB0JGaggLD6KrjpzuWHYx5k0COwdG 5sYRH4tZxbtWoF1+IQ1R8Ceac20VBqBUBJJfAAntg4VrGaBjDqFJzf+0GmQM0gyW tq12nMIwevHWXsmtrQWhAbCeLI8pyhGLOtLqCgrrD5hqe72iV7t6Njs5E+kRkEM1 Um6a3nc7LTUMXufTwBf6Sie6azubybvI2/G2HvYEn7DKpLAXiihyO8iiheAi6g4U JtAgFUiyIvmeLh8etboF3pLy/Q8F5A== =LFNX


原文:https://lists.linuxfoundation.org/pipermail/bitcoin-core-dev/2018-December/000072.html
作者:bitcoin core 开发团队
翻译:洒脱喜

无惧“严寒”!比特币全节点数量突破1万个

资讯8btc 发表了文章 • 2018-11-21 18:34 • 来自相关话题

据Coin Dance本周提供的新数据显示,比特币公共节点数量大幅增加。目前比特币网络上共有10094个公共节点,继今年3月以来首次突破10000个。

大约95%的节点都在运行Bitcoin Core,这一比例自今年年初以来始终保持稳步增长。节点数量排名第二的客户端是Bitcore,但只占到了总数量的2%。

目前仍有56个节点在运行Bitcoin UASF,这个软件对那些不愿意从2017年8月开始采用隔离见证(SegWit)的矿工的反击。直到现在,业内很多人都认为这一举措是用户的胜利,打败了大集团利益。

在隔离见证软分叉之前,UASF(用户激活软分叉)节点达到了1350个,在顺利完成任务之后就迅速减少。在此之后,BCH就从比特币网络分离出来了,当时节点数量也开始迅速上涨。

除了比特币公共节点之外,闪电网络节点也随着该项技术的成熟而增加,本月初节点数量已经超过了4000。其网络容量也达到了历史新高,即118个BTC。

所有用户都可以运行比特币全节点,除了能够帮到比特币网络之外,还能保障用户的权益。运行比特币全节点的主要优势有:

1. 帮助比特币网络

运行全节点是控制并且确保比特币网络中的规则没有被破坏的唯一方式。节点可以拒绝那些没有遵守共识规则的区块和交易。从这层意义上来看,节点比算力更加重要,因为它们是确保区块链规则和秩序的唯一选择。就算某条链是最长的PoW链,节点依然能够通过判断这条链是否遵守规则来决定是否接受它。

比特币维基页面中提到:

无论如何,全节点都会执行共识规则。然而,轻节点不会这么做。轻节点只会按照大多数算力的动向行事。因此,假设大多数矿工集结在一起希望提高区块奖励,轻节点可能只会盲目追随。


2. 保证你的安全

如果你的比特币钱包不需要你运行全节点,那就意味着你必须信任服务商,这是很不安全的。有些网页钱包需要你信任一个中心节点,因为你的交易是通过这个节点广播的。Electrum等轻客户端也需要你信任他们的服务器。就连SPV客户端也需要信任第三方,因为你只需要下载区块头,而不用验证区块链规则。

3. 选择的机会

一旦硬分叉导致区块链被一分为二,同时两条链依然能够正常进行经济活动,那么运行全节点除了能够验证区块链规则之外,还可以发表自己的意见。运行特定客户端的节点是一种间接的投票方式,可以让矿工知道用户支持的是哪种规则。

4. 更多隐私

运行全节点能让你获得更多的隐私。依赖于第三方服务器来广播交易就相当于给了这些服务器记录你地址的机会。

5. 运行全节点也没那么难

对于不了解技术的用户来说,运行全节点似乎是一个挑战。但其实就相当于下载最新版的客户端然后保持开启状态。

比特币区块链已经超过100GB,因此,一开始同步节点需要花上一段时间。不过,Core在新版本中改进了验证速度和网络传播性能,未来网络同步和区块加载时间会逐渐缩短。

6. 运行全节点的成本不高

运行全节点需要保证电脑始终保持开启状态——或者至少大部分的时间要开着。其实你可以随时开启或者关闭节点,但频繁的开关操作并不实际。很多用户都不会在自己的电脑上运行节点,而是租一个虚拟服务器。


Bitcoin Core列出了运行比特币全节点的基本要求:

- 运行最新版Windows、Mac OS X或Linux的台式或笔记本电脑硬件

- 125GB的可用磁盘空间

- 2GB内存

- 网络上传速度至少50KB/S

- 不限量的网络连接、上传限制较高的连接或有定期监控的连接,以确保不超过其上传限制。对于高速连接上的所有节点来说,一个月使用200GB以上的容量是很常见的。每个月的下载使用量约为20GB,而在第一次启动节点时,还会额外需要100GB

- 你的全节点每天至少要运行6个小时(运行过程中你可以做其他事),运行时间越长越好,最好是不间断的运行。



原文:Bitcoin Public Full Node Count Surpasses 10,000
作者:EMILIO JANUS
编译:Wendy 查看全部
shutterstock_403738375.jpg

据Coin Dance本周提供的新数据显示,比特币公共节点数量大幅增加。目前比特币网络上共有10094个公共节点,继今年3月以来首次突破10000个。

大约95%的节点都在运行Bitcoin Core,这一比例自今年年初以来始终保持稳步增长。节点数量排名第二的客户端是Bitcore,但只占到了总数量的2%。

目前仍有56个节点在运行Bitcoin UASF,这个软件对那些不愿意从2017年8月开始采用隔离见证(SegWit)的矿工的反击。直到现在,业内很多人都认为这一举措是用户的胜利,打败了大集团利益。

在隔离见证软分叉之前,UASF(用户激活软分叉)节点达到了1350个,在顺利完成任务之后就迅速减少。在此之后,BCH就从比特币网络分离出来了,当时节点数量也开始迅速上涨。

除了比特币公共节点之外,闪电网络节点也随着该项技术的成熟而增加,本月初节点数量已经超过了4000。其网络容量也达到了历史新高,即118个BTC。

所有用户都可以运行比特币全节点,除了能够帮到比特币网络之外,还能保障用户的权益。运行比特币全节点的主要优势有:

1. 帮助比特币网络

运行全节点是控制并且确保比特币网络中的规则没有被破坏的唯一方式。节点可以拒绝那些没有遵守共识规则的区块和交易。从这层意义上来看,节点比算力更加重要,因为它们是确保区块链规则和秩序的唯一选择。就算某条链是最长的PoW链,节点依然能够通过判断这条链是否遵守规则来决定是否接受它。

比特币维基页面中提到:


无论如何,全节点都会执行共识规则。然而,轻节点不会这么做。轻节点只会按照大多数算力的动向行事。因此,假设大多数矿工集结在一起希望提高区块奖励,轻节点可能只会盲目追随。



2. 保证你的安全

如果你的比特币钱包不需要你运行全节点,那就意味着你必须信任服务商,这是很不安全的。有些网页钱包需要你信任一个中心节点,因为你的交易是通过这个节点广播的。Electrum等轻客户端也需要你信任他们的服务器。就连SPV客户端也需要信任第三方,因为你只需要下载区块头,而不用验证区块链规则。

3. 选择的机会

一旦硬分叉导致区块链被一分为二,同时两条链依然能够正常进行经济活动,那么运行全节点除了能够验证区块链规则之外,还可以发表自己的意见。运行特定客户端的节点是一种间接的投票方式,可以让矿工知道用户支持的是哪种规则。

4. 更多隐私

运行全节点能让你获得更多的隐私。依赖于第三方服务器来广播交易就相当于给了这些服务器记录你地址的机会。

5. 运行全节点也没那么难

对于不了解技术的用户来说,运行全节点似乎是一个挑战。但其实就相当于下载最新版的客户端然后保持开启状态。

比特币区块链已经超过100GB,因此,一开始同步节点需要花上一段时间。不过,Core在新版本中改进了验证速度和网络传播性能,未来网络同步和区块加载时间会逐渐缩短。

6. 运行全节点的成本不高

运行全节点需要保证电脑始终保持开启状态——或者至少大部分的时间要开着。其实你可以随时开启或者关闭节点,但频繁的开关操作并不实际。很多用户都不会在自己的电脑上运行节点,而是租一个虚拟服务器。


Bitcoin Core列出了运行比特币全节点的基本要求:


- 运行最新版Windows、Mac OS X或Linux的台式或笔记本电脑硬件

- 125GB的可用磁盘空间

- 2GB内存

- 网络上传速度至少50KB/S

- 不限量的网络连接、上传限制较高的连接或有定期监控的连接,以确保不超过其上传限制。对于高速连接上的所有节点来说,一个月使用200GB以上的容量是很常见的。每个月的下载使用量约为20GB,而在第一次启动节点时,还会额外需要100GB

- 你的全节点每天至少要运行6个小时(运行过程中你可以做其他事),运行时间越长越好,最好是不间断的运行。




原文:Bitcoin Public Full Node Count Surpasses 10,000
作者:EMILIO JANUS
编译:Wendy

比特币0.17.0版本客户端发布在即,隐私功能成为亮点

攻略8btc 发表了文章 • 2018-09-05 11:37 • 来自相关话题

 
比特币最新版的客户端Bitcoin Core 0.17.0距正式发布已越来越近,这也是10年来比特币的第17代客户端版本。
 
据Bitcoin Core 维护者Wladimir van der Laan预计,这一版本的客户端最早将于9月8日发布。目前其在github上的完成度已经达到了92%。
 
以下为0.17.0版本更新说明:(注意,这只是一个临时版的说明,正式发布时可能会稍作修改)
 
Bitcoin Core 0.17.0 版本可以在这里访问了:
 
https://bitcoincore.org/bin/bitcoin-core-0.17.0/
 
这是比特币的重大更新版本,更新内容包括新功能、各种bug修复,以及性能提升。
 
开发者可以使用GitHub的问题跟踪器上报错误:
 
若要接受安全及更新通知,请订阅:
 
https://bitcoincore.org/en/list/announcements/join/
 
 
如何更新
 
 
如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。
 
如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。
 
当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。
 
注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。在0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。
 
 
降级预警
 
 
此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何旧版的客户端,你就需要运行旧版本的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。
 
如果你的节点已启用了修建模式,那么就需要你重新下载同步整个比特币区块链。
 
 
兼容性
 
 
Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。
 
Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。
 
需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。
 
 
显著的更改
 
 
更改配置选项
 
-includeconf=<file>可用于包含附加配置文件。它只在bitcoin.conf文件内时起作用,并不作用于包含文件或命令行。它可包含多个文件。操作者可通过命令行-noincludeconf 禁用这一功能。请注意,例如-includeconf这样的多参数命令,将覆盖掉先前的-noincludeconf 命令行;
 
noincludeconf=1 includeconf=relative.conf
 
bitcoin.conf将仍然包含relative.conf 。
 
 
更新图形用户界面
 
在主选项卡中,区块存储可在参数选择栏中进行限制。而撤消此设置,需要再次下载完整的区块链。此模式与 -txindex 以及 -rescan 是不兼容的。
 
 
外部钱包文件
 
-wallet=<path>选项现在接受了全路径,不再需要把钱包放置于-walletdir目录当中。
新创建的钱包格式
如果 -wallet=<path> 指定了一个不存在的路径,那么它现在将在指定位置创建一个钱包目录(包括一个wallet.dat数据文件,一个db.log文件以及database/log.??????????文件),而不仅仅是在路径中创建一个数据文件,并将日志文件存储在父目录当中。这使得备份钱包的操作会比以前更简单,因为指定的钱包路径可以直接归档,而不必在父目录中查找交易日志文件。
 
为了实现向后兼容,钱包路径是以-walletdir目录中现有数据文件为名,则将继续被接受,并像以前一样被解释。
 
 
钱包的动态加载及创建
 
以前,钱包只有在命令行或bitcoin.conf文件中定义-wallet 参数时,才能实现加载或创建。而现在,客户端就可实现在运行时完成钱包动态的加载、创建和卸载操作:
 

现有的钱包可通过调用 loadwallet RPC(远程过程调用)来实现加载。钱包可以指定为文件/目录名(必须位于 walletdir目录当中),或作为文件/目录的绝对路径。
新的钱包可以通过调用createwallet RPC(远程过程调用)来进行创建(或加载)。所提供的名称,必须和walletdir目录中的钱包文件或当前加载的钱包的名字差异化。
加载钱包可以通过调用unloadwallet RPC命令行实现加载;

 
此特性目前只能通过RPC接口实现。
 
 
可选交易(Coin selection)
 
 
Partial spend avoidance(部分花费规避)
 
当一个地址被用于支付多次时,来自这些分离支付的币,就可单独地进行使用,而这样会连接到其它地址,从而有损交易的隐私性。
 
而新版客户端添加了一种新的 -avoidpartialspends 操作码(默认值为false)。如果启用了这个功能,那钱包总是会把现有的UTXO汇聚到同一个地址,即使它会导致更高的费用。这样做就可以提高交易的隐私性。
 
 
测试网和RegTest 测试网络的配置部分
 
现在,单个配置文件,可实现为不同的网络设置不同的选项了。实现方法如下:
 
main.uacomment=bitcoin test.uacomment=bitcoin-testnet regtest.uacomment=regtest [main] mempoolsize=300 [test] mempoolsize=100 [regtest] mempoolsize=20
 
根据配置文件的规则,addnode=, connect=, port=, bind=, rpcport=, rpcbind= 以及 wallet= 选项将只适用于比特币主网。
 
 
钱包的‘标签’和‘账户’API
 
新版本的钱包客户端引入了一个新的‘标签-label’API。这是为了取代被弃用的‘账户-account’API。通过'-deprecatedrpc=accounts' 参数,这个‘账户’仍可在V0.17客户端当中使用,而在V0.18版本客户端中,它将被完全移除。
 
这个标签RPC方法和账户功能是非常类似的,差异在于以下这几点:
 
    标签可以在任何地址上进行设置,而不仅仅是接收地址。此功能以前仅通过GUI可用。
    标签可通过 setlabel RPC的方法,重新分配所有地址,来进行删除;
    不支持从一个标签来发送交易,也不支持确定一笔交易是从哪个标签发送而来的;
    标签没有所谓的余额;
 
以下是RPC方法的变化:
 
 
被移除的方法 新的方法 注释
 
getaccount getaddressinfo  Getaddressinfo返回了一个具有地址信息的JSON对象,而不仅仅是字符串的账户名称
 
getaccountaddress  n/a 因为标签没有关联的接收地址,所以getaccountaddress就没有替换选项了
 
getaddressesbyaccount getaddressesbylabel Getaddressesbylabel返回了一个JSON对象,其地址为密钥,而不是字符串列表
 
getreceivedbyaccount getreceivedbylabel 行为上没有发生变化
 
listaccounts  listlabels  Listlabels不会返回余额,也不会接受minconf和watchonly参数
 
listreceivedbyaccount  listreceivedbylabel 这两种方法都返回新的标签字段,以及用于向后兼容的账户字段
 
move  n/a 没有替代方法
 
sendfrom n/a 没有替代方法
 
setaccount setlabel 这两种方法都具有:1、允许将标签分配给任何地址,而不是在地址不接收地址时引发错误。2、删除与某地址相关联的先前标签,当使用该标签的最后地址被重新分配到另一个标签时。而不是进行隐式的getaccountaddress调用(确保先前的标签仍然具有一个接收地址);
 
 
更改过的方法 注释
 
addmultisigaddress 将参数account重命名为 label,如果用'-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
getnewaddress 将参数account重命名为 label,如果用 '-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
listunspent 返回新的标签字段,如果使用'-deprecatedrpc=accounts'运行,account字段将将返回以向后兼容。
 
sendmany 将参数account重命名为 dummy,如果提供,则这个dummy参数必须设置为空字符串,除非使用 -deprecatedrpc=accounts 参数(在这种情况下,功能不变)运行
 
listtransactions 将参数account重命名为 dummy,如果提供,则这个dummy必须设置为*字符串,除非使用 -deprecatedrpc=accounts  参数(在这种情况下,功能不变)运行。
 
getbalance account, minconf 以及include_watchonly参数被弃用了,这些参数只有在使用 '-deprecatedrpc=accounts'运行时才能够使用。
 
 
 
BIP 174 : 支持部分签名比特币交易(Partially Signed Bitcoin Transactions support)
 
 
BIP 174 PSBT 是用于尚未完全签名的比特币交易的一种交换格式,它与相关元数据一起协助对像进行签署。其旨在简化多方合作交易时的工作流程。例子包括硬件钱包、多重签名设置,以及CoinJoin交易。
 
 
整体工作流程
 
 
总体而言,一笔具有完整签名的比特币交易,其构建经历了以下步骤:
 

一名创建者(Creator)提出了一笔要创建的特定交易。它构造了一笔包含某些输入(input)和输出(output),但没有附加元数据的PSBT交易;
对于每一个输出(output),更新者(Updater)会把交易所花费的UTXO信息添加到 PSBT交易当中;
潜在的其他更新者,会把每一个输入(以及可能的输出)中所涉及的脚本和公钥信息添加到PSBT交易当中;
签名者(Signers)会检查这笔PSBT交易及其元数据,然后决定是否同意交易。它们可以使用UTXO当中的数量信息来评估所涉及的价值和费用。如果同意,它们就会为具有相关密钥的输入,生产一个部分签名(partial signature)。
决策者(Finalizer)会把关每一个输入,并转换这个部分签名,并可能把脚本信息写入最终的scriptSig 以及/或scriptWitness 。
提取者(Extractor )会从一笔PSBT交易当中,提取并生产出一笔有效的比特币交易。

 
一般来说,上面的每一个参与者(不包括创建者和提取者)会简单地把越来越多的数据添加到特定的PSBT交易当中。在简单的工作流程当中,它们必须按顺序操作,将 PSBT交易从一方传递到下一方,直到提取者(Extractor )可以将其转换为一笔真正的比特币交易。为了允许并行操作,组合者(Combiners)可以把不同的PSBT交易的元数据合并到同一个未签名的交易当中。
 
上面使用粗体所表示的名称,是BIP174中定义角色的名称。这对于理解底层步骤很有用,但在实践过程中,软件和硬件通常同时担任了多个角色。
 
 
RPC
 

converttopsbt (创建者)是一个功能性RPC,它将未签名的原始交易转换为PSBT格式,其忽略了现有签名。
createpsbt(创建者)是一个功能性RPC,它负责获取输入和输出列表,并把它们转换为没有附加信息的PSBT,其相当于在converttopsbt之后调用createrawtransaction
walletcreatefundedpsbt (创建者, 更新者) 是一个钱包RPC,它负责创建具有指定输入和输出的PSTB,并向其添加额外的输入,更改以平衡之,并添加相关的元数据。
walletprocesspsbt(更新者,签名者,决策者)是一个钱包RPC,它负责接受PSBT作为输入,将UTXO、密钥和脚本数据添加到那些错过它的输入和输出当中,并可选地对输入进行签名。在可能的情况下,它也能够完成部分签名;
finalizepsbt (决策者,提取者)是一个功能性RPC,它用于完成任何部分签名,如果所有的输入都已完成,则将结果转换为完全签名的交易,该交易可以通过sendrawtransaction 进行广播;
combinepsbt (组合者)是一个功能性RPC,它的作用就是作为一个组合者,它可以在任何工作流程的任何时间点使用,其可以将信息添加到同一PSBT的不同版本当中。特别地,它对于多个更新者或签名者输出的组合而言,是有用的。
decodepsbt是一个诊断型RPC,它可以用于显示PSBT交易中所有的信息,并计算它的最终费用。

 
 
将非HD钱包升级为HD钱包
 
 
自Bitcoin Core 0.13.0版本客户端发布以来,Bitcoin Core 就可以支持创建新的BIP 32 分层确定性(HD)钱包,但旧的非HD钱包无法升级到HD钱包。现在,我们可通过-upgradewallet 命令行选项将非HD钱包升级到HD钱包。这一升级,将导致密钥池中的所有密钥会被标记为已使用,并生成新的密钥池。执行此升级时,操作者必须做好钱包备份。
 
此外,-upgradewallet命令行还可以把非分裂HD链(用m/0'/0'/i'生成的所有密钥)升级到一个分裂HD链(接收用 'm/0'/0'/i'生成的密钥,以及用m'/0'/1'/i'生成的更改密钥)。当发生此升级时,密钥池中已有的所有密钥,将保留在密钥池中以供使用,直到升级前所有的密钥被耗尽。这是为了避免备份及降级的问题(当一些密钥可能来自更改密钥池时)。用户们可以使用newkeypool RPC 命令行来使用新的分裂HD链密钥池,来标记密钥池中已使用的所有密钥,并开始使用这个分裂HD链中生成的新密钥池。
 
 
HD 主密钥控制
 
 
一个新的RPC sethdseed 已被引入到客户端当中,它允许用户设置新的HD种子,或设置自己的HD种子。需要注意的是,在设置新的HD种子时,用户必须进行新的备份。
 
 
重要性较低的 RPC更改
 

createrawtransaction RPC 现在将为outputs参数接受数组(array)或dictionary (保持兼容性),这意味着交易输出顺序,可以由客户端指定。
fundrawtransaction RPC 将拒绝先前被否定的 reserveChangeKey 选项;
sendmany 将负责打乱输出(output)以改善隐私性,因此,任何先前预期的关于输出排序的行为都变得不可靠了;
新的testmempoolaccept RPC ,可用来测试在不添加一笔交易的情况下,看其是否会被交易储蓄池(mempool)所接受;
JSON交易分解现在包括了一个权重字段,其它提供了交易的确切权重。在JSON模式下,它将纳入REST /rest/tx/ 以及/rest/block/ 端点中。它也会包含于getblock (verbosity=2),listsinceblock,listtransactions, 以及getrawtransaction RPC命令中。
新的fees字段将引入getrawmempool,getmempoolancestors, getmempooldescendants 以及 getmempoolentry,当子字段 ancestor, base, modified 以及 descendant以BTC计价,verbosity设置为 true时。这个新的字段会否定先前的费用字段,例如fee, modifiedfee, ancestorfee 以及 descendantfee;
新的RPC getzmqnotifications 会返回有关活跃ZMQ通知的信息。
当比特币并不以任何-wallet=<path>选项启动时,由getwalletinfo和listwallets 这两个RPC所返回的默认钱包名现在会是空字符串 "" ,而不是先前的"wallet.dat" 。如果是通过-wallet=<path>选项启动的,则和以前没有变化,任何钱包的名称只是其<path>字符串。
现在,将一个空字符串("") 作为address_type参数传递给getnewaddress, getrawchangeaddress, addmultisigaddress, fundrawtransaction RPC 会是一个错误。以前,这将回到使用默认地址类型。它仍然可以传递空字符串或将未设置的参数保留为使用默认地址类型。
空的多重签名输出,将不再自动被当做传入支付。由于此功能仅适用于多重签名输出,也就是你拥有钱包当中所有私钥的情况。与单个密钥方案相比,这通常没有什么用处。此外,当前并没有定义这样的输出地址格式,并且钱包软件不能很容易地发送给它。listtransactions,listunspent 命令行将不再显示这些输出,这些输出也不会和你余额有关,除非它们被明确监视(用十六进制脚本参数importaddress或importmulti,signrawtransaction*也可以使用)。
getwalletinfo RPC 现在会返回一个hdseedid值,它始终与不正确命名的hdmasterkeyid值相同。hdmasterkeyid将在V0.18版本客户端中被删除。

 
 
其他API更改
 
 
在dumpwallet 输出中的inactivehdmaster 已被更改为inactivehdseed
 
 
日志
 

日志时间戳的格式现在是ISO 8601 (例如"2018-02-28T12:34:56Z")。
当运行带有 -debug,而没有-daemon的bitcoind时,记录stdout现在就成为了默认行为。设置-printtoconsole=1 不再隐含地禁止记录到debug.log。相反,我们可通过设置-debuglogfile=0 来显式禁用记录到文件。

 
 
交易索引变化
 
 
交易索引现在和主节点过程分开构建,这意味着 -txindex 操作码,可在没有完全重新索引的情况下进行toggled切换。如果bitcoind是用-txindex 在一个已部分或完全同步的节点上运行的,则交易索引可在后台建立,并且一旦被捕获就可使用。当从运行-txindex,切换到不带这一flag的运行时,交易索引数据库将不会自动被删除,这意味着,我们可以在稍后的时间里重新打开它,而无需重新同步。
 
 
区块限制功能
 
 
在V0.15.1客户端当中,允许矿工限制其区块大小的-blockmaxsize 选项遭到了反对,现在这个选项被移除掉了。如果矿工们想要限制区块的大小,他们应使用-blockmaxweight 这个选项。
 
 
中断对Python  2.0的支持
 
 
对于所有测试文件及工具而言,新版本的客户端对Python 2.0的支持已经中断。
 
最后,感谢所有对该版本比特币客户端作出直接贡献的人,也感谢帮助翻译的每一个人。
 
 
原文:0.17.0 Release notes
作者:Bitcoin core开发组
编译:洒脱喜 查看全部
201809050303409478.jpg

 
比特币最新版的客户端Bitcoin Core 0.17.0距正式发布已越来越近,这也是10年来比特币的第17代客户端版本。
 
据Bitcoin Core 维护者Wladimir van der Laan预计,这一版本的客户端最早将于9月8日发布。目前其在github上的完成度已经达到了92%。
 
以下为0.17.0版本更新说明:(注意,这只是一个临时版的说明,正式发布时可能会稍作修改)
 
Bitcoin Core 0.17.0 版本可以在这里访问了:
 
https://bitcoincore.org/bin/bitcoin-core-0.17.0/
 
这是比特币的重大更新版本,更新内容包括新功能、各种bug修复,以及性能提升。
 
开发者可以使用GitHub的问题跟踪器上报错误:
 
若要接受安全及更新通知,请订阅:
 
https://bitcoincore.org/en/list/announcements/join/
 
 
如何更新
 
 
如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。
 
如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。
 
当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。
 
注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。在0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。
 
 
降级预警
 
 
此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何旧版的客户端,你就需要运行旧版本的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。
 
如果你的节点已启用了修建模式,那么就需要你重新下载同步整个比特币区块链。
 
 
兼容性
 
 
Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。
 
Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。
 
需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。
 
 
显著的更改
 
 
更改配置选项
 
-includeconf=<file>可用于包含附加配置文件。它只在bitcoin.conf文件内时起作用,并不作用于包含文件或命令行。它可包含多个文件。操作者可通过命令行-noincludeconf 禁用这一功能。请注意,例如-includeconf这样的多参数命令,将覆盖掉先前的-noincludeconf 命令行;
 
noincludeconf=1 includeconf=relative.conf
 
bitcoin.conf将仍然包含relative.conf 。
 
 
更新图形用户界面
 
在主选项卡中,区块存储可在参数选择栏中进行限制。而撤消此设置,需要再次下载完整的区块链。此模式与 -txindex 以及 -rescan 是不兼容的。
 
 
外部钱包文件
 
-wallet=<path>选项现在接受了全路径,不再需要把钱包放置于-walletdir目录当中。
新创建的钱包格式
如果 -wallet=<path> 指定了一个不存在的路径,那么它现在将在指定位置创建一个钱包目录(包括一个wallet.dat数据文件,一个db.log文件以及database/log.??????????文件),而不仅仅是在路径中创建一个数据文件,并将日志文件存储在父目录当中。这使得备份钱包的操作会比以前更简单,因为指定的钱包路径可以直接归档,而不必在父目录中查找交易日志文件。
 
为了实现向后兼容,钱包路径是以-walletdir目录中现有数据文件为名,则将继续被接受,并像以前一样被解释。
 
 
钱包的动态加载及创建
 
以前,钱包只有在命令行或bitcoin.conf文件中定义-wallet 参数时,才能实现加载或创建。而现在,客户端就可实现在运行时完成钱包动态的加载、创建和卸载操作:
 


现有的钱包可通过调用 loadwallet RPC(远程过程调用)来实现加载。钱包可以指定为文件/目录名(必须位于 walletdir目录当中),或作为文件/目录的绝对路径。
新的钱包可以通过调用createwallet RPC(远程过程调用)来进行创建(或加载)。所提供的名称,必须和walletdir目录中的钱包文件或当前加载的钱包的名字差异化。
加载钱包可以通过调用unloadwallet RPC命令行实现加载;


 
此特性目前只能通过RPC接口实现。
 
 
可选交易(Coin selection)
 
 
Partial spend avoidance(部分花费规避)
 
当一个地址被用于支付多次时,来自这些分离支付的币,就可单独地进行使用,而这样会连接到其它地址,从而有损交易的隐私性。
 
而新版客户端添加了一种新的 -avoidpartialspends 操作码(默认值为false)。如果启用了这个功能,那钱包总是会把现有的UTXO汇聚到同一个地址,即使它会导致更高的费用。这样做就可以提高交易的隐私性。
 
 
测试网和RegTest 测试网络的配置部分
 
现在,单个配置文件,可实现为不同的网络设置不同的选项了。实现方法如下:
 
main.uacomment=bitcoin test.uacomment=bitcoin-testnet regtest.uacomment=regtest [main] mempoolsize=300 [test] mempoolsize=100 [regtest] mempoolsize=20
 
根据配置文件的规则,addnode=, connect=, port=, bind=, rpcport=, rpcbind= 以及 wallet= 选项将只适用于比特币主网。
 
 
钱包的‘标签’和‘账户’API
 
新版本的钱包客户端引入了一个新的‘标签-label’API。这是为了取代被弃用的‘账户-account’API。通过'-deprecatedrpc=accounts' 参数,这个‘账户’仍可在V0.17客户端当中使用,而在V0.18版本客户端中,它将被完全移除。
 
这个标签RPC方法和账户功能是非常类似的,差异在于以下这几点:
 
    标签可以在任何地址上进行设置,而不仅仅是接收地址。此功能以前仅通过GUI可用。
    标签可通过 setlabel RPC的方法,重新分配所有地址,来进行删除;
    不支持从一个标签来发送交易,也不支持确定一笔交易是从哪个标签发送而来的;
    标签没有所谓的余额;
 
以下是RPC方法的变化:
 
 
被移除的方法 新的方法 注释
 
getaccount getaddressinfo  Getaddressinfo返回了一个具有地址信息的JSON对象,而不仅仅是字符串的账户名称
 
getaccountaddress  n/a 因为标签没有关联的接收地址,所以getaccountaddress就没有替换选项了
 
getaddressesbyaccount getaddressesbylabel Getaddressesbylabel返回了一个JSON对象,其地址为密钥,而不是字符串列表
 
getreceivedbyaccount getreceivedbylabel 行为上没有发生变化
 
listaccounts  listlabels  Listlabels不会返回余额,也不会接受minconf和watchonly参数
 
listreceivedbyaccount  listreceivedbylabel 这两种方法都返回新的标签字段,以及用于向后兼容的账户字段
 
move  n/a 没有替代方法
 
sendfrom n/a 没有替代方法
 
setaccount setlabel 这两种方法都具有:1、允许将标签分配给任何地址,而不是在地址不接收地址时引发错误。2、删除与某地址相关联的先前标签,当使用该标签的最后地址被重新分配到另一个标签时。而不是进行隐式的getaccountaddress调用(确保先前的标签仍然具有一个接收地址);
 
 
更改过的方法 注释
 
addmultisigaddress 将参数account重命名为 label,如果用'-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
getnewaddress 将参数account重命名为 label,如果用 '-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
listunspent 返回新的标签字段,如果使用'-deprecatedrpc=accounts'运行,account字段将将返回以向后兼容。
 
sendmany 将参数account重命名为 dummy,如果提供,则这个dummy参数必须设置为空字符串,除非使用 -deprecatedrpc=accounts 参数(在这种情况下,功能不变)运行
 
listtransactions 将参数account重命名为 dummy,如果提供,则这个dummy必须设置为*字符串,除非使用 -deprecatedrpc=accounts  参数(在这种情况下,功能不变)运行。
 
getbalance account, minconf 以及include_watchonly参数被弃用了,这些参数只有在使用 '-deprecatedrpc=accounts'运行时才能够使用。
 
 
 
BIP 174 : 支持部分签名比特币交易(Partially Signed Bitcoin Transactions support)
 
 
BIP 174 PSBT 是用于尚未完全签名的比特币交易的一种交换格式,它与相关元数据一起协助对像进行签署。其旨在简化多方合作交易时的工作流程。例子包括硬件钱包、多重签名设置,以及CoinJoin交易。
 
 
整体工作流程
 
 
总体而言,一笔具有完整签名的比特币交易,其构建经历了以下步骤:
 


一名创建者(Creator)提出了一笔要创建的特定交易。它构造了一笔包含某些输入(input)和输出(output),但没有附加元数据的PSBT交易;
对于每一个输出(output),更新者(Updater)会把交易所花费的UTXO信息添加到 PSBT交易当中;
潜在的其他更新者,会把每一个输入(以及可能的输出)中所涉及的脚本和公钥信息添加到PSBT交易当中;
签名者(Signers)会检查这笔PSBT交易及其元数据,然后决定是否同意交易。它们可以使用UTXO当中的数量信息来评估所涉及的价值和费用。如果同意,它们就会为具有相关密钥的输入,生产一个部分签名(partial signature)。
决策者(Finalizer)会把关每一个输入,并转换这个部分签名,并可能把脚本信息写入最终的scriptSig 以及/或scriptWitness 。
提取者(Extractor )会从一笔PSBT交易当中,提取并生产出一笔有效的比特币交易。


 
一般来说,上面的每一个参与者(不包括创建者和提取者)会简单地把越来越多的数据添加到特定的PSBT交易当中。在简单的工作流程当中,它们必须按顺序操作,将 PSBT交易从一方传递到下一方,直到提取者(Extractor )可以将其转换为一笔真正的比特币交易。为了允许并行操作,组合者(Combiners)可以把不同的PSBT交易的元数据合并到同一个未签名的交易当中。
 
上面使用粗体所表示的名称,是BIP174中定义角色的名称。这对于理解底层步骤很有用,但在实践过程中,软件和硬件通常同时担任了多个角色。
 
 
RPC
 


converttopsbt (创建者)是一个功能性RPC,它将未签名的原始交易转换为PSBT格式,其忽略了现有签名。
createpsbt(创建者)是一个功能性RPC,它负责获取输入和输出列表,并把它们转换为没有附加信息的PSBT,其相当于在converttopsbt之后调用createrawtransaction
walletcreatefundedpsbt (创建者, 更新者) 是一个钱包RPC,它负责创建具有指定输入和输出的PSTB,并向其添加额外的输入,更改以平衡之,并添加相关的元数据。
walletprocesspsbt(更新者,签名者,决策者)是一个钱包RPC,它负责接受PSBT作为输入,将UTXO、密钥和脚本数据添加到那些错过它的输入和输出当中,并可选地对输入进行签名。在可能的情况下,它也能够完成部分签名;
finalizepsbt (决策者,提取者)是一个功能性RPC,它用于完成任何部分签名,如果所有的输入都已完成,则将结果转换为完全签名的交易,该交易可以通过sendrawtransaction 进行广播;
combinepsbt (组合者)是一个功能性RPC,它的作用就是作为一个组合者,它可以在任何工作流程的任何时间点使用,其可以将信息添加到同一PSBT的不同版本当中。特别地,它对于多个更新者或签名者输出的组合而言,是有用的。
decodepsbt是一个诊断型RPC,它可以用于显示PSBT交易中所有的信息,并计算它的最终费用。


 
 
将非HD钱包升级为HD钱包
 
 
自Bitcoin Core 0.13.0版本客户端发布以来,Bitcoin Core 就可以支持创建新的BIP 32 分层确定性(HD)钱包,但旧的非HD钱包无法升级到HD钱包。现在,我们可通过-upgradewallet 命令行选项将非HD钱包升级到HD钱包。这一升级,将导致密钥池中的所有密钥会被标记为已使用,并生成新的密钥池。执行此升级时,操作者必须做好钱包备份。
 
此外,-upgradewallet命令行还可以把非分裂HD链(用m/0'/0'/i'生成的所有密钥)升级到一个分裂HD链(接收用 'm/0'/0'/i'生成的密钥,以及用m'/0'/1'/i'生成的更改密钥)。当发生此升级时,密钥池中已有的所有密钥,将保留在密钥池中以供使用,直到升级前所有的密钥被耗尽。这是为了避免备份及降级的问题(当一些密钥可能来自更改密钥池时)。用户们可以使用newkeypool RPC 命令行来使用新的分裂HD链密钥池,来标记密钥池中已使用的所有密钥,并开始使用这个分裂HD链中生成的新密钥池。
 
 
HD 主密钥控制
 
 
一个新的RPC sethdseed 已被引入到客户端当中,它允许用户设置新的HD种子,或设置自己的HD种子。需要注意的是,在设置新的HD种子时,用户必须进行新的备份。
 
 
重要性较低的 RPC更改
 


createrawtransaction RPC 现在将为outputs参数接受数组(array)或dictionary (保持兼容性),这意味着交易输出顺序,可以由客户端指定。
fundrawtransaction RPC 将拒绝先前被否定的 reserveChangeKey 选项;
sendmany 将负责打乱输出(output)以改善隐私性,因此,任何先前预期的关于输出排序的行为都变得不可靠了;
新的testmempoolaccept RPC ,可用来测试在不添加一笔交易的情况下,看其是否会被交易储蓄池(mempool)所接受;
JSON交易分解现在包括了一个权重字段,其它提供了交易的确切权重。在JSON模式下,它将纳入REST /rest/tx/ 以及/rest/block/ 端点中。它也会包含于getblock (verbosity=2),listsinceblock,listtransactions, 以及getrawtransaction RPC命令中。
新的fees字段将引入getrawmempool,getmempoolancestors, getmempooldescendants 以及 getmempoolentry,当子字段 ancestor, base, modified 以及 descendant以BTC计价,verbosity设置为 true时。这个新的字段会否定先前的费用字段,例如fee, modifiedfee, ancestorfee 以及 descendantfee;
新的RPC getzmqnotifications 会返回有关活跃ZMQ通知的信息。
当比特币并不以任何-wallet=<path>选项启动时,由getwalletinfo和listwallets 这两个RPC所返回的默认钱包名现在会是空字符串 "" ,而不是先前的"wallet.dat" 。如果是通过-wallet=<path>选项启动的,则和以前没有变化,任何钱包的名称只是其<path>字符串。
现在,将一个空字符串("") 作为address_type参数传递给getnewaddress, getrawchangeaddress, addmultisigaddress, fundrawtransaction RPC 会是一个错误。以前,这将回到使用默认地址类型。它仍然可以传递空字符串或将未设置的参数保留为使用默认地址类型。
空的多重签名输出,将不再自动被当做传入支付。由于此功能仅适用于多重签名输出,也就是你拥有钱包当中所有私钥的情况。与单个密钥方案相比,这通常没有什么用处。此外,当前并没有定义这样的输出地址格式,并且钱包软件不能很容易地发送给它。listtransactions,listunspent 命令行将不再显示这些输出,这些输出也不会和你余额有关,除非它们被明确监视(用十六进制脚本参数importaddress或importmulti,signrawtransaction*也可以使用)。
getwalletinfo RPC 现在会返回一个hdseedid值,它始终与不正确命名的hdmasterkeyid值相同。hdmasterkeyid将在V0.18版本客户端中被删除。


 
 
其他API更改
 
 
在dumpwallet 输出中的inactivehdmaster 已被更改为inactivehdseed
 
 
日志
 


日志时间戳的格式现在是ISO 8601 (例如"2018-02-28T12:34:56Z")。
当运行带有 -debug,而没有-daemon的bitcoind时,记录stdout现在就成为了默认行为。设置-printtoconsole=1 不再隐含地禁止记录到debug.log。相反,我们可通过设置-debuglogfile=0 来显式禁用记录到文件。


 
 
交易索引变化
 
 
交易索引现在和主节点过程分开构建,这意味着 -txindex 操作码,可在没有完全重新索引的情况下进行toggled切换。如果bitcoind是用-txindex 在一个已部分或完全同步的节点上运行的,则交易索引可在后台建立,并且一旦被捕获就可使用。当从运行-txindex,切换到不带这一flag的运行时,交易索引数据库将不会自动被删除,这意味着,我们可以在稍后的时间里重新打开它,而无需重新同步。
 
 
区块限制功能
 
 
在V0.15.1客户端当中,允许矿工限制其区块大小的-blockmaxsize 选项遭到了反对,现在这个选项被移除掉了。如果矿工们想要限制区块的大小,他们应使用-blockmaxweight 这个选项。
 
 
中断对Python  2.0的支持
 
 
对于所有测试文件及工具而言,新版本的客户端对Python 2.0的支持已经中断。
 
最后,感谢所有对该版本比特币客户端作出直接贡献的人,也感谢帮助翻译的每一个人。
 
 
原文:0.17.0 Release notes
作者:Bitcoin core开发组
编译:洒脱喜

比特币喜迎更新,0.17.1 版Bitcoin Core软件正式发布

资讯8btc 发表了文章 • 2018-12-26 12:35 • 来自相关话题

(图片来自免费图库:pxhere.com)


在2018年圣诞节之际,比特币core团队给出了一份非常棒的礼物:0.17.1版本的Bitcoin Core软件,那么这次更新到底有哪些新内容呢?

我们来看看开发团队给出的文档吧,以下为译文内容:

比特币Core 0.17.1版软件已正式发布,现在你可通过以下链接进行访问:

https://bitcoincore.org/bin/bitcoin-core-0.17.1/

这次发布的是一个次版本软件,其修复了一些漏洞,并对软件性能有了一些改进,此外还有一些翻译内容的更改。

开发者可以使用GitHub的问题跟踪器上报错误:

https://github.com/bitcoin/bitcoin/issues

若要接受安全及更新通知,请订阅:

https://bitcoincore.org/en/list/announcements/join/

 
如何更新
 

如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。

如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。

当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。

注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。

 
降级预警
 

此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何更旧版的客户端。你就需要运行旧版的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。

如果你的节点已启用了修建模式,那么就需要你重新下载和同步整个比特币区块链。

 
兼容性
 

Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。

Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。

需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0及之后版本的客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。

 
显著的更改
 

============== `listtransactions`标签支持

- --------------------------------

在0.17.0版本软件中,`listtransactions` RPC`account`参数被弃用了,其被重命名为`dummy`,而在更新版的软件当中,其又被重命名为`label`。

当比特币用`-deprecatedrpc = accounts`进行设置时,指定一个标签/帐户/伪参数将返回传出和传入 交易。而没有`-deprecatedrpc = accounts`设置,它只会返回传入交易(因为它曾经可创建来自特定账户支出的交易,但通过标签不再可能这样做。)

当设置`-deprecatedrpc = accounts`时,可传递空字符串“”,列出没有任何标签的交易。而没有设置`-deprecatedrpc = accounts`时,传递空字符串会是一个错误,因为只返回未标记的交易,通常不会是有用行为,并且可能会引起混乱。


0.17.1更改日志
 

==================
###P2P协议和网络代码

- - #14685`9406502`修复了一个反序列化溢出边缘情况(kazcw)

- - #14728 `b901578`在stringifying(字符串化)addrLocal时修复未初始化的读取(kazcw)

###钱包

- - #14441`5150acc`恢复按标签列出传入交易的能力(jnewbery)

- - # 13546 `91fa15a`修正了CWallet::CreateTransaction(...)中未初始化值 `bnb_use'的使用(practicalswift)

- - #14310 `bb90695` 确保钱包在签名前是解锁状态的(gustavonalle)

- - #14690 `5782fdc` 如果CPubKey在PSBT密钥路径序列化期间无效,则抛出错误(instagibbs)

- - #14852 `2528443` backport: [test]添加`wallet_..py'(MarcoFalke)

- - #14196 `3362a95` psbt:总是丢弃不必要的utxo,并在必要时将非验证utxo转换为验证utxo(achow101)

- - #14588 `70ee1f8` 重构PSBT签名逻辑,以强制执行不变量并修复签名错误(gwillen)

- - #14424 `89a9a9d` 停止要求导入的pubkey,以签署非PKH计划(sipa,MeshCollider)

### RPC和其他API

- - #14417 `fb9ad04`修复没有将地址作为字符串的listreceivedbyadd.(etscrivner)

- - #14596 `de5e48a`漏洞修正: RPC:为createmultisig添加名为param的`address_type` (luke-jr)

- - #14618 `9666dba`使HTTP RPC调试日志记录更具信息性 (practicalswift)

- - #14197 `7bee414` [psbt]如果创建了验证sig,则将非验证UTXO转换为验证UTXO(achow101)

- - #14377 `a3fe125` 检查是否找到psbt输入、输出和全局映射的分离器 (achow101)

- - #14356 `7a590d8` 修复converttopsbt permitigdata arg,添加基本测试(instagibbs)

- - # 14453 `75b5d8c` 在walletpassphrase(钱包密码)超时时,修复钱包卸载 (promag)

### GUI

- - #14403 `0242b5a` 恢复 "Force TLS1.0+ for SSL connections" (real-or-random)

- - #14593 `df5131b` 明确禁用macOS版客户端的“暗模式” (fanquake)

###构建系统

- - #14647 `7edebed` 删除darwin.mk中的非法间距 (ch4ot1c)

- - #14698 `ec71f06` 将bitcoin-tx.exe添加到Windows安装程序中(ken2812221)

###测试和质量保证

- - #13965 `29899ec` 修复扩展功能测试失败(ken2812221)

- - #14011 `9461f98` 在macOS minimal平台上禁用钱包和地址簿Qt测试 (ryanofsky)

- - #14180 `86fadee` 即使钱包没有被编译,也要运行所有测试(MarcoFalke)

- - #14122 `8bc1bad` 测试`rpc_help.py`失败:检查ZMQ是否启用(Kvaciral)

- - #14101 `96dc936` 在验证接受测试中,使用命名args(MarcoFalke)

- - #14020 `24d796a` 为RPC帮助添加测试 (promag)

- - #14052 `7ff32a6` 在`rpc_rawtransaction`中添加一些实际的验证内容 (MarcoFalke)

- - #14215 `b72fbab` 在示例测试中使用正确的python索引切片(sdaftuar)

- - #14024 `06544fa` 添加`TestNode::assert_debug_log` (MarcoFalke)

- - #14658 `60f7a97` 添加测试,以确保节点可以在运行时生成所有rpc帮助文本(MarcoFalke)

- - #14632 `96f15e8` 修正了一个comment (fridokus)

- - #14700 `f9db08e` 通过等待区块请求,来避免`p2p_invalid_block`中的竞争(MarcoFalke)

- - #14845 `67225e2` 添加 `wallet_balance.py` (jnewbery)

###文件

- - #14161 `5f51fd6` doc/descriptors.md tweaks(ryanofsky)

- - #14276 `85aacc4` 在ARM交叉编译中添加autogen.sh(walterwhite81)

 
贡献者
 

感谢直接为这次软件发布做出贡献的每一个人:

- - Andrew Chow

- - Chun Kuan Lee

- - David A. Harding

- - Eric Scrivner

- - fanquake

- - fridokus

- - Glenn Willen

- - Gregory Sanders

- - gustavonalle

- - John Newbery

- - Jon Layton

- - Jonas Schnelli

- - João Barbosa

- - Kaz Wesley

- - Kvaciral

- - Luke Dashjr

- - MarcoFalke

- - MeshCollider

- - Pieter Wuille

- - practicalswift

- - Russell Yanofsky

- - Sjors Provoost

- - Suhas Daftuar

- - Tim Ruffing

- - Walter

- - Wladimir J. van der Laan

以及所有在[Transifex]上帮助开发团队翻译文档的人。

----- PGP 签名信息 -----

iQEzBAEBCgAdFiEEnerg3HBjJJ+wVHRoHkrtYphs0l0FAlwh9x0ACgkQHkrtYphs 0l1yqQf/WzqxJkIrzyO9ZRaLKjaaxVz8E7jqHsyA+4mdObsSPjneGfKh7OEC2Fhx VV7EF+A5kNFQgwnPwXlW3AaiuDhcGHEG4T0AB0JGaggLD6KrjpzuWHYx5k0COwdG 5sYRH4tZxbtWoF1+IQ1R8Ceac20VBqBUBJJfAAntg4VrGaBjDqFJzf+0GmQM0gyW tq12nMIwevHWXsmtrQWhAbCeLI8pyhGLOtLqCgrrD5hqe72iV7t6Njs5E+kRkEM1 Um6a3nc7LTUMXufTwBf6Sie6azubybvI2/G2HvYEn7DKpLAXiihyO8iiheAi6g4U JtAgFUiyIvmeLh8etboF3pLy/Q8F5A== =LFNX


原文:https://lists.linuxfoundation.org/pipermail/bitcoin-core-dev/2018-December/000072.html
作者:bitcoin core 开发团队
翻译:洒脱喜 查看全部
201812260359563544.jpg

(图片来自免费图库:pxhere.com)


在2018年圣诞节之际,比特币core团队给出了一份非常棒的礼物:0.17.1版本的Bitcoin Core软件,那么这次更新到底有哪些新内容呢?

我们来看看开发团队给出的文档吧,以下为译文内容:

比特币Core 0.17.1版软件已正式发布,现在你可通过以下链接进行访问:

https://bitcoincore.org/bin/bitcoin-core-0.17.1/

这次发布的是一个次版本软件,其修复了一些漏洞,并对软件性能有了一些改进,此外还有一些翻译内容的更改。

开发者可以使用GitHub的问题跟踪器上报错误:

https://github.com/bitcoin/bitcoin/issues

若要接受安全及更新通知,请订阅:

https://bitcoincore.org/en/list/announcements/join/

 
如何更新
 

如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。

如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。

当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。

注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。

 
降级预警
 

此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何更旧版的客户端。你就需要运行旧版的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。

如果你的节点已启用了修建模式,那么就需要你重新下载和同步整个比特币区块链。

 
兼容性
 

Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。

Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。

需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0及之后版本的客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。

 
显著的更改
 

============== `listtransactions`标签支持

- --------------------------------

在0.17.0版本软件中,`listtransactions` RPC`account`参数被弃用了,其被重命名为`dummy`,而在更新版的软件当中,其又被重命名为`label`。

当比特币用`-deprecatedrpc = accounts`进行设置时,指定一个标签/帐户/伪参数将返回传出和传入 交易。而没有`-deprecatedrpc = accounts`设置,它只会返回传入交易(因为它曾经可创建来自特定账户支出的交易,但通过标签不再可能这样做。)

当设置`-deprecatedrpc = accounts`时,可传递空字符串“”,列出没有任何标签的交易。而没有设置`-deprecatedrpc = accounts`时,传递空字符串会是一个错误,因为只返回未标记的交易,通常不会是有用行为,并且可能会引起混乱。


0.17.1更改日志
 

==================
###P2P协议和网络代码

- - #14685`9406502`修复了一个反序列化溢出边缘情况(kazcw)

- - #14728 `b901578`在stringifying(字符串化)addrLocal时修复未初始化的读取(kazcw)

###钱包

- - #14441`5150acc`恢复按标签列出传入交易的能力(jnewbery)

- - # 13546 `91fa15a`修正了CWallet::CreateTransaction(...)中未初始化值 `bnb_use'的使用(practicalswift)

- - #14310 `bb90695` 确保钱包在签名前是解锁状态的(gustavonalle)

- - #14690 `5782fdc` 如果CPubKey在PSBT密钥路径序列化期间无效,则抛出错误(instagibbs)

- - #14852 `2528443` backport: [test]添加`wallet_..py'(MarcoFalke)

- - #14196 `3362a95` psbt:总是丢弃不必要的utxo,并在必要时将非验证utxo转换为验证utxo(achow101)

- - #14588 `70ee1f8` 重构PSBT签名逻辑,以强制执行不变量并修复签名错误(gwillen)

- - #14424 `89a9a9d` 停止要求导入的pubkey,以签署非PKH计划(sipa,MeshCollider)

### RPC和其他API

- - #14417 `fb9ad04`修复没有将地址作为字符串的listreceivedbyadd.(etscrivner)

- - #14596 `de5e48a`漏洞修正: RPC:为createmultisig添加名为param的`address_type` (luke-jr)

- - #14618 `9666dba`使HTTP RPC调试日志记录更具信息性 (practicalswift)

- - #14197 `7bee414` [psbt]如果创建了验证sig,则将非验证UTXO转换为验证UTXO(achow101)

- - #14377 `a3fe125` 检查是否找到psbt输入、输出和全局映射的分离器 (achow101)

- - #14356 `7a590d8` 修复converttopsbt permitigdata arg,添加基本测试(instagibbs)

- - # 14453 `75b5d8c` 在walletpassphrase(钱包密码)超时时,修复钱包卸载 (promag)

### GUI

- - #14403 `0242b5a` 恢复 "Force TLS1.0+ for SSL connections" (real-or-random)

- - #14593 `df5131b` 明确禁用macOS版客户端的“暗模式” (fanquake)

###构建系统

- - #14647 `7edebed` 删除darwin.mk中的非法间距 (ch4ot1c)

- - #14698 `ec71f06` 将bitcoin-tx.exe添加到Windows安装程序中(ken2812221)

###测试和质量保证

- - #13965 `29899ec` 修复扩展功能测试失败(ken2812221)

- - #14011 `9461f98` 在macOS minimal平台上禁用钱包和地址簿Qt测试 (ryanofsky)

- - #14180 `86fadee` 即使钱包没有被编译,也要运行所有测试(MarcoFalke)

- - #14122 `8bc1bad` 测试`rpc_help.py`失败:检查ZMQ是否启用(Kvaciral)

- - #14101 `96dc936` 在验证接受测试中,使用命名args(MarcoFalke)

- - #14020 `24d796a` 为RPC帮助添加测试 (promag)

- - #14052 `7ff32a6` 在`rpc_rawtransaction`中添加一些实际的验证内容 (MarcoFalke)

- - #14215 `b72fbab` 在示例测试中使用正确的python索引切片(sdaftuar)

- - #14024 `06544fa` 添加`TestNode::assert_debug_log` (MarcoFalke)

- - #14658 `60f7a97` 添加测试,以确保节点可以在运行时生成所有rpc帮助文本(MarcoFalke)

- - #14632 `96f15e8` 修正了一个comment (fridokus)

- - #14700 `f9db08e` 通过等待区块请求,来避免`p2p_invalid_block`中的竞争(MarcoFalke)

- - #14845 `67225e2` 添加 `wallet_balance.py` (jnewbery)

###文件

- - #14161 `5f51fd6` doc/descriptors.md tweaks(ryanofsky)

- - #14276 `85aacc4` 在ARM交叉编译中添加autogen.sh(walterwhite81)

 
贡献者
 

感谢直接为这次软件发布做出贡献的每一个人:

- - Andrew Chow

- - Chun Kuan Lee

- - David A. Harding

- - Eric Scrivner

- - fanquake

- - fridokus

- - Glenn Willen

- - Gregory Sanders

- - gustavonalle

- - John Newbery

- - Jon Layton

- - Jonas Schnelli

- - João Barbosa

- - Kaz Wesley

- - Kvaciral

- - Luke Dashjr

- - MarcoFalke

- - MeshCollider

- - Pieter Wuille

- - practicalswift

- - Russell Yanofsky

- - Sjors Provoost

- - Suhas Daftuar

- - Tim Ruffing

- - Walter

- - Wladimir J. van der Laan

以及所有在[Transifex]上帮助开发团队翻译文档的人。

----- PGP 签名信息 -----

iQEzBAEBCgAdFiEEnerg3HBjJJ+wVHRoHkrtYphs0l0FAlwh9x0ACgkQHkrtYphs 0l1yqQf/WzqxJkIrzyO9ZRaLKjaaxVz8E7jqHsyA+4mdObsSPjneGfKh7OEC2Fhx VV7EF+A5kNFQgwnPwXlW3AaiuDhcGHEG4T0AB0JGaggLD6KrjpzuWHYx5k0COwdG 5sYRH4tZxbtWoF1+IQ1R8Ceac20VBqBUBJJfAAntg4VrGaBjDqFJzf+0GmQM0gyW tq12nMIwevHWXsmtrQWhAbCeLI8pyhGLOtLqCgrrD5hqe72iV7t6Njs5E+kRkEM1 Um6a3nc7LTUMXufTwBf6Sie6azubybvI2/G2HvYEn7DKpLAXiihyO8iiheAi6g4U JtAgFUiyIvmeLh8etboF3pLy/Q8F5A== =LFNX


原文:https://lists.linuxfoundation.org/pipermail/bitcoin-core-dev/2018-December/000072.html
作者:bitcoin core 开发团队
翻译:洒脱喜

无惧“严寒”!比特币全节点数量突破1万个

资讯8btc 发表了文章 • 2018-11-21 18:34 • 来自相关话题

据Coin Dance本周提供的新数据显示,比特币公共节点数量大幅增加。目前比特币网络上共有10094个公共节点,继今年3月以来首次突破10000个。

大约95%的节点都在运行Bitcoin Core,这一比例自今年年初以来始终保持稳步增长。节点数量排名第二的客户端是Bitcore,但只占到了总数量的2%。

目前仍有56个节点在运行Bitcoin UASF,这个软件对那些不愿意从2017年8月开始采用隔离见证(SegWit)的矿工的反击。直到现在,业内很多人都认为这一举措是用户的胜利,打败了大集团利益。

在隔离见证软分叉之前,UASF(用户激活软分叉)节点达到了1350个,在顺利完成任务之后就迅速减少。在此之后,BCH就从比特币网络分离出来了,当时节点数量也开始迅速上涨。

除了比特币公共节点之外,闪电网络节点也随着该项技术的成熟而增加,本月初节点数量已经超过了4000。其网络容量也达到了历史新高,即118个BTC。

所有用户都可以运行比特币全节点,除了能够帮到比特币网络之外,还能保障用户的权益。运行比特币全节点的主要优势有:

1. 帮助比特币网络

运行全节点是控制并且确保比特币网络中的规则没有被破坏的唯一方式。节点可以拒绝那些没有遵守共识规则的区块和交易。从这层意义上来看,节点比算力更加重要,因为它们是确保区块链规则和秩序的唯一选择。就算某条链是最长的PoW链,节点依然能够通过判断这条链是否遵守规则来决定是否接受它。

比特币维基页面中提到:

无论如何,全节点都会执行共识规则。然而,轻节点不会这么做。轻节点只会按照大多数算力的动向行事。因此,假设大多数矿工集结在一起希望提高区块奖励,轻节点可能只会盲目追随。


2. 保证你的安全

如果你的比特币钱包不需要你运行全节点,那就意味着你必须信任服务商,这是很不安全的。有些网页钱包需要你信任一个中心节点,因为你的交易是通过这个节点广播的。Electrum等轻客户端也需要你信任他们的服务器。就连SPV客户端也需要信任第三方,因为你只需要下载区块头,而不用验证区块链规则。

3. 选择的机会

一旦硬分叉导致区块链被一分为二,同时两条链依然能够正常进行经济活动,那么运行全节点除了能够验证区块链规则之外,还可以发表自己的意见。运行特定客户端的节点是一种间接的投票方式,可以让矿工知道用户支持的是哪种规则。

4. 更多隐私

运行全节点能让你获得更多的隐私。依赖于第三方服务器来广播交易就相当于给了这些服务器记录你地址的机会。

5. 运行全节点也没那么难

对于不了解技术的用户来说,运行全节点似乎是一个挑战。但其实就相当于下载最新版的客户端然后保持开启状态。

比特币区块链已经超过100GB,因此,一开始同步节点需要花上一段时间。不过,Core在新版本中改进了验证速度和网络传播性能,未来网络同步和区块加载时间会逐渐缩短。

6. 运行全节点的成本不高

运行全节点需要保证电脑始终保持开启状态——或者至少大部分的时间要开着。其实你可以随时开启或者关闭节点,但频繁的开关操作并不实际。很多用户都不会在自己的电脑上运行节点,而是租一个虚拟服务器。


Bitcoin Core列出了运行比特币全节点的基本要求:

- 运行最新版Windows、Mac OS X或Linux的台式或笔记本电脑硬件

- 125GB的可用磁盘空间

- 2GB内存

- 网络上传速度至少50KB/S

- 不限量的网络连接、上传限制较高的连接或有定期监控的连接,以确保不超过其上传限制。对于高速连接上的所有节点来说,一个月使用200GB以上的容量是很常见的。每个月的下载使用量约为20GB,而在第一次启动节点时,还会额外需要100GB

- 你的全节点每天至少要运行6个小时(运行过程中你可以做其他事),运行时间越长越好,最好是不间断的运行。



原文:Bitcoin Public Full Node Count Surpasses 10,000
作者:EMILIO JANUS
编译:Wendy 查看全部
shutterstock_403738375.jpg

据Coin Dance本周提供的新数据显示,比特币公共节点数量大幅增加。目前比特币网络上共有10094个公共节点,继今年3月以来首次突破10000个。

大约95%的节点都在运行Bitcoin Core,这一比例自今年年初以来始终保持稳步增长。节点数量排名第二的客户端是Bitcore,但只占到了总数量的2%。

目前仍有56个节点在运行Bitcoin UASF,这个软件对那些不愿意从2017年8月开始采用隔离见证(SegWit)的矿工的反击。直到现在,业内很多人都认为这一举措是用户的胜利,打败了大集团利益。

在隔离见证软分叉之前,UASF(用户激活软分叉)节点达到了1350个,在顺利完成任务之后就迅速减少。在此之后,BCH就从比特币网络分离出来了,当时节点数量也开始迅速上涨。

除了比特币公共节点之外,闪电网络节点也随着该项技术的成熟而增加,本月初节点数量已经超过了4000。其网络容量也达到了历史新高,即118个BTC。

所有用户都可以运行比特币全节点,除了能够帮到比特币网络之外,还能保障用户的权益。运行比特币全节点的主要优势有:

1. 帮助比特币网络

运行全节点是控制并且确保比特币网络中的规则没有被破坏的唯一方式。节点可以拒绝那些没有遵守共识规则的区块和交易。从这层意义上来看,节点比算力更加重要,因为它们是确保区块链规则和秩序的唯一选择。就算某条链是最长的PoW链,节点依然能够通过判断这条链是否遵守规则来决定是否接受它。

比特币维基页面中提到:


无论如何,全节点都会执行共识规则。然而,轻节点不会这么做。轻节点只会按照大多数算力的动向行事。因此,假设大多数矿工集结在一起希望提高区块奖励,轻节点可能只会盲目追随。



2. 保证你的安全

如果你的比特币钱包不需要你运行全节点,那就意味着你必须信任服务商,这是很不安全的。有些网页钱包需要你信任一个中心节点,因为你的交易是通过这个节点广播的。Electrum等轻客户端也需要你信任他们的服务器。就连SPV客户端也需要信任第三方,因为你只需要下载区块头,而不用验证区块链规则。

3. 选择的机会

一旦硬分叉导致区块链被一分为二,同时两条链依然能够正常进行经济活动,那么运行全节点除了能够验证区块链规则之外,还可以发表自己的意见。运行特定客户端的节点是一种间接的投票方式,可以让矿工知道用户支持的是哪种规则。

4. 更多隐私

运行全节点能让你获得更多的隐私。依赖于第三方服务器来广播交易就相当于给了这些服务器记录你地址的机会。

5. 运行全节点也没那么难

对于不了解技术的用户来说,运行全节点似乎是一个挑战。但其实就相当于下载最新版的客户端然后保持开启状态。

比特币区块链已经超过100GB,因此,一开始同步节点需要花上一段时间。不过,Core在新版本中改进了验证速度和网络传播性能,未来网络同步和区块加载时间会逐渐缩短。

6. 运行全节点的成本不高

运行全节点需要保证电脑始终保持开启状态——或者至少大部分的时间要开着。其实你可以随时开启或者关闭节点,但频繁的开关操作并不实际。很多用户都不会在自己的电脑上运行节点,而是租一个虚拟服务器。


Bitcoin Core列出了运行比特币全节点的基本要求:


- 运行最新版Windows、Mac OS X或Linux的台式或笔记本电脑硬件

- 125GB的可用磁盘空间

- 2GB内存

- 网络上传速度至少50KB/S

- 不限量的网络连接、上传限制较高的连接或有定期监控的连接,以确保不超过其上传限制。对于高速连接上的所有节点来说,一个月使用200GB以上的容量是很常见的。每个月的下载使用量约为20GB,而在第一次启动节点时,还会额外需要100GB

- 你的全节点每天至少要运行6个小时(运行过程中你可以做其他事),运行时间越长越好,最好是不间断的运行。




原文:Bitcoin Public Full Node Count Surpasses 10,000
作者:EMILIO JANUS
编译:Wendy

比特币0.17.0版本客户端发布在即,隐私功能成为亮点

攻略8btc 发表了文章 • 2018-09-05 11:37 • 来自相关话题

 
比特币最新版的客户端Bitcoin Core 0.17.0距正式发布已越来越近,这也是10年来比特币的第17代客户端版本。
 
据Bitcoin Core 维护者Wladimir van der Laan预计,这一版本的客户端最早将于9月8日发布。目前其在github上的完成度已经达到了92%。
 
以下为0.17.0版本更新说明:(注意,这只是一个临时版的说明,正式发布时可能会稍作修改)
 
Bitcoin Core 0.17.0 版本可以在这里访问了:
 
https://bitcoincore.org/bin/bitcoin-core-0.17.0/
 
这是比特币的重大更新版本,更新内容包括新功能、各种bug修复,以及性能提升。
 
开发者可以使用GitHub的问题跟踪器上报错误:
 
若要接受安全及更新通知,请订阅:
 
https://bitcoincore.org/en/list/announcements/join/
 
 
如何更新
 
 
如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。
 
如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。
 
当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。
 
注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。在0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。
 
 
降级预警
 
 
此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何旧版的客户端,你就需要运行旧版本的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。
 
如果你的节点已启用了修建模式,那么就需要你重新下载同步整个比特币区块链。
 
 
兼容性
 
 
Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。
 
Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。
 
需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。
 
 
显著的更改
 
 
更改配置选项
 
-includeconf=<file>可用于包含附加配置文件。它只在bitcoin.conf文件内时起作用,并不作用于包含文件或命令行。它可包含多个文件。操作者可通过命令行-noincludeconf 禁用这一功能。请注意,例如-includeconf这样的多参数命令,将覆盖掉先前的-noincludeconf 命令行;
 
noincludeconf=1 includeconf=relative.conf
 
bitcoin.conf将仍然包含relative.conf 。
 
 
更新图形用户界面
 
在主选项卡中,区块存储可在参数选择栏中进行限制。而撤消此设置,需要再次下载完整的区块链。此模式与 -txindex 以及 -rescan 是不兼容的。
 
 
外部钱包文件
 
-wallet=<path>选项现在接受了全路径,不再需要把钱包放置于-walletdir目录当中。
新创建的钱包格式
如果 -wallet=<path> 指定了一个不存在的路径,那么它现在将在指定位置创建一个钱包目录(包括一个wallet.dat数据文件,一个db.log文件以及database/log.??????????文件),而不仅仅是在路径中创建一个数据文件,并将日志文件存储在父目录当中。这使得备份钱包的操作会比以前更简单,因为指定的钱包路径可以直接归档,而不必在父目录中查找交易日志文件。
 
为了实现向后兼容,钱包路径是以-walletdir目录中现有数据文件为名,则将继续被接受,并像以前一样被解释。
 
 
钱包的动态加载及创建
 
以前,钱包只有在命令行或bitcoin.conf文件中定义-wallet 参数时,才能实现加载或创建。而现在,客户端就可实现在运行时完成钱包动态的加载、创建和卸载操作:
 

现有的钱包可通过调用 loadwallet RPC(远程过程调用)来实现加载。钱包可以指定为文件/目录名(必须位于 walletdir目录当中),或作为文件/目录的绝对路径。
新的钱包可以通过调用createwallet RPC(远程过程调用)来进行创建(或加载)。所提供的名称,必须和walletdir目录中的钱包文件或当前加载的钱包的名字差异化。
加载钱包可以通过调用unloadwallet RPC命令行实现加载;

 
此特性目前只能通过RPC接口实现。
 
 
可选交易(Coin selection)
 
 
Partial spend avoidance(部分花费规避)
 
当一个地址被用于支付多次时,来自这些分离支付的币,就可单独地进行使用,而这样会连接到其它地址,从而有损交易的隐私性。
 
而新版客户端添加了一种新的 -avoidpartialspends 操作码(默认值为false)。如果启用了这个功能,那钱包总是会把现有的UTXO汇聚到同一个地址,即使它会导致更高的费用。这样做就可以提高交易的隐私性。
 
 
测试网和RegTest 测试网络的配置部分
 
现在,单个配置文件,可实现为不同的网络设置不同的选项了。实现方法如下:
 
main.uacomment=bitcoin test.uacomment=bitcoin-testnet regtest.uacomment=regtest [main] mempoolsize=300 [test] mempoolsize=100 [regtest] mempoolsize=20
 
根据配置文件的规则,addnode=, connect=, port=, bind=, rpcport=, rpcbind= 以及 wallet= 选项将只适用于比特币主网。
 
 
钱包的‘标签’和‘账户’API
 
新版本的钱包客户端引入了一个新的‘标签-label’API。这是为了取代被弃用的‘账户-account’API。通过'-deprecatedrpc=accounts' 参数,这个‘账户’仍可在V0.17客户端当中使用,而在V0.18版本客户端中,它将被完全移除。
 
这个标签RPC方法和账户功能是非常类似的,差异在于以下这几点:
 
    标签可以在任何地址上进行设置,而不仅仅是接收地址。此功能以前仅通过GUI可用。
    标签可通过 setlabel RPC的方法,重新分配所有地址,来进行删除;
    不支持从一个标签来发送交易,也不支持确定一笔交易是从哪个标签发送而来的;
    标签没有所谓的余额;
 
以下是RPC方法的变化:
 
 
被移除的方法 新的方法 注释
 
getaccount getaddressinfo  Getaddressinfo返回了一个具有地址信息的JSON对象,而不仅仅是字符串的账户名称
 
getaccountaddress  n/a 因为标签没有关联的接收地址,所以getaccountaddress就没有替换选项了
 
getaddressesbyaccount getaddressesbylabel Getaddressesbylabel返回了一个JSON对象,其地址为密钥,而不是字符串列表
 
getreceivedbyaccount getreceivedbylabel 行为上没有发生变化
 
listaccounts  listlabels  Listlabels不会返回余额,也不会接受minconf和watchonly参数
 
listreceivedbyaccount  listreceivedbylabel 这两种方法都返回新的标签字段,以及用于向后兼容的账户字段
 
move  n/a 没有替代方法
 
sendfrom n/a 没有替代方法
 
setaccount setlabel 这两种方法都具有:1、允许将标签分配给任何地址,而不是在地址不接收地址时引发错误。2、删除与某地址相关联的先前标签,当使用该标签的最后地址被重新分配到另一个标签时。而不是进行隐式的getaccountaddress调用(确保先前的标签仍然具有一个接收地址);
 
 
更改过的方法 注释
 
addmultisigaddress 将参数account重命名为 label,如果用'-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
getnewaddress 将参数account重命名为 label,如果用 '-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
listunspent 返回新的标签字段,如果使用'-deprecatedrpc=accounts'运行,account字段将将返回以向后兼容。
 
sendmany 将参数account重命名为 dummy,如果提供,则这个dummy参数必须设置为空字符串,除非使用 -deprecatedrpc=accounts 参数(在这种情况下,功能不变)运行
 
listtransactions 将参数account重命名为 dummy,如果提供,则这个dummy必须设置为*字符串,除非使用 -deprecatedrpc=accounts  参数(在这种情况下,功能不变)运行。
 
getbalance account, minconf 以及include_watchonly参数被弃用了,这些参数只有在使用 '-deprecatedrpc=accounts'运行时才能够使用。
 
 
 
BIP 174 : 支持部分签名比特币交易(Partially Signed Bitcoin Transactions support)
 
 
BIP 174 PSBT 是用于尚未完全签名的比特币交易的一种交换格式,它与相关元数据一起协助对像进行签署。其旨在简化多方合作交易时的工作流程。例子包括硬件钱包、多重签名设置,以及CoinJoin交易。
 
 
整体工作流程
 
 
总体而言,一笔具有完整签名的比特币交易,其构建经历了以下步骤:
 

一名创建者(Creator)提出了一笔要创建的特定交易。它构造了一笔包含某些输入(input)和输出(output),但没有附加元数据的PSBT交易;
对于每一个输出(output),更新者(Updater)会把交易所花费的UTXO信息添加到 PSBT交易当中;
潜在的其他更新者,会把每一个输入(以及可能的输出)中所涉及的脚本和公钥信息添加到PSBT交易当中;
签名者(Signers)会检查这笔PSBT交易及其元数据,然后决定是否同意交易。它们可以使用UTXO当中的数量信息来评估所涉及的价值和费用。如果同意,它们就会为具有相关密钥的输入,生产一个部分签名(partial signature)。
决策者(Finalizer)会把关每一个输入,并转换这个部分签名,并可能把脚本信息写入最终的scriptSig 以及/或scriptWitness 。
提取者(Extractor )会从一笔PSBT交易当中,提取并生产出一笔有效的比特币交易。

 
一般来说,上面的每一个参与者(不包括创建者和提取者)会简单地把越来越多的数据添加到特定的PSBT交易当中。在简单的工作流程当中,它们必须按顺序操作,将 PSBT交易从一方传递到下一方,直到提取者(Extractor )可以将其转换为一笔真正的比特币交易。为了允许并行操作,组合者(Combiners)可以把不同的PSBT交易的元数据合并到同一个未签名的交易当中。
 
上面使用粗体所表示的名称,是BIP174中定义角色的名称。这对于理解底层步骤很有用,但在实践过程中,软件和硬件通常同时担任了多个角色。
 
 
RPC
 

converttopsbt (创建者)是一个功能性RPC,它将未签名的原始交易转换为PSBT格式,其忽略了现有签名。
createpsbt(创建者)是一个功能性RPC,它负责获取输入和输出列表,并把它们转换为没有附加信息的PSBT,其相当于在converttopsbt之后调用createrawtransaction
walletcreatefundedpsbt (创建者, 更新者) 是一个钱包RPC,它负责创建具有指定输入和输出的PSTB,并向其添加额外的输入,更改以平衡之,并添加相关的元数据。
walletprocesspsbt(更新者,签名者,决策者)是一个钱包RPC,它负责接受PSBT作为输入,将UTXO、密钥和脚本数据添加到那些错过它的输入和输出当中,并可选地对输入进行签名。在可能的情况下,它也能够完成部分签名;
finalizepsbt (决策者,提取者)是一个功能性RPC,它用于完成任何部分签名,如果所有的输入都已完成,则将结果转换为完全签名的交易,该交易可以通过sendrawtransaction 进行广播;
combinepsbt (组合者)是一个功能性RPC,它的作用就是作为一个组合者,它可以在任何工作流程的任何时间点使用,其可以将信息添加到同一PSBT的不同版本当中。特别地,它对于多个更新者或签名者输出的组合而言,是有用的。
decodepsbt是一个诊断型RPC,它可以用于显示PSBT交易中所有的信息,并计算它的最终费用。

 
 
将非HD钱包升级为HD钱包
 
 
自Bitcoin Core 0.13.0版本客户端发布以来,Bitcoin Core 就可以支持创建新的BIP 32 分层确定性(HD)钱包,但旧的非HD钱包无法升级到HD钱包。现在,我们可通过-upgradewallet 命令行选项将非HD钱包升级到HD钱包。这一升级,将导致密钥池中的所有密钥会被标记为已使用,并生成新的密钥池。执行此升级时,操作者必须做好钱包备份。
 
此外,-upgradewallet命令行还可以把非分裂HD链(用m/0'/0'/i'生成的所有密钥)升级到一个分裂HD链(接收用 'm/0'/0'/i'生成的密钥,以及用m'/0'/1'/i'生成的更改密钥)。当发生此升级时,密钥池中已有的所有密钥,将保留在密钥池中以供使用,直到升级前所有的密钥被耗尽。这是为了避免备份及降级的问题(当一些密钥可能来自更改密钥池时)。用户们可以使用newkeypool RPC 命令行来使用新的分裂HD链密钥池,来标记密钥池中已使用的所有密钥,并开始使用这个分裂HD链中生成的新密钥池。
 
 
HD 主密钥控制
 
 
一个新的RPC sethdseed 已被引入到客户端当中,它允许用户设置新的HD种子,或设置自己的HD种子。需要注意的是,在设置新的HD种子时,用户必须进行新的备份。
 
 
重要性较低的 RPC更改
 

createrawtransaction RPC 现在将为outputs参数接受数组(array)或dictionary (保持兼容性),这意味着交易输出顺序,可以由客户端指定。
fundrawtransaction RPC 将拒绝先前被否定的 reserveChangeKey 选项;
sendmany 将负责打乱输出(output)以改善隐私性,因此,任何先前预期的关于输出排序的行为都变得不可靠了;
新的testmempoolaccept RPC ,可用来测试在不添加一笔交易的情况下,看其是否会被交易储蓄池(mempool)所接受;
JSON交易分解现在包括了一个权重字段,其它提供了交易的确切权重。在JSON模式下,它将纳入REST /rest/tx/ 以及/rest/block/ 端点中。它也会包含于getblock (verbosity=2),listsinceblock,listtransactions, 以及getrawtransaction RPC命令中。
新的fees字段将引入getrawmempool,getmempoolancestors, getmempooldescendants 以及 getmempoolentry,当子字段 ancestor, base, modified 以及 descendant以BTC计价,verbosity设置为 true时。这个新的字段会否定先前的费用字段,例如fee, modifiedfee, ancestorfee 以及 descendantfee;
新的RPC getzmqnotifications 会返回有关活跃ZMQ通知的信息。
当比特币并不以任何-wallet=<path>选项启动时,由getwalletinfo和listwallets 这两个RPC所返回的默认钱包名现在会是空字符串 "" ,而不是先前的"wallet.dat" 。如果是通过-wallet=<path>选项启动的,则和以前没有变化,任何钱包的名称只是其<path>字符串。
现在,将一个空字符串("") 作为address_type参数传递给getnewaddress, getrawchangeaddress, addmultisigaddress, fundrawtransaction RPC 会是一个错误。以前,这将回到使用默认地址类型。它仍然可以传递空字符串或将未设置的参数保留为使用默认地址类型。
空的多重签名输出,将不再自动被当做传入支付。由于此功能仅适用于多重签名输出,也就是你拥有钱包当中所有私钥的情况。与单个密钥方案相比,这通常没有什么用处。此外,当前并没有定义这样的输出地址格式,并且钱包软件不能很容易地发送给它。listtransactions,listunspent 命令行将不再显示这些输出,这些输出也不会和你余额有关,除非它们被明确监视(用十六进制脚本参数importaddress或importmulti,signrawtransaction*也可以使用)。
getwalletinfo RPC 现在会返回一个hdseedid值,它始终与不正确命名的hdmasterkeyid值相同。hdmasterkeyid将在V0.18版本客户端中被删除。

 
 
其他API更改
 
 
在dumpwallet 输出中的inactivehdmaster 已被更改为inactivehdseed
 
 
日志
 

日志时间戳的格式现在是ISO 8601 (例如"2018-02-28T12:34:56Z")。
当运行带有 -debug,而没有-daemon的bitcoind时,记录stdout现在就成为了默认行为。设置-printtoconsole=1 不再隐含地禁止记录到debug.log。相反,我们可通过设置-debuglogfile=0 来显式禁用记录到文件。

 
 
交易索引变化
 
 
交易索引现在和主节点过程分开构建,这意味着 -txindex 操作码,可在没有完全重新索引的情况下进行toggled切换。如果bitcoind是用-txindex 在一个已部分或完全同步的节点上运行的,则交易索引可在后台建立,并且一旦被捕获就可使用。当从运行-txindex,切换到不带这一flag的运行时,交易索引数据库将不会自动被删除,这意味着,我们可以在稍后的时间里重新打开它,而无需重新同步。
 
 
区块限制功能
 
 
在V0.15.1客户端当中,允许矿工限制其区块大小的-blockmaxsize 选项遭到了反对,现在这个选项被移除掉了。如果矿工们想要限制区块的大小,他们应使用-blockmaxweight 这个选项。
 
 
中断对Python  2.0的支持
 
 
对于所有测试文件及工具而言,新版本的客户端对Python 2.0的支持已经中断。
 
最后,感谢所有对该版本比特币客户端作出直接贡献的人,也感谢帮助翻译的每一个人。
 
 
原文:0.17.0 Release notes
作者:Bitcoin core开发组
编译:洒脱喜 查看全部
201809050303409478.jpg

 
比特币最新版的客户端Bitcoin Core 0.17.0距正式发布已越来越近,这也是10年来比特币的第17代客户端版本。
 
据Bitcoin Core 维护者Wladimir van der Laan预计,这一版本的客户端最早将于9月8日发布。目前其在github上的完成度已经达到了92%。
 
以下为0.17.0版本更新说明:(注意,这只是一个临时版的说明,正式发布时可能会稍作修改)
 
Bitcoin Core 0.17.0 版本可以在这里访问了:
 
https://bitcoincore.org/bin/bitcoin-core-0.17.0/
 
这是比特币的重大更新版本,更新内容包括新功能、各种bug修复,以及性能提升。
 
开发者可以使用GitHub的问题跟踪器上报错误:
 
若要接受安全及更新通知,请订阅:
 
https://bitcoincore.org/en/list/announcements/join/
 
 
如何更新
 
 
如果你运行的是旧版本客户端,请关闭它,直至其完全关闭(旧版本可能需要几分钟的时间),然后再运行安装程序(在Windows上)或拷贝覆盖至/Applications/Bitcoin-Qt(Mac系统)或bitcoind/bitcoin-qt(Linux系统)。
 
如果你的节点具有txindex(维护所有交易的索引),那么在你第一次运行0.17.0(或更新的)客户端时,这个txindex db就会进行迁移,这可能需要几个小时的时间。在迁移完成之前,你的节点将不起作用。
 
当你第一次运行0.15.0或更新版本的客户端时,你的链态数据库将转换成一种新的格式,这取决于你机器的速度,所花费的时间从几分钟到半小时不等。
 
注意,区块数据库格式在0.8.0版本中也发生了变化,并且在0.8版本之前的客户端到 0.15.0版本的客户端并没有自动升级代码。在0.7.x版本或更早版本的客户端,无法实现直接升级(需要重新下载区块链)。不过,和往常一样的是,旧版本的钱包仍然是支持的。
 
 
降级预警
 
 
此版本的链式数据库,与先前的版本并不兼容,因此,如果你运行的是0.15版本的客户端,然后你决定切换回任何旧版的客户端,你就需要运行旧版本的客户端,并使用 -reindex-chainstate 选项来重建旧格式的链式数据结构。
 
如果你的节点已启用了修建模式,那么就需要你重新下载同步整个比特币区块链。
 
 
兼容性
 
 
Bitcoin Core客户端已在多个操作系统上进行了广泛测试,其中包括Linux 内核操作系统、macOS 10.10+、Windows 7以及更新的操作系统(Windows XP并不支持)。
 
Bitcoin Core在其他类似Unix系统的操作系统上也是可以工作的, 但测试相对较少。
 
需要注意的是,macOS操作系统低于10.10版本就无法运行0.17.0客户端,这是因为0.17.0是使用Qt 5.9.x构建的,它并不支持低于10.10版本的macOS操作系统。
 
 
显著的更改
 
 
更改配置选项
 
-includeconf=<file>可用于包含附加配置文件。它只在bitcoin.conf文件内时起作用,并不作用于包含文件或命令行。它可包含多个文件。操作者可通过命令行-noincludeconf 禁用这一功能。请注意,例如-includeconf这样的多参数命令,将覆盖掉先前的-noincludeconf 命令行;
 
noincludeconf=1 includeconf=relative.conf
 
bitcoin.conf将仍然包含relative.conf 。
 
 
更新图形用户界面
 
在主选项卡中,区块存储可在参数选择栏中进行限制。而撤消此设置,需要再次下载完整的区块链。此模式与 -txindex 以及 -rescan 是不兼容的。
 
 
外部钱包文件
 
-wallet=<path>选项现在接受了全路径,不再需要把钱包放置于-walletdir目录当中。
新创建的钱包格式
如果 -wallet=<path> 指定了一个不存在的路径,那么它现在将在指定位置创建一个钱包目录(包括一个wallet.dat数据文件,一个db.log文件以及database/log.??????????文件),而不仅仅是在路径中创建一个数据文件,并将日志文件存储在父目录当中。这使得备份钱包的操作会比以前更简单,因为指定的钱包路径可以直接归档,而不必在父目录中查找交易日志文件。
 
为了实现向后兼容,钱包路径是以-walletdir目录中现有数据文件为名,则将继续被接受,并像以前一样被解释。
 
 
钱包的动态加载及创建
 
以前,钱包只有在命令行或bitcoin.conf文件中定义-wallet 参数时,才能实现加载或创建。而现在,客户端就可实现在运行时完成钱包动态的加载、创建和卸载操作:
 


现有的钱包可通过调用 loadwallet RPC(远程过程调用)来实现加载。钱包可以指定为文件/目录名(必须位于 walletdir目录当中),或作为文件/目录的绝对路径。
新的钱包可以通过调用createwallet RPC(远程过程调用)来进行创建(或加载)。所提供的名称,必须和walletdir目录中的钱包文件或当前加载的钱包的名字差异化。
加载钱包可以通过调用unloadwallet RPC命令行实现加载;


 
此特性目前只能通过RPC接口实现。
 
 
可选交易(Coin selection)
 
 
Partial spend avoidance(部分花费规避)
 
当一个地址被用于支付多次时,来自这些分离支付的币,就可单独地进行使用,而这样会连接到其它地址,从而有损交易的隐私性。
 
而新版客户端添加了一种新的 -avoidpartialspends 操作码(默认值为false)。如果启用了这个功能,那钱包总是会把现有的UTXO汇聚到同一个地址,即使它会导致更高的费用。这样做就可以提高交易的隐私性。
 
 
测试网和RegTest 测试网络的配置部分
 
现在,单个配置文件,可实现为不同的网络设置不同的选项了。实现方法如下:
 
main.uacomment=bitcoin test.uacomment=bitcoin-testnet regtest.uacomment=regtest [main] mempoolsize=300 [test] mempoolsize=100 [regtest] mempoolsize=20
 
根据配置文件的规则,addnode=, connect=, port=, bind=, rpcport=, rpcbind= 以及 wallet= 选项将只适用于比特币主网。
 
 
钱包的‘标签’和‘账户’API
 
新版本的钱包客户端引入了一个新的‘标签-label’API。这是为了取代被弃用的‘账户-account’API。通过'-deprecatedrpc=accounts' 参数,这个‘账户’仍可在V0.17客户端当中使用,而在V0.18版本客户端中,它将被完全移除。
 
这个标签RPC方法和账户功能是非常类似的,差异在于以下这几点:
 
    标签可以在任何地址上进行设置,而不仅仅是接收地址。此功能以前仅通过GUI可用。
    标签可通过 setlabel RPC的方法,重新分配所有地址,来进行删除;
    不支持从一个标签来发送交易,也不支持确定一笔交易是从哪个标签发送而来的;
    标签没有所谓的余额;
 
以下是RPC方法的变化:
 
 
被移除的方法 新的方法 注释
 
getaccount getaddressinfo  Getaddressinfo返回了一个具有地址信息的JSON对象,而不仅仅是字符串的账户名称
 
getaccountaddress  n/a 因为标签没有关联的接收地址,所以getaccountaddress就没有替换选项了
 
getaddressesbyaccount getaddressesbylabel Getaddressesbylabel返回了一个JSON对象,其地址为密钥,而不是字符串列表
 
getreceivedbyaccount getreceivedbylabel 行为上没有发生变化
 
listaccounts  listlabels  Listlabels不会返回余额,也不会接受minconf和watchonly参数
 
listreceivedbyaccount  listreceivedbylabel 这两种方法都返回新的标签字段,以及用于向后兼容的账户字段
 
move  n/a 没有替代方法
 
sendfrom n/a 没有替代方法
 
setaccount setlabel 这两种方法都具有:1、允许将标签分配给任何地址,而不是在地址不接收地址时引发错误。2、删除与某地址相关联的先前标签,当使用该标签的最后地址被重新分配到另一个标签时。而不是进行隐式的getaccountaddress调用(确保先前的标签仍然具有一个接收地址);
 
 
更改过的方法 注释
 
addmultisigaddress 将参数account重命名为 label,如果用'-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
getnewaddress 将参数account重命名为 label,如果用 '-deprecatedrpc=accounts'运行,仍然接受向后兼容性的account。
 
listunspent 返回新的标签字段,如果使用'-deprecatedrpc=accounts'运行,account字段将将返回以向后兼容。
 
sendmany 将参数account重命名为 dummy,如果提供,则这个dummy参数必须设置为空字符串,除非使用 -deprecatedrpc=accounts 参数(在这种情况下,功能不变)运行
 
listtransactions 将参数account重命名为 dummy,如果提供,则这个dummy必须设置为*字符串,除非使用 -deprecatedrpc=accounts  参数(在这种情况下,功能不变)运行。
 
getbalance account, minconf 以及include_watchonly参数被弃用了,这些参数只有在使用 '-deprecatedrpc=accounts'运行时才能够使用。
 
 
 
BIP 174 : 支持部分签名比特币交易(Partially Signed Bitcoin Transactions support)
 
 
BIP 174 PSBT 是用于尚未完全签名的比特币交易的一种交换格式,它与相关元数据一起协助对像进行签署。其旨在简化多方合作交易时的工作流程。例子包括硬件钱包、多重签名设置,以及CoinJoin交易。
 
 
整体工作流程
 
 
总体而言,一笔具有完整签名的比特币交易,其构建经历了以下步骤:
 


一名创建者(Creator)提出了一笔要创建的特定交易。它构造了一笔包含某些输入(input)和输出(output),但没有附加元数据的PSBT交易;
对于每一个输出(output),更新者(Updater)会把交易所花费的UTXO信息添加到 PSBT交易当中;
潜在的其他更新者,会把每一个输入(以及可能的输出)中所涉及的脚本和公钥信息添加到PSBT交易当中;
签名者(Signers)会检查这笔PSBT交易及其元数据,然后决定是否同意交易。它们可以使用UTXO当中的数量信息来评估所涉及的价值和费用。如果同意,它们就会为具有相关密钥的输入,生产一个部分签名(partial signature)。
决策者(Finalizer)会把关每一个输入,并转换这个部分签名,并可能把脚本信息写入最终的scriptSig 以及/或scriptWitness 。
提取者(Extractor )会从一笔PSBT交易当中,提取并生产出一笔有效的比特币交易。


 
一般来说,上面的每一个参与者(不包括创建者和提取者)会简单地把越来越多的数据添加到特定的PSBT交易当中。在简单的工作流程当中,它们必须按顺序操作,将 PSBT交易从一方传递到下一方,直到提取者(Extractor )可以将其转换为一笔真正的比特币交易。为了允许并行操作,组合者(Combiners)可以把不同的PSBT交易的元数据合并到同一个未签名的交易当中。
 
上面使用粗体所表示的名称,是BIP174中定义角色的名称。这对于理解底层步骤很有用,但在实践过程中,软件和硬件通常同时担任了多个角色。
 
 
RPC
 


converttopsbt (创建者)是一个功能性RPC,它将未签名的原始交易转换为PSBT格式,其忽略了现有签名。
createpsbt(创建者)是一个功能性RPC,它负责获取输入和输出列表,并把它们转换为没有附加信息的PSBT,其相当于在converttopsbt之后调用createrawtransaction
walletcreatefundedpsbt (创建者, 更新者) 是一个钱包RPC,它负责创建具有指定输入和输出的PSTB,并向其添加额外的输入,更改以平衡之,并添加相关的元数据。
walletprocesspsbt(更新者,签名者,决策者)是一个钱包RPC,它负责接受PSBT作为输入,将UTXO、密钥和脚本数据添加到那些错过它的输入和输出当中,并可选地对输入进行签名。在可能的情况下,它也能够完成部分签名;
finalizepsbt (决策者,提取者)是一个功能性RPC,它用于完成任何部分签名,如果所有的输入都已完成,则将结果转换为完全签名的交易,该交易可以通过sendrawtransaction 进行广播;
combinepsbt (组合者)是一个功能性RPC,它的作用就是作为一个组合者,它可以在任何工作流程的任何时间点使用,其可以将信息添加到同一PSBT的不同版本当中。特别地,它对于多个更新者或签名者输出的组合而言,是有用的。
decodepsbt是一个诊断型RPC,它可以用于显示PSBT交易中所有的信息,并计算它的最终费用。


 
 
将非HD钱包升级为HD钱包
 
 
自Bitcoin Core 0.13.0版本客户端发布以来,Bitcoin Core 就可以支持创建新的BIP 32 分层确定性(HD)钱包,但旧的非HD钱包无法升级到HD钱包。现在,我们可通过-upgradewallet 命令行选项将非HD钱包升级到HD钱包。这一升级,将导致密钥池中的所有密钥会被标记为已使用,并生成新的密钥池。执行此升级时,操作者必须做好钱包备份。
 
此外,-upgradewallet命令行还可以把非分裂HD链(用m/0'/0'/i'生成的所有密钥)升级到一个分裂HD链(接收用 'm/0'/0'/i'生成的密钥,以及用m'/0'/1'/i'生成的更改密钥)。当发生此升级时,密钥池中已有的所有密钥,将保留在密钥池中以供使用,直到升级前所有的密钥被耗尽。这是为了避免备份及降级的问题(当一些密钥可能来自更改密钥池时)。用户们可以使用newkeypool RPC 命令行来使用新的分裂HD链密钥池,来标记密钥池中已使用的所有密钥,并开始使用这个分裂HD链中生成的新密钥池。
 
 
HD 主密钥控制
 
 
一个新的RPC sethdseed 已被引入到客户端当中,它允许用户设置新的HD种子,或设置自己的HD种子。需要注意的是,在设置新的HD种子时,用户必须进行新的备份。
 
 
重要性较低的 RPC更改
 


createrawtransaction RPC 现在将为outputs参数接受数组(array)或dictionary (保持兼容性),这意味着交易输出顺序,可以由客户端指定。
fundrawtransaction RPC 将拒绝先前被否定的 reserveChangeKey 选项;
sendmany 将负责打乱输出(output)以改善隐私性,因此,任何先前预期的关于输出排序的行为都变得不可靠了;
新的testmempoolaccept RPC ,可用来测试在不添加一笔交易的情况下,看其是否会被交易储蓄池(mempool)所接受;
JSON交易分解现在包括了一个权重字段,其它提供了交易的确切权重。在JSON模式下,它将纳入REST /rest/tx/ 以及/rest/block/ 端点中。它也会包含于getblock (verbosity=2),listsinceblock,listtransactions, 以及getrawtransaction RPC命令中。
新的fees字段将引入getrawmempool,getmempoolancestors, getmempooldescendants 以及 getmempoolentry,当子字段 ancestor, base, modified 以及 descendant以BTC计价,verbosity设置为 true时。这个新的字段会否定先前的费用字段,例如fee, modifiedfee, ancestorfee 以及 descendantfee;
新的RPC getzmqnotifications 会返回有关活跃ZMQ通知的信息。
当比特币并不以任何-wallet=<path>选项启动时,由getwalletinfo和listwallets 这两个RPC所返回的默认钱包名现在会是空字符串 "" ,而不是先前的"wallet.dat" 。如果是通过-wallet=<path>选项启动的,则和以前没有变化,任何钱包的名称只是其<path>字符串。
现在,将一个空字符串("") 作为address_type参数传递给getnewaddress, getrawchangeaddress, addmultisigaddress, fundrawtransaction RPC 会是一个错误。以前,这将回到使用默认地址类型。它仍然可以传递空字符串或将未设置的参数保留为使用默认地址类型。
空的多重签名输出,将不再自动被当做传入支付。由于此功能仅适用于多重签名输出,也就是你拥有钱包当中所有私钥的情况。与单个密钥方案相比,这通常没有什么用处。此外,当前并没有定义这样的输出地址格式,并且钱包软件不能很容易地发送给它。listtransactions,listunspent 命令行将不再显示这些输出,这些输出也不会和你余额有关,除非它们被明确监视(用十六进制脚本参数importaddress或importmulti,signrawtransaction*也可以使用)。
getwalletinfo RPC 现在会返回一个hdseedid值,它始终与不正确命名的hdmasterkeyid值相同。hdmasterkeyid将在V0.18版本客户端中被删除。


 
 
其他API更改
 
 
在dumpwallet 输出中的inactivehdmaster 已被更改为inactivehdseed
 
 
日志
 


日志时间戳的格式现在是ISO 8601 (例如"2018-02-28T12:34:56Z")。
当运行带有 -debug,而没有-daemon的bitcoind时,记录stdout现在就成为了默认行为。设置-printtoconsole=1 不再隐含地禁止记录到debug.log。相反,我们可通过设置-debuglogfile=0 来显式禁用记录到文件。


 
 
交易索引变化
 
 
交易索引现在和主节点过程分开构建,这意味着 -txindex 操作码,可在没有完全重新索引的情况下进行toggled切换。如果bitcoind是用-txindex 在一个已部分或完全同步的节点上运行的,则交易索引可在后台建立,并且一旦被捕获就可使用。当从运行-txindex,切换到不带这一flag的运行时,交易索引数据库将不会自动被删除,这意味着,我们可以在稍后的时间里重新打开它,而无需重新同步。
 
 
区块限制功能
 
 
在V0.15.1客户端当中,允许矿工限制其区块大小的-blockmaxsize 选项遭到了反对,现在这个选项被移除掉了。如果矿工们想要限制区块的大小,他们应使用-blockmaxweight 这个选项。
 
 
中断对Python  2.0的支持
 
 
对于所有测试文件及工具而言,新版本的客户端对Python 2.0的支持已经中断。
 
最后,感谢所有对该版本比特币客户端作出直接贡献的人,也感谢帮助翻译的每一个人。
 
 
原文:0.17.0 Release notes
作者:Bitcoin core开发组
编译:洒脱喜