当前位置:首页 > 比特币新闻 > 正文

为快速验证区块,Bitcoin Unlimited的推荐参数设置

来源: 互联网时间:2016-12-12 15:41:00

因为源代码会引发超线性交易确认时间,因此区块验证会消耗大量的时间和处理力。通过新型的交易格式可以解决这一问题,但是同时我们也应该为此做些什么,特别是越大的区块意味着越多的交易并且是呈指数型(英语中代表所有包含指数的方程式,并不单指数学中的e^x)增大。

bitcoin

Bitcoin Unlimited会整合一种我们称之为“并行验证”的技术,该技术允许小型或者验证快速的成员区块取代大型或者验证缓慢的区块。这种有竞争性的技术方法将会使大型区块被孤立,矿工转而青睐较小的区块。然而,这是非常有意义的,它可以通过涌现共识的方式阻止极端的大区块和“成本极高的交易”(译者注:这里的成本极高的交易在原文是costly transactions,意指验证和广播成本很高,比如曾经就有人恶意构造输入和输出数量量非常大的交易)。

现行的软件试图用Sigops来解决这一问题。但是,sigops并不能拿来这么用。我们来用比特币的RPC的“建立原始交易”的API,来构造两笔交易来阐明一下。第一个有一个输入和10000个输出,第二个有10000个输入和一个输出。交易1的统计数据如下所示:

输入: 1, 输出: 10000
大小: 340126 bytes
计算的 sigops: 10000
实际的 sigops: 1
sighash: 340092
确认时间: 125ms

交易2则完全不同

输入 10000, 输出: 1

大小: 1474955 bytes

计算的 sigops: 1

实际的 sigops: 10000

sighash: 4100750000

确认时间: 394725 ms

可以看出,计算出来的sigops与实际上的sigops正好相反,确认时间也比计算出sigop是1的交易要长,比计算出sigops是10000的要短。

当确认一笔交易时,比特币客户首先使用输入然后再使用前一笔交易的输出(称之为未花费的输出)。换言之就是这笔输入是上一笔交易的输出。签名指令需要在前一笔输出时保证签名确认已生效(除非你在用P2SH-STYLE TX-THE 3XXXADDRESSES)。

当然,签名操作在此次交易中的输出并非使用在此次交易确认中。他们会在下次交易输出时使用。因此signop计算码包括并没有关系的签名操作,并且忽略了有关系的签名操作。

交易验证的代价到底是什么呢

下图描述了“正常”交易中不同值的输入和输出的确认时间。该数据使用AMD 6-core 3.2 Ghz (红) and Intel 6-core 4.0 Ghz (绿)收集。纵轴代表的是以毫秒为单位的确认时间,左边横轴则是输出量,右边横轴(深度)则是输入量。

1-iE5wsUQlI_ne6A98fvPsEg 交易从1-2000输入和输出的交易确认时间

为了使超线性上升的更明显,下图是N个输入与一个输出(蓝色部分),以及一个输入与N个输出(橘色)的交易

1-V9xVP3IKH0npzLjCeqLzKw

显而易见是输入导致了非线性的行为结果,而不是输出。但是我们可以根据这些数据填出一道曲线。现在我们来假设一个二次式数学模型(i.e. ax² + by² + cxy + dx + ey + f):

结果如下

X= # inputs(输入), Y= # outputs(输出)

模型是: 0.004174*x^2 + ­0.000008*y^2 + ­2.435706*x +0.136400*y + 0.001659*x*y + 879.778020

-0.000008在此次数据收集中(0-2000 输出量)近乎可被当作0。因此不管是从数据分析还是从图表分析,数据在输入量中都很像二次方程式而在输出量中则偏于像直线。在这个非正式的报告中我不会做正式的误差分析,因为我们不会直接用到这些常数,但是在3D图表中,你可以看到模型1(红) 合理地阐释了实际数据(绿)的趋势。在N个案例极限1中的第二个推测,似乎因为常数而跳离。

1-UqD0cUFdG4iJIgCojVtR0g1-5RDtdnow0xIgUlXYD7RKmQ

我们如何解决这一问题呢

从上述图形中我们应该清楚地认识到输入值作为估算优于交易中的signops。 但是这个数据仅限于简单交易。 我们知道有些输入需要多重签名。理论上说,我们必须算出sigops。然而,照这样做的话我们就需要进入之前所有的交易。而从实际的立场上来说,这些交易对进入Satoshi 客户资源码来说比较困难。Satoshi仅仅只是对现有活动区块链顶部的UTXO较得心应手。但是我们需要可以对任何区块或交易都能进行估价。

因此我们不能看之前的输出就决定正确的signops。然而,自从比特币脚本语言不允许循环封闭后,每个签名都必须在输入脚本之中。 这就意味着输入脚本的长度是sigops的代理模式。 我们也知道交易是如何确认的,每个OP-CHECKSIG都标记一个完整的交易(输入和输出),并且检查签名与散列数据的竞争。

因此一个合理的预测是

交易成本=输入体积大小*总体积大小(transaction effort = length of all inputs * total length)

区块成本=总交易成本(block effort = SUM(transaction effort)

(译者注:本文大量出现effor这个词,目前我把握不准应该译成什么更好,暂时译成“成本”,原文的length从上下文推测来看是指输入和输出数量的多少,所以我译为“体积大小”,而不是字面上的“长度”)

当然总体积大小是输入和输出体积大小的总和。因此这个等式也可以改写成

交易成本=长度(输入)^2*长度(输出) (transaction effort = len(inputs)^2 * len(outputs)

因此这个估算与我们从数据提取出的模型是非常相似的。它提取了二次的输入特性和XY项。同时忽略了线性效应,不过这些并不算重要。

我准备用“更大区块”(EB)这个度量标准来计算出区块大小和大于1MB区块的交易数量。 我们会提供“每MB 大小成本”这一配置参数。每MB区块成本大于这一参数的会被视为大区块。

对于1M 或更少的区块,Bitcoin Unlimited会继续执行现行规则。 在这一分歧之后,我们通过保持与旧交易的兼容性,继续允许小于1MB区块适应于旧规则。即尚未提交的交易仍然可以提交。这样也可以使代码简单化。区块/交易尺寸估算代码并不需要外部信息和区块链描述表。通过一个区块或大交易或观察该对象即可得出。

让我只用区块尺寸来解释一下这项规则。这不是一个传统的分叉共识规则,因此如果规则被破坏或者其他客户使用其他的标准,也不会产生区块链分叉

所以它用了“涌现共识”算法。 这种算法有很多好处: 这可以使未来改变规则更加简单,即旧区块不需要遵守这一规则,而是只需严格遵守一个比特币区块链这一规则即可。但是涌现共识算法的细节不在此文论述范围。

最后一个问题就是在Bitcoin Unlimited中,缺省值该如何在“更大的成本”中体现呢? 在下部分的描述中, 我会引用每MB150,000,000,000的价值。这个数字的大小并没有太多的意义,但是这个会直接导致在现代处理器中每MB约10秒的确认时间。 装有ARM处理器时间会更久点,但是估算会被完好的保存。同我如下说明的一样,确认时间也会比今天区块链中最坏的情况下的区块的确认时间更少点。

这对区块链意味着什么呢?

 

我们可以计算出现今在比特币区块链中所有的区块,并且通过“成本”由大到小进行检索(请参见本文后面附录)。

所有的这些区块都包含一个难以确认的交易。这些交易从350KB到1MB,所以并不是很多交易都可被填入一个区块。这意味着一个有350KB交易的区块会花较高但又是在合理范围内的每MB 30秒时间来确认。 因此如果以后我们阻止100/175,100/195,100/742这种的交易的话(他们的00005708%),我们自己也可以解决这个问题。

这些花费较高的交易似乎更像是“垃圾粉尘”交易(我查阅了很多但并非所有交易,如果有如何出入请联系我)。但是,据我所知,将一个粉尘交易拆分成几个小交易是没什么问题的。

附录:“成本”最高的区块

区块(block) 哈希(hash), #交易(# transactions), 最大tx体积(max tx length), max # vin,

max # vout, block cost, max tx cost

block hash, # transactions, max tx length, max # vin, max # vout, block cost, max tx cost
('000000000000000003dd2fdbb484d6d9c349d644d8bbb3cbfa5e67f639a465fe', 2, 999657, 5569, 1, 999268159512, 999268133427)
('000000000000000000283e9409575c2426cd72fcb722065431c52b5083e5bb58', 2, 999651, 5569, 1, 999243168477, 999243142392)
('00000000000000000d63417949af6653756d975f5e60cacff162303efcc41f3e', 2, 999622, 7350, 1, 999222177285, 999222151200)
('00000000000000000671d60be5c9439be636a4e00f50c33141ded6a29f816cbc', 2, 999621, 7350, 1, 999221177685, 999221151600)
('000000000000000003104258b4af9f6362b9e37cff80a25f521ee222a393330c', 2, 999634, 5569, 1, 999209181635, 999209155550)
('0000000000000000058319fa2282779aada74b249369ecf9baa7ffaed3e11fb0', 2, 999611, 5569, 1, 999163200357, 999163174272)
('0000000000000000030efd6441dc3520878727dc7c195aa3a268f33f41a344e4', 2, 999608, 5569, 1, 999157202877, 999157176792)
('00000000000000000c17f800899d77056a61e0ec5a47402e61eba00ee621ba9f', 235, 926262, 5160, 6, 857932538512, 857906643186)
('0000000000000000094b3d68fe7004b683c55aa40b6fb0e633d3f31105bf0831', 346, 897599, 5000, 20, 805660561281, 805631006460)
('000000000000000008360c45209d17a47fc4ae9c580e519323c4c7b9b2a6ab58', 371, 897564, 5000, 9, 805603866660, 805568177820)
('00000000000000000286409e3efb3e7c0653be26472f19089dbee4861f08e0ad', 119, 886617, 4925, 9, 786424716789, 785988630351)
('0000000000000000113ba2a64fdfd175223ba3c3fccd02f3673a92d2303d4d3b', 165, 883773, 4909, 11, 780984714454, 780953965407)
('0000000000000000117527da7d5c18cb03e3486b40409acef382be70a7480d69', 207, 854331, 4746, 12, 730140672352, 729813111081)
('00000000000000000efc700678729b24309c9a5dfae8c6965c3a493b690f531c', 338, 842481, 4680, 74, 709740975337, 709706836881)
('000000000000000003777900d8512b213aa30c1f830c867bc0b09d55796a6041', 489, 842079, 4691, 51, 709127971391, 709047359580)
('00000000000000000528f81f5641d0c240176fbfe2a9bc5e92ce06124bfc5224', 279, 840022, 20000, 39, 705963364464, 705618480000)
('0000000000000000008368a5c59bf755abd9d967370fe7c7a1c2929684e7e8a2', 273, 840022, 20000, 13, 705918102321, 705618480000)
('000000000000000011c34837a74038b730edeaefd3a158d0ba0e1e1390f5c220', 281, 840219, 4667, 10, 705914181075, 705872182995)
('0000000000000000053bceb058c6e8fae9efd0c17746e6c845f89ef1d97893f8', 260, 840022, 20000, 51, 705859962311, 705618480000)
('00000000000000000bef938ebe4f04049206995fca611c78692606db3871b04c', 376, 840022, 20000, 21, 705810617110, 705618480000)
('00000000000000000b8d631639b0dd7ea223f2efc46fc9ab0992f7d612e29c25', 368, 840022, 20000, 101, 705791298560, 705618480000)
('00000000000000000e17bc7ba14fc16897a41cb1b2f0b89ddbad2cfe30184a61', 423, 840022, 20000, 16, 705790914100, 705618480000)
('000000000000000005780446bbdddfff6e547ab83d39b237ec0f1440ff9af45f', 346, 840022, 20000, 16, 705743934757, 705618480000)
('0000000000000000096aa43cd0d602b704bfa23f620141eea4006f179d40ce08', 477, 840022, 20000, 11, 705720326435, 705618480000)
('000000000000000012ea0ca9579299ec120e3f57e7c309216884872592b29970', 420, 840022, 20000, 6, 705681723837, 705618480000)
('000000000000000007c5ace173341f0bcdfe3a8edcecfb7c23d3336829a2bf80', 253, 839406, 4663, 74, 704772458086, 704535280356)
('0000000000000000063e5b9d30e49596fe2219b0decfcf694f00653fc661fa38', 266, 837794, 4654, 21, 701945523339, 701831762916)
('00000000000000000d86f6cc57eae1f167321c3650bb238944712dd4e2a1efb0', 188, 832508, 4625, 8, 693811660588, 692974664152)
('00000000000000000ec68dc67c0bde9fab8502f95c2bc8894f42959ddffb179a', 278, 831095, 4617, 36, 690825131965, 690652411425)
('00000000000000000d60936f7885c4407e0e18a4a9e02bfc97b417d06637f2e0', 394, 828552, 4603, 14, 686526538402, 686432132544)
('000000000000000002d10761a51dd948b52af03cc758aa37f15dd14761968a86', 45, 811536, 4507, 5, 659541991519, 658442979744)
('000000000000000009327d9cd32c82b78b23f877c82587cfb4d1142e6433cd57', 224, 796238, 4423, 21, 634073229246, 633931253604)
('000000000000000009a07b761b0239baf86a3449e25f842a37bc604628e7e87a', 509, 789537, 4386, 13, 623377439128, 623305511409)
('000000000000000002a8571bee11074e33021e594b8909d23f28aa2ec6a03d92', 527, 787898, 4377, 12, 620771768498, 620720226564)
('00000000000000000d9fa4313b005a54db9242295b5c4ca193f6b676b6069295', 323, 782696, 4348, 151, 613085446559, 612550412736)
('000000000000000008fc403e02c73b32a5b6139bd2e4debabdc8df9ba180232d', 299, 773527, 4297, 16, 598527747893, 598308437487)
('00000000000000000872231d0d3d402e5dddd30711fdb19f242fd7c59a7f57c6', 430, 772964, 4294, 15, 597485956914, 597411508176)
('00000000000000000596cff56060b95758fb6e77f5d0fbf87e5b83989e76be45', 370, 761938, 4233, 9, 582014941473, 580488560804)
('00000000000000000ad13642532640c520abfede7f16d80922277471013abb09', 421, 761037, 4227, 12, 579504571396, 579116432409)
('000000000000000008cb5666ad253b9308c0c11a581b354f25a76d0effe94f35', 208, 755955, 4199, 21, 571719356275, 571330378215)
('0000000000000000063649fc8894f697fc58c7b7d87918c47f462ad8833e5db1', 198, 737559, 5000, 35, 567077766234, 543959350767)
('000000000000000000747e3d8314a3e3d21ed2f44d94e256f50b49e741e1fac4', 73, 745449, 4141, 4, 557346698144, 555634575681)
('000000000000000007eee2a2844312f5718db70dc3ec6263017ab3e2823c4384', 539, 742362, 4124, 50, 551332389904, 551041950084)
('000000000000000015c89ab74c296908c9e5f269508ee410293983b12619085f', 235, 737510, 5000, 7, 546642860065, 543890024680)
('00000000000000000c251056710cd5ae9855f8373b64675ada89d96e3292395d', 220, 737548, 5000, 18, 544198251563, 543946075288)
('0000000000000000116e7371b8a7c35834d2b62a5806bd04c16bc3474a72cc26', 109, 724941, 4027, 15, 526338649627, 525481458201)
('0000000000000000085412139c377478b8a7ff7d31caa35ac160251f411f8d8b', 628, 718410, 3991, 17, 516990431986, 516055455300)
('0000000000000000013ec024ffc51a6d87c30362bf6c41b9290fb3db9e2ac508', 171, 701117, 3895, 58, 501481440693, 491508958329)
('0000000000000000088ab3a8a791419bfc88b854571894d7dfd7b225e0980a63', 320, 692557, 3847, 151, 483406043326, 479556246751)
('00000000000000000ede556711a82f88d1d8669da648a92de134d1f32463da53', 666, 694193, 3856, 19, 482008798325, 481848385809)
('00000000000000000e5c87d568324ba252550a4cb02b7279cf398b9994c0c39f', 409, 691939, 3844, 12, 478795452118, 478724224601)
('0000000000000000093d5e21b67b8febbf067a538fb6193a4fc0d6948346f24a', 800, 682650, 3792, 167, 466126999742, 465956410500)
('0000000000000000013bee13c13c8408e72e75b78800b6493a71fd56f5d975b8', 1032, 655425, 3651, 58, 432757522025, 429543260550)
('000000000000000015a382acfc08bd42952fef355b66c9c9e6550353b6c167d0', 663, 655438, 3651, 22, 429664524420, 429560301002)
('000000000000000004e568e462c0acf1843ca5dd15bc356a921729cd33b8ae71', 377, 632404, 3513, 54, 413502951557, 399884226896)
('0000000000000000054790aa56d6ca30b033233a133d02d308878b719f711b41', 641, 612356, 3411, 18, 412788257766, 374943741732)
('00000000000000000bfbefddfe17466b9cbe7dcfec7833f3be1fd5738e964944', 530, 634422, 3524, 2418, 403053803050, 402440520324)
('000000000000000007a7648870dbaa5668a6f9307e99060cc7c0703945e098bd', 821, 613585, 3418, 102, 376639652381, 376458327315)
('00000000000000000d62348cd0bde52e8cf8aa85df3b0b0d23594565667f58d9', 161, 596708, 3314, 15, 356255535628, 355992412552)
('00000000000000000b3424dade9b0402fe56db61c6c7de15c440772c18e7ec0f', 177, 585148, 3250, 8, 342439831082, 342331475032)
('000000000000000004bf023e5fe85087d01f1c345de703489b89a429d525c65a', 252, 418687, 2325, 8, 315137532937, 175236838293)
('00000000000000000c94ca4441d4f2470188dcb8845820d818cbfaf9f0c838e9', 388, 559319, 3116, 154, 314660386656, 312812015087)
('000000000000023d9a3ee2714f4365b2d312700ba113af23084104319133c6c0', 725, 465554, 2585, 24, 295090009096, 216639967252)
('000000000000000002ac55f2ada57d8f6034bf079fc3c16cdd961531650045db', 283, 500012, 3390, 22, 294403660972, 249990999640)
('0000000000000000120f31d6e21a8976066f1ea8e3652a144d99d3fe10ba461e', 377, 500028, 3390, 15, 293764638072, 250006999608)
('000000000000000010889bb61503de0bbcd225c4b57ea0c709f5f6403962ca08', 439, 500048, 3390, 22, 293677436332, 250027000288)
('0000000000000000077c1da70b544d3b401805ee4f0f8da8433212049194cb8b', 552, 499992, 3390, 15, 293644521158, 249971000400)
('00000000000000000bdf286d03caf440c81c0a49503be628a6ab784b813ab745', 523, 531058, 3600, 101, 288542881258, 282000294928)
('00000000000000000ca5400a9d607c7e6cdf95aded1681f043f0e7528ad13a5c', 582, 512204, 2853, 20, 287517152285, 262322717580)
('00000000000000000de35723889e1c31ca66d527c4d72ccb726a9841c924c082', 1173, 535796, 2976, 74, 287366298960, 287034489936)
('000000000000000006a53e8e9dc2be33f91bf04a3cea4c4cff8a47c1b6520dd8', 1094, 531061, 3600, 30, 286421196770, 282003481159)
('00000000000000001474b9a66f8f8b6c890135ae2074ef767493d3f60d0c0044', 705, 500032, 3390, 175, 272044428303, 250010999680)
('000000000000000011418703f3e6674e1a19cdfd9955f76ffd646bf2dedcfda3', 515, 486870, 2704, 21, 267978654435, 236986893720)
('00000000000000000126b5419f9d31f64fe9e91640b5fc383af629828bbae0fd', 254, 505880, 2810, 74, 256576274071, 255874104000)
('000000000000000001dcb26d9a6786955cfdfd94e368c5ca25ae672233823c7d', 1491, 500057, 3390, 41, 251089361416, 250036000855)
('000000000000000008686f8ee926d297063471f15693530de1b59393dd5a95cf', 607, 500022, 3390, 3846, 250537960825, 250000999560)
('000000000000000001e23249369c26abdd142b506c1796934f2e1780bd15a216', 1481, 500073, 3390, 77, 250227656361, 250052002263)
('00000000000000000e700a9de911a57ae5c3ac4238530878ebf18f2cba7d2bb4', 586, 500073, 3390, 102, 250210561024, 250052002263)
('000000000000000011bae3d44a6f198f4670bc2502b6cc725f28d9fe04dec5db', 439, 500063, 3390, 102, 250139971582, 250042001323)
('000000000000000007b4bd703d1ca95a51b3d70f2b74ddf09942f95cc3a5128b', 474, 500018, 3390, 102, 250096537199, 249996999568)
('00000000000000000afa83a2bef7bf2c7c4b055554dc64b31c5f71ddecd9d4e6', 461, 496472, 2758, 21, 246697639731, 246461609072)
('000000000000000003d9e27c8aa6b846b1db19df2db50373c643542c62725363', 769, 491111, 2728, 151, 241290452375, 241150725441)
('00000000000000000c840c9855a79d9e629d2b4357136df495966b960ec8ff25', 228, 483953, 2688, 11, 234545821649, 234171789969)
('000000000000000008fa8784a8921bd64983f60c8daea41b74197ac1921edee9', 740, 471876, 2621, 179, 224194921204, 222613165512)
('00000000000000000087036d230bed40f5c74f8c4aa0800c0b4bec183110b773', 372, 469724, 2609, 21, 221870040189, 220603058256)
('0000000000000000000812d4b59c826bd2047e72e01c3ba3f3ad517c63e7de64', 714, 464554, 2580, 229, 217097056954, 215773254596)
('0000000000000000101c965a762eb6ff0d541a3b03dd96130851d7efee9f57c7', 140, 463683, 2575, 21, 215429176215, 214933299405)
('00000000000000001052a4c9af72f80c634e0da86733c1aeca3a206cf1662ccc', 366, 457507, 2541, 60, 211799631965, 209276054489)
('0000000000000000021b72ac222d06f424902454c86748f096119ec81e8aeebd', 306, 456711, 2537, 12, 208676485402, 208532872467)
('00000000000000001098af47793a0094c310e089efcc81d0ef6dc6cc53b2c198', 1057, 451541, 2508, 61, 204827126763, 203837799007)
('00000000000000001196412df6f4d90e1c773a2fc4cb4d4d6b1d1360f5e62438', 1390, 439184, 2439, 74, 193164601772, 192802654368)
('00000000000000450634d2a059e1a154cfd5783872ff9c7e788524e81fa163a1', 358, 369986, 2055, 41, 183989940557, 136860041316)
('00000000000000000ce1f56134e7d27eee5db75466723e21655e478028fe2576', 491, 425781, 2365, 56, 181738057055, 181255397481)
('00000000000000000816cabe4571b0b665993e637d00dba8ac45222b1712a83c', 526, 419896, 9997, 151, 180245981292, 176303413104)
('000000000000000006c2664614dacb672c47a42a6ab270d1bdd01abc837c7f6d', 1040, 412318, 2290, 251, 170842082052, 169973147684)
('00000000000000000b7df7d919db2b73c23d6c016acae098778ea70c9095e00c', 979, 368776, 2500, 468, 159134078850, 135978774480)
('00000000000000000d710f3876a7b235aab173042cfe77ff7d0d1972bc279465', 416, 388415, 2157, 151, 153639042348, 150821932915)
('00000000000000000e7c7050d8e8546c1db61a064f2cc6ce5c60f009dde8a875', 1061, 338825, 1882, 142, 141730172877, 114775274625)
('00000000000000000a9cd67f563169d5f1452a305d6e311e822e4f9ffc88ca9a', 548, 364589, 2025, 134, 135044516959, 132895971801)
('000000000000000009cd352daf6ab3edeceefd21838028d20ea60d0ef282afa8', 387, 359854, 1999, 22, 131024341095, 129453877960)

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。