Testnet:比特币的测试场地

Testnet(测试网)是用于测试目的的测试区块链、网络和货币的名称。测试网是一个完整的实时P2P网络,具有钱包、测试比特币(测试网币)、挖矿以及主网的所有其他功能。最重要的区别是测试网币是没有价值的。

任何打算在比特币主网上投入生产使用的软件开发都可以先在测试网上使用测试币进行测试。这既可以保护开发人员免受由于错误而造成的货币损失,也可以保护网络免受由于错误而导致的意外行为。

当前的测试网被称为testnet3,这是测试网的第三个版本,于2011年2月重新启动,以重置先前测试网的难度。Testnet3是一个庞大的区块链,在2023年超过30 GB。它需要一段时间才能完全同步,并消耗您计算机上的资源。虽然不像主网那样,但也不完全是“轻量级”的

本书中描述的测试网和其他测试区块链不使用与主网地址相同的地址前缀,以防止某人意外地向测试地址发送真正的比特币。主网地址以1、3或bc1开头。本书提到的测试网络的地址以m、n或tb1开头。其他测试网络或在测试网络上开发的新协议可能会使用其他地址前缀或进行修改。

在tesetnet上使用Bitcoin Core

像许多其他比特币程序一样,Bitcoin Core 完全支持在 testnet 上的操作,作为替代主网。Bitcoin Core 的所有功能都可以在 testnet 上使用,包括钱包、挖掘 testnet 币和同步完整的 testnet 节点。 要在 testnet 上启动 Bitcoin Core 而不是主网,您可以使用 testnet 开关:

$ bitcoind -testnet

在日志中,您应该看到 bitcoind 正在默认的 bitcoind 目录的 testnet3 子目录中构建一个新的区块链:

bitcoind: Using data directory /home/username/.bitcoin/testnet3

要连接到 bitcoind,您可以使用 bitcoin-cli 命令行工具,但您还必须将其切换到 testnet 模式:

$ bitcoin-cli -testnet getblockchaininfo
{
 "chain": "test",
 "blocks": 1088,
 "headers": 139999,
 "bestblockhash": "0000000063d29909d475a1c[...]368e56cce5d925097bf3a2084370128",
 "difficulty": 1,
 "mediantime": 1337966158,
 "verificationprogress": 0.001644065914099759,
 "chainwork": "[...]000000000000000000000000000000000000000000044104410441",
 "pruned": false,
 "softforks": [
 [...]

您也可以在其他完整节点实现上运行 testnet3,例如用 Go 编写的 btcd 和用 JavaScript 编写的 bcoin,以在其他编程语言和框架中进行实验和学习。

Testnet3 支持 mainnet 的所有功能,包括隔离见证 v0 和 v1(参见“隔离见证”第 137 页和“Taproot”第 178 页)。因此,testnet3 也可以用于测试隔离见证功能。

测试网络存在一些问题

testnet 不仅使用与比特币几乎完全相同的数据结构,而且它几乎使用与比特币完全相同的工作量证明安全机制。testnet 的显着差异在于,它的最低难度是比特币的一半,而且允许在最低难度下包含一个块,如果该块的时间戳比上一个块晚超过 20 分钟。

不幸的是,比特币的 PoW 安全机制是设计依赖于经济激励,而在禁止具有价值的测试区块链中不存在这种激励。在主网上,矿工被激励将用户交易包含在他们的区块中,因为这些交易支付费用。在测试网上,交易仍然包含一种称为费用的东西,但是这些费用没有任何经济价值。这意味着测试网矿工包含交易的唯一动机是因为他们希望帮助用户和开发人员测试他们的软件。

可悲的是,喜欢破坏系统的人通常会感受到更强烈的激励,至少在短期内是如此。由于PoW挖矿旨在无需许可地进行,任何人都可以进行挖矿,无论他们的意图是好是坏。这意味着恶意的挖矿者可以在测试网络上连续创建许多区块而不包含任何用户交易。当发生这些攻击时,测试网络对用户和开发者来说就变得无法使用。

Last updated