Please note, this is a STATIC archive of website bitcoinsv.io from October 2020, cach3.com does not collect or store any user information, there is no "phishing" involved.
BSV的交易费用经济:矿工和应用开发者指引
by Aleksander Gora
五月 18, 2020 (1min read)
引言 随着越来越多的用户发现BSV网络具备以低费率处理大量交易的能力,以及矿工们发现这条已大规模扩容的区块链具备更强的长期盈�...

引言

随着越来越多的用户发现BSV网络具备以低费率处理大量交易的能力,以及矿工们发现这条已大规模扩容的区块链具备更强的长期盈利能力,BSV网络正在持续发展壮大。这一切使得BSV上正在出现一种新型的交易费用经济,在此情况下,矿工和应用(交易发送者)在面对不同类型的交易时,将拥有更加多样化的费率和服务选择。

随着2020年5月11日BTC网络的区块奖励减半,大量挖矿算力从BTC转移到了BSV。从2020年5月12日开始,一些用户还对BSV网络进行了公开的压力测试,发送了数百万笔的低手续费交易,这其中绝大多数交易都低于默认的交易接受费率(即挖矿费率)0.5聪/字节,这导致了交易在内存池堆积。但最终在5月12日,TAAL公司挖出了一个创纪录的309MB的区块。

近期的这些事件以及BSV上新兴的交易费用经济,为BSV网络的所有参与者提供了极佳的学习机会,向其展示了应该如何更好地利用BSV网络和新型工具。以下是Bitcoin SV节点团队向矿工和需要广播交易的应用开发者提供的一些指引。

一、 为正在BSV上挖矿的BTC矿工提供的指引

首先,如果你最近才从BTC转向BSV网络,热烈欢迎。我们这儿的行事方式有点不同。你当然可以继续维持你在BTC上那样的挖矿方式,但是你的效率会大幅下降,还会错失一些收益机会。以下是一些BSV挖矿技巧:

1. Mining API

首先,如果你的矿池软件使用的是来自Bitcoin Core陈旧的“getblocktemplate” RPC,你在挖大块的时候会遇到麻烦。这个调用返回的数据大小是区块大小的两倍以上,而且大多数都是无用数据,这对于BTC上的1MB区块来说是可以的,但是如果你开始在BSV上挖更大的区块,你的矿池软件可能就会损坏。当然,这也意味着你将失去正在变得日趋重要的交易手续费收入。

在BSV上,我们使用的是“getminingcandidate”`不管区块有多大,它都会给出一个固定大小返回值。要将其集成到矿池软件中相当简单。点击这里了解更多信息:

https://github.com/bitcoin-sv-specs/protocol/blob/master/rpc/GetMiningCandidate.md

2. 把你的上限设置高一些

在BSV上,节点是挖矿基础设施的重要组成部分,可能比BTC世界里节点对矿工的重要性高得多,而正确的节点配置非常重要。Bitcoin SV节点团队给出了以下建议:

节点环境的系统需求

3. 保持良好的连接性

我们使用致密区块进行广播,这是现阶段行之有效的方式,然而一个更好的解决方案也即将面世。当你与其他强力节点相连时,这种方式效果最好。它能缩短广播时间并降低孤块率。请联系比特币协会,他们会帮你联系其他矿工。节点相互连接符合所有的矿工的利益,所以你会发现矿工们愿意互相帮助。

比特币协会联系方式

4. 无需担心孤块

孤块是比特币协议的正常现象,每个BSV上的矿工都会遇到这种情况,但是难度调整可以解决这个问题,没有人会受到真正的损失。因为孤块会使难度降低,孤块损失也因此被抵消。孤块的作用只是让那些连接性更好的矿工可以获得更多的奖励。

只挖小区块通常被奉为避免孤块的解决方案,但在BSV上,这也意味着你会获得比别人更少的挖矿收入。你越早成为区块快速广播的行家,你的收入就会越高,并且你也将发现,即使区块远大于1MB,孤块的风险也依然极其微弱。

5. 实施Miner ID并运行一个Merchant API端点

Miner ID(矿工ID是一种如coinbase字符串一样识别矿池的方法,但它附于公钥之上,不像coinbase字符串那样可以任由矿工伪造。你可以用它保留自己的挖矿历史记录,并使用它来备份你希望公开的信息。从长远来看,Miner ID对你会有潜在的经济价值。

Miner ID索引客户端的构建方式简单易行,你只需修改一行或几行代码就可以将它与矿池软件集成起来。

Merchant API (商户用API为用户提供了一种向你提交交易的便捷方式,但更重要的是,让用户了解你的收费政策。

Miner ID和Merchant API在BSV开放许可(即在BSV上可以免费使用)下都有可参考实施方案。请访问以下地址获取更多关于这两项技术细节:

Miner ID和商户用API beta版本

6. 保持你的bitcoind软件始终为最新版本

Bitcoin SV节点软件正在快速开发之中,性能和韧性都在持续提高。以防万一,我们建议你至少保留两个不同版本的节点软件。但是我们已经发布的版本都是经过了非常严格的质量评估流程,包括在扩容测试网络(STN)上进行实时测试,以及节点团队认可其稳定性之后才发布的。

请在如下地址了解节点软件发布信息:

https://bitcoinsv.io/news/

节点软件相关信息也会由此推特账号发布:@BitcoinSVNode

二、应用开发者(交易发送者)指引

1. 了解收费政策

如果你的应用正在向BSV网络发送交易,你应该具备发现费率的意识,请确保你了解不同费率标准在整个BSV网络中的含义。比特币上的交易并非处于“会被打包”或“不会被打包”这种非此即彼的状态,而是会受到一系列变量的影响,如交易被打包的预计耗时、交易双花保护的程度(如果这对你的应用很重要)等。好消息是,了解费率所需的信息现成可用而十分可靠。BTC或任何其他比特币分叉链都无法做出这样的承诺,因为这是一项BSV近期的开发,只有BSV上才可用。

2. 使用Merchant API(商户用API)来提交交易

BSV的点对点网络性能十分优异,但也不是完美无缺。目前BSV网络上大约有300个端点,大部分是BSV程序实例,但估计其中只有100个在真正发挥作用。这意味着在高负载的情况下,配置欠佳的比特币全节点(bitcoin daemons)会阻碍交易的广播。除非你与一个矿工直连,否则你不能保证自己的交易被送至矿工。Merchant API解决了这个问题,它使你能够绕过无用的端点,并使用简单的REST API命令向矿工直接提交交易。如果你的交易满足他们的报价费率,矿工肯定会在打包下一区块时接受你的交易。你甚至可以从矿工那里得到一个签名回复,表明他们准备把你的交易打包入块。

这不需要你与矿工有任何特殊的关系,Merchant API最初的设计意图就是成为一个公共端点。

Merchant API为早期使用它的矿工提供了巨大的帮助。下一版即将发布的Merchant API将包含聚合服务,这将有助于用户获知收费政策的适用范围,并了解特定费率对应的服务水平。还能帮你向矿工发送交易并从矿工那里获得相同的接受交易的签名回执。

在与BSV网络进行交互中,你有一系列选择,比如一些矿工会为大客户提供特供费率。但是,Merchant API将始终支持公开可用的默认费率,此外也支持直接向点对点网络进行广播的选项。

3. 如果可以的话,使用SPV(简易支付验证)

比特币白皮书第8部分描述了简易支付验证。当我们发布下一版Merchant API时,SPV将变得更加易于实现,在这次迭代中将实现默克尔树证明回调(merkle-proof callback)。与此同时,你可以从Bitcoin SV节点软件中获取默克树证明作为临时解决方案。

许多应用现在正在运行BSV节点,但实际上他们并不需要这么做。这是Bitcoin Core思想的遗毒,是他们一贯的行为方式。随着应用规模的扩大,运行比特币全节点的成本将显著增加,如果可能的话,切换到SPV应用模式才是真正的经济需要。

4. 除非你真的需要,否则不要运行bitcoind;如果你在运行了的话……

Bitcoind所提供的服务不仅仅是构建区块,但是许多人对它都大材小用了。请记住,Bitcoin SV节点团队主要考虑的用户群体是矿工,我们基于此项考虑而做出相应的工程决策。这意味着我们在设计时可能没有考虑到你这样的交易生产者或者应用使用案例的情况,并且我们总是假设软件将在配置良好的机器上运行。

5. 在最小化模式下运行

如果你需要运行bitcoind,可以考虑在“blocksonly”模式下运行,不要去维护交易内存池,这可以显著降低软件负载,并减少内存和带宽需求。但是在交易在区块中得到确认之前,你不会看到交易。请注意,此行为的代价是你的连接可能被其他比特币全节点降低优先级,因为它为网络的其他参与者创造了不必要的负载,却未提供任何有益回报。

如果你需要监听未确认的交易,可以考虑使用ZeroMQ接口来获取交易流,然后在你自己的数据库或软件中进行处理。如果你这样做,你可以设定一个小得多的交易内存池上限,因为一旦你从ZeroMQ读取了交易之后,就不需要Bitcoin SV节点软件来保存交易了。

6. RPC

如果你正在使用RPC调用,当网络非常繁忙时,请注意特定的调用是否会产生数据量巨大的响应。如果会产生这种响应,要么请确保你的软件能够将这些响应作为流进行处理,否则请使用另外的方法来获取这些数据。

BSV网络可以处理的大量数据,而RPC接口从来都不是为此设计的。我们已经对它做了很多改进,但是有些调用仍然会导致负载过高。但这仅仅是因为我们没有以此为目的而进行设计而已,而且有比RPC更好的方法来获取大多数信息。

7. 在扩容测试网络(STN)上进行测试

扩容测试网络(STN)是为你在高负载条件下测试应用而存在的,从而确保你的应用能在压力下平稳运行。在STN上长久地运行BSV可能会很昂贵,因为我们模拟了一两年后主网上可期的网络状况。但是,你无需让你的程序实例永久在线。如果你在运行测试所需的几天时间里运行一个64GB内存的虚拟机,那么成本是可以控制的。和STN的运营经理Brad聊一聊,他可能会给出其他的建议来测试你的应用。更多信息,敬请参见:

https://bitcoinscaling.io/

写在最后

BSV网络正在经历一个快速蜕变的过程。网络的起始状态是一个网状网络(mesh network),这样的网络中有许多无用的节点,用户的交互过程也十分艰难。我们现在正在朝着一个更接近中本聪所描述的那种状态发展着,那种状态下的网络核心由紧密连接的高性能节点组成,而用户则在边缘(通过简单的接口)进行交互。

这个模型带来了更简单、更可靠的用户体验,同时消除了节点上许多不必要的负载,这样节点就可以专注于真正的工作。扩容架构的核心原则是“不要做你不需要做的工作”。这正是我们正在努力实现的中本聪原则下的“点”与“点”直接进行互动,而不用通过中间人。

这种转型不可避免地会伴随成长的烦恼,因为参与者会慢慢抛弃一些陈旧的行为方式,这些都是10年来对比特币运作方式的错误认识而导致的根深蒂固的行为。但是BSV生态系统正在让这一切迅速地转变。

我们在短时间内取得了长足的进步,但关于网络的核心和边缘方面还有更多的工作要做。我们希望以上的这些指引能够帮助你找到使用BSV网络最有效且最有收益的方法。

Guides-zh