测试网

来自非小号百科

在区块链技术中,测试网(testnet)是一个由与底层软件相同或更新版本的区块链实例构成的网络,用于测试和实验,且不会对真实资金或主链造成风险[1]。测试网代币与官方(主网)代币是独立且不同的,没有实际价值,可以通过水龙头(faucet)免费获得[2]

测试网允许在没有资金损失风险的情况下开发区块链应用[3]。在比特币核心软件中发现了一个漏洞,使得矿工能够通过向区块链发送“坏区块”来摧毁比特币基础设施(节点)的重要部分[4]。这个网络与比特币的主网络(也称为 Mainnet)非常相似。这使得应用开发者或其他想要进行比特币测试的人能够在不使用真实比特币或担心破坏比特币主链的情况下进行实验。

虽然测试网与主网络相似,但它们并不兼容,这意味着你不能在测试网上使用代币,也不能在主网上使用测试网的币。测试网有自己的一套币,也称为“测试网币”。这些币没有任何实际价值,也不能进行交换。然而,这些币可以用于进行测试交易,确保测试按预期进行。

测试网的重要性在于,开发者和其他程序员可以在此实验新的代码和解决方案。通过这样做,他们不会“干扰”比特币主网络,也不需要使用有实际价值的比特币。更重要的是,如果提出的代码更改出错,它不会影响比特币主生态系统。测试网是分析新改进如何在比特币主网络中工作的理想场所,因为它是一个非常相似的网络,具有相似的规则和操作方式。在将任何更改部署到主网版本之前,它会先在测试网上进行实施,观察结果而不会带来重大后果。这也是为了测试将集成到比特币中的工具,验证这些工具是否能进行交易并与集成代码正常工作,确保代码在与真实比特币交易时完全功能正常。

主网与测试网的区别[编辑 | 编辑源代码]

  • ADDRESSVERSION参数:测试网使用与比特币主网不同的值。在比特币中,使用的是0x00,而在测试网中使用的是0x6F。这个参数决定了地址的格式,因此测试网的地址与比特币主网的地址不同,这使得它们能够在视觉上被区分。
  • 创世区块(Genesis Block):测试网使用与比特币主网不同的创世区块。创世区块是区块链开始创建的地方。
  • IsStandard()验证:比特币代码中的IsStandard()验证在测试网上是禁用的,这允许在测试网上实验新的交易和新的想法。
  • DNS种子:在测试网的初期,它使用不同的DNS种子。
  • 地址格式:测试网的地址不以“1”或“3”开头(像比特币主网的地址那样),而是以“m”或“2”开头。
  • 协议消息头:测试网的协议消息头是0x0B110907,而比特币主网使用的是0xF9BEB4D9。
  • 节点端口:比特币程序是一个对等网络(Peer-to-peer)节点,需要与网络中的其他节点通信。默认情况下,它使用计算机的8333端口,但在测试网模式下,它使用18333端口,以便在同一计算机上同时操作两个模式。
  • 最低难度:测试网的最低难度为1.0,相当于比特币主网的0.5难度。这意味着,测试网上的任何难度与比特币主网相比,难度是主网的一半。此外,如果20分钟内未找到区块,难度会自动重置。
  • RPC协议端口:比特币程序也允许与其他程序进行通信,使用RPC协议的端口。默认情况下,测试网使用18332端口,而比特币主网使用8332端口[5]

版本演变[编辑 | 编辑源代码]

目前,比特币的测试网已经发展到第三个版本,也被称为Testnet3。在比特币早期的第一个测试网(Testnet1)中,出现了意料之外的情况:测试网的币开始获得价值,并被用于与真实货币或比特币的交易。于是,开发者决定创建一个新的创世区块,Testnet2由此诞生。然而,Testnet2也存在问题:挖矿复杂度逐渐提高到需要较高成本的程度。

2012年以来,Testnet3开始运行。Testnet3的特点是可以在必要时自动重置挖矿难度,从而解决了之前版本中的问题[6]

2015年12月21日,SegNet部署上线,用于测试由Pieter Wuille提出的隔离见证(Segregated Witness)提案[7]

测试网币[编辑 | 编辑源代码]

尽管测试网币与比特币几乎完全相同,但如前所述,这种货币没有任何价值。这是因为测试网币非常容易获取。它的设计初衷是为开发者提供一个可供实验的环境,而无需承担经济损失。测试网币可以通过测试网中的水龙头免费获取,这些水龙头是专门为测试目的提供免费代币的地址。此外,测试网币也可以通过低计算成本的方式进行挖矿。

在Testnet3中添加了一些不同于比特币主网的机制。测试网被设计成当由于复杂性导致区块无法被挖出时,挖矿难度会自动降低到非常低的水平,使挖矿变得容易。

从主网和测试网的区块链浏览器中获得的图表可以看出两者在计算难度上的差异。在测试网中,挖矿难度的峰值大约在60兆字节范围内,并会周期性地降低到接近0;而在主网中,挖矿难度约为5.5太字节,并且趋势是持续上升。

创世区块[编辑 | 编辑源代码]

测试网使用了与主网不同的创世区块。测试网络 Testnet3 在重置时创建了一个新的创世区块,并释放了 0.7 个比特币作为起始区块奖励[8]

区块链大小[编辑 | 编辑源代码]

如前所述,测试网(Testnet)的区块链与主网(Mainnet)是独立的,但其活跃程度远不如比特币主网。目前,比特币区块链的大小接近 182 GB,而测试网的区块链仅略高于 19 GB。如图表所示,测试网的 2100 万硬性限制即将被发行完毕,而比特币主网预计要到 2140 年才能完成。

造成这一差异的原因在于之前提到的 Testnet3 功能:当挖矿难度增加时,它会自动重置,从而允许更多区块在更短时间内被开采。这显著降低了平均每个区块的时间。例如,在比特币主网中,开采 100 个区块可能需要大约 1000 分钟,而在测试网上,这一过程可能仅需要 100 至 200 分钟(这一估计基于图表的观察)。

当测试网的 2100 万硬性限制完全发行后,预计将会启动一个新的测试网 Testnet4。因为测试网的目标是始终保持没有实际价值,并不断生成测试币,供开发者用于改进比特币及其生态系统。

水龙头(Faucets)[编辑 | 编辑源代码]

测试网的水龙头与主网的水龙头有所不同。在测试网上,水龙头会故意提供测试币。一旦你使用完这些测试币,将它们返还给提供测试币的水龙头是一个良好的行为,这样其他开发者也可以使用这些测试币。

以下是一些测试网水龙头的例子:

回归测试(RegTest)[编辑 | 编辑源代码]

比特币核心软件(Bitcoin Core)在其默认配置中还包含另一种网络,称为 RegTest(回归测试),可以通过命令行参数启动:

bitcoind -regtest -daemon (比特币服务器启动)[9]

RegTest 是 Bitcoin Core 0.9.0 版本中新增的功能,于 2014 年 3 月发布,作为一种替代测试模式而创建。

该网络可用于创建具有与测试网(Testnet)相同特性的区块链,但仅限于用户选择的节点之间运行。也就是说,通过这种模式可以创建私人区块链,并在完全可控的环境中操作[10]

漏洞[编辑 | 编辑源代码]

在测试网上曾成功进行了一笔双花交易,其中 0.1 BTC 被复制并被双重消费。具体而言,0.1 BTC 被复制为花费 0.099 BTC,同时支付 0.101 BTC 的费用,最终变成了 0.2 BTC[11]

在比特币核心软件中发现了一些漏洞,这些漏洞可能允许矿工通过向区块链发送一个“恶意”区块来破坏比特币的关键基础设施(节点)[12]

在比特币网络中发现了一个漏洞,该漏洞可能被利用来人为增加比特币的供应量。后来,这个漏洞被复制到测试网上,显示它可能被用来改变比特币的整体货币政策。

参考链接[编辑 | 编辑源代码]