发表时间:2020年9月16日
信息来源:Bitcoinsv.io
本次发布的Rails代号的Bitcoin SV节点软件v1.0.5引入了一些开发许久、具有革新性的功能。这些新功能包括:
默认激活Journalling Block Assembler
批量提交交易
免费合并交易
以Rails为代号是因为这次升级版本的主要特点就是利用Bitcoin SV协议和账本开启新式创新型支付使用情境,从而促使Bitcoin SV的应用公司去创建更多为支付提供服务的基础设施——“支付轨道”,即英文的“payment rails”。
上述三点中的最后一点,是我们在本文中要重点讨论的。
过去,一些BTC开发者基于他们对比特币网络所有参与者的责任感,引入了一种称为“粉尘限制”的保护机制。我们姑且不谈开发者这种“家长式”的心态正确与否,如今粉尘限制依然存在,且矿工们默认执行该政策。最初制定这种限制是为了防止人们进入一个特定的陷阱。
举例,一个典型的比特币交易如下:
在这个交易示例中我们注意到:这笔交易的支付价值(以satoshi为单位)与交易费(fee)用相比非常大——以今天的货币价格衡量这笔交易的支付价值约为11美元,而交易费用却不足1美分。只有低级的交易费才能使微支付(micro-payment)成为可能,没人愿意将他们交易中的一大部分资金价值作为交易费;但当交易费极低的时候,想进行一笔1美分的支付也变得十分可行。不过为了使微交易具有经济上的合理性(有经济意义),我们需要有一个比1美分更低一些的交易限制,当突破这个限制时,你可以有效地使一些satoshi无法使用。
在上面的交易图示中,我们通过在现有交易中加上一个很小的10 satoshi的输出值,尝试超越微支付,进入我们称之为“纳米支付”(nano-payment)的领域。这种情况下,粉尘限制通常会开始起作用并阻止交易进行,因为在我们已经习惯的比特币的标准收费政策下,花费这个输出所需的费用将高于这个输出值本身的价值(10 satoshi)。从经济角度看,除非我们等着并期待着Bitcoin SV价值大幅上涨,并且同时以satoshi计价的交易费用同比例下降,否则无论如何,把那10 satoshi的输出值注销永远比花掉它要划算得多。
支付信道(Payment channel)是一个众所周知、能够渐进地进行价值交换的机制,但是每次交换的价值量极小,这在比特币交易中可能就不经济了。不过,这可以解决。
一个比特币交易中通常包含多个输入(input)和输出(output)。当一个新的交易被网络接受时,前序交易的输出(在这个新交易中被引用为输入)将从UTXO数据库中删除,而这个新交易的输出将被新增进UTXO数据库。因此当一个新交易被网络接受时,UTXO数据库大小(以离散的信息项目衡量,而不是字节来衡量)的净增量可以表示为:
uxto_delta = nOutputs - nInputs
(译者注:UTXO增量=输出个数-输入个数)
从矿工的角度来看,UTXO数据库的大小十分重要,因为数据库越大,维护它的成本就越高。虽然交易费的增加可以抵消上升的成本,但尽可能地削减UTXO集合依然符合所有矿业公司追求经济利益的原则。“合并交易”概念的引入,将使交易具有较多的输入,较少的输出,因此uxto_delta(UTXO增量)基本上为负,从而收缩UTXO数据库。从经济角度来看,由于这种操作使矿工可以有正向盈利,因此让矿工允许这种零费用交易(译者注:此处指免费的合并交易)存在是有可能的。
通过合并交易,我们不仅将使许多现有的粉尘UTXO重新变得有用,而且还开启了一些新型且强大的应用案例,这些应用在之前的“粉尘限制”下是不可能实现的。
在上面的图例中,我们看到一个普通交易和若干个价值10 satoshi的输出。交易接收方只需收集足够数量的低价值输出,并且满足“免费合并交易”的标准,就可以将这些低价值输出作为一个新交易的输入集合,通过合并交易转换为一个的更高价值的输出(译者注:上图的中间交易就是将1000个价值10 satoshi的输出,通过免费合并交易,转化出10000 satoshi的单一输出)。在上图示例中,通过合并交易UTXO的数据库减少了999条记录。可能有人会反驳,这些小额UTXO在交易合并模式不可行的情况下也无法产生——确实如此。然而即使我们忽略清除粉尘UTXO的好处不计,“免费合并交易”好处还有能够使UTXO集的整合净成本降为零,并能够促进更具灵活度的新实用范例的涌现。
当可以使用1 satoshi来为一次服务进行付费时,我们可以如何利用这种支付能力呢?这就是那些拥有创造力的大脑需要去探索的了!这里有一些纳米服务可用在比特币网络常规操作的举例:
向某一特定矿工支付一些satoshi,当某个交易被打包进区块时,让矿工向你返回交易的merkle证明(无论这个交易是否由这个矿工打包入块);
向某一特定矿工付费,让其监控双花并及时通知你;
向paymail钱包运营商/服务商支付服务费;
付费给一个信道服务器,让它在你离线时存储并转发你的信息(及更多功能);
支付保费或由专业的多签账户托管人进行会签。
基本来说,任何一项与经济交易有关的服务都可以用这种方式进行支付。请注意这里必须要将纳米支付(nano-payment)依附于一笔已知的、进行价值转移的交易,且这笔交易的手续费超过网络默认标准。
支付信道是应用纳米支付的一种非常有效的途径,可将纳米支付应用于许多场景中。支付渠道只有在预期结算金额超过交易费用时才对纳米支付有用,但它允许等量小额的价值增量逐步转移到合并交易中。这对于你想重复使用同一纳米服务(nano-service)时是有用的,但我们需要考量如何在实现的复杂性中进行权衡——因为合并交易还有一个特别之处,它可以作为某种特定服务的一次性交易,而无需与交易对手建立类似支付信道的关系。因此现实中应用这两种方法中的哪一个更合理,应根据实际情况逐一评估。
与提高“OP_RETURN(操作码)限制”的早期阶段一样,让网络接受粉尘交易在将在初期遇到一些障碍。回想当初,要找到能够支持提高OP_RETURN限制的节点,并且在这些节点之间建立起传播OP_RETURN交易的路径需要付出很多努力。这个过程持续了一段时间,但随着时间的推移这些限制逐渐变得被人信任,直至被全面采用。“粉尘交易”也将会是一个类似的演进过程,但是mAPI(Merchant API,也称商户用API)将会加速这个进程。
首先,粉尘输出(dust output)的产生仍然在一定程度上受粉尘限制(dust limit)的制约,但是粉尘限制在今年底之前就会被完全移除,甚至允许输出值为0。与此同时,v1.0.5节点已经将粉尘硬性限制修改为一个基于矿工可设定的转发费率(relay fee)的函数,这意味着升级节点至1.0.5版本的矿工应该接受值大于140 satoshi的输出。
在矿工们广泛部署这个版本的节点软件之前,“粉尘限制”仍然是阻碍这类交易传播的因素,这意味着你不应该假定这类交易与其他非粉尘输出的交易有着同样的“零确认”安全系数。但对于“零确认”根本不重要的应用场景,你现在就可以使用这个功能了。
其次,对于非零确认的使用场景,一旦mAPI支持这些交易,点对点(p2p)传播模式就可以被完全绕过。这将是计划于10月发布的mAPI 1.2版本中的一个新功能。一旦你将mAPI-v1.2与Bitcoin SV节点软件v1.0.5相结合,你就可以直接向矿工提交粉尘输出交易和合并交易了。
如果让Bitcoin SV节点软件认定一笔交易为合并交易,那么这笔交易必须满足一些严苛的标准。nChain和节点团队已经做了一些详尽的研究来制定这些标准,以确保该机制是严谨的。我们曾因过度谨慎犯过很多错误,因此未来这些标准有很大的放宽空间,但目前来说,在现行标准下构建合并交易是十分简单的。
合并交易指的是能够使由UTXO数量减少、且在网络层面UTXO集缩减所带来的价值高于潜在交易费价值的交易。这时,我们将允许这类合并交易免付交易费。
一个合并交易需满足的条件如下:
输出将被引用于合并交易的那些交易的scriptPubKey大小之和,必须大于合并交易的scriptPubKey大小乘以合并系数的值(配置合并系数参数:minconsolidationfactor)
合并交易的输入数量必须大于交易输出数量乘以合并系数(minconsolidationfactor)
所有输入的确认数必须达到minconsolidationinputmaturity及以上
合并交易的scriptSig大小(字节长度)的上限为maxconsolidationinputscriptsize,以防止垃圾信息。
如果AcceptNonSdConsolidationInput等于0,则用于合并交易的输入必须满足isStandard()的旧测试
maxconsolidationinputscriptsize的默认值为150字节
minconsolidationfactor的默认值为10
minconsolidationinputmaturity的默认值为6(相当于一小时)
AcceptNonsdConsolidationInput的默认值为0,表示只允许标准化的输入
将minconsolidationfactor设置为0将禁用免费合并交易功能
以下为条件公式:
c = minconsolidationfactor
m = minconsolidationinputmaturity
s = maxconsolidationinputscriptsize
a = acceptnonstdconsolidationinput
isFree = nInputs >= c * nOutputs
&& confirmationCount(input) >= m for all inputs
&& sum(inputTxScriptPubKeyBytesLen[]) >= c * sum(outputTxScripPubKeytBytesLen[])
&& inputTxScriptSig <= s for all inputTxScriptSig
&& isStandardInput(input) for all inputs unless a == 1
以下是一般通用的规则:
至少合并100个以上的输入到1个输出;
仅使用标准的p2pkh输入,或使用不超过2个签名的裸多签;
仅可以使用超过6个区块确认的输入。
这个规则可以通过以下操作绕过:你可以使用现有的全部输入构建一个合并交易,但是在6个新区块生成后再广播这个交易
遵循以上规则,你就能完全符合“构建合并交易”的严苛标准。如果合并交易不符合标准,那么最坏的情况也就是你收到一条“too low fee(交易费过低)”的信息,这时你进行调整后再次尝试即可。
现行的一套交易费定价模型最终将由矿工来决定,并由市场力量来检验。这次新推出的模式是为了示范交易费限制被解除能够激发的可能性。Bitcoin SV节点团队非常期待看到应用纳米支付的创新模式。
Bitcoin SV节点项目为比特币协会所拥有,请前往Bitcoinsv.io网站获取BSV节点的官方信息。