tp钱包矿工费怎么转入,tp钱包矿工费怎么计算

  

  一、MimbleWimble怎么来   

  

  MimbleWimble的发展过程有点类似比特币。这是我们打了一千个电话,催了一千次,她才向我们走来的结果,就是某个话题,某个需求,讨论了很久。最后,有人或某篇论文已经将整个研究过程的结果整合成一套可操作的协议3360。比特币出来之前,很多人都在讨论去中心化的电子现金,比如戴伟;有Adam Beck对“HashCash”HashCash的研究,也有对时间戳、公钥私钥等的研究成果。以及Satoshi在共识算法上的突破——中本聪共识,有了比特币;在MimbleWimble协议产生之前,事实上比特币核心开发组织的很多成员就开始认为比特币确实实现了“点对点现金交易”,但不足以维护“点对点交易的隐私”。许多研究人员已经能够借助于交易图和网络爬虫来图形化地分析一个或多个账户的历史交易,并且几乎准确地猜测交易人或交易组可能是谁。因此,在比特币交易中暴露交易双方的账号、交易金额和交易溯源会威胁到交易的匿名性,而其本身的交易溯源性又使得货币本身不具有可替代性,这也是人们所诟病的。   

  

  所以在比特币的核心社区BitcoinCore,很多人提出了各种协议或者新的方法来推动比特币更加私有,但都更像是个别项目的性质,而不是一套可以让某种货币立刻直接可用的区块链系统。直到有一天,在比特币的IRC(互联网中继聊天)频道里,一个名叫汤姆埃尔维斯杰杜索尔(法语版佛妖)的笔名通过Tor网络放了一个txt文件,也就是后来俗称的白皮书。他在里面命名了一个叫MimbleWimble的协议(哈利波特里的bolt咒语,看完你会无语~ ~),推测可以通过ConfidentialTransactions (CT)、CoinJoin、单向聚合签名(OWAS)等三种方式完成“隐私事务”,增加了通过切穿处理大量数据导致的状态增长问题。他离开这份名为MimbleWimble的白皮书后就消失了。但是,他的白皮书仍然留下了许多问题,没有完美的数学来证明他的想法的可行性。最后BlockStream的Andrew Poelstra完善了这篇文章,提出了一篇比较完整的论文。(对了,后面总会有BlockStream。没有这家公司,我想不会有MW协议)。   

  

  所以,总的来说,MimbleWimble在比特币社区,有长期关注隐私问题的专家和爱好者,不断提出各种改进方法。最后有人把这些方法综合起来,验证了产品,有点类似于比特币形成的过程,但这是一个协议,实际执行还得等到Grin和BEAM这两种隐私加密货币的出现。   

  

  从比特币的交易中,我们可以分析出可能是哪些个体群体。   

  

     

  

  某个比特币账号在R语言下呈现的交易图   

  

  二、解构MimbleWimble三大零件   

  

  Mimblewimble是由许多零件组装而成的变压器。在这一章中,我将介绍MW的各个部分是如何完成这个协议的。根据协议,我认为MW的私币交易有三个交易特征。   

  

  1.没有交易金额。2.没有双方的地址。3.在一个块中,多个事务被合并,没有办法看到每个单个事务的细节。要完成这样的特性:必须分别由三个大零件:   

  

  1.机密交易,2。Coinjoin,3。单向聚合签名(OWAS)通过这三个重要的主协议完成隐私交易,最后通过切穿,针对大量确认链状态积累的问题,这也是MimbleWimble优于Zcash、Monero等仍然需要存储大量状态数据的隐私币的地方。   

  

  既然他是一个专门为隐私币所创造的区块链协议,那么还是先来介绍一个区块中的内容物:   

  

  1.ECDSA加密的交易输入和范围证书的merkle树   

  

  2.带有ECDSA加密事务输出和范围证明的merkle树   

  

  3.交易内核:内核抵消了一个(或多个)剩余价值和总和,并挖掘费用。   

  

  4.砌块头和砌块高度   

  

  实际上,这里可以看出MW和其他区块链块之间存在结构差异。在这里,我们也开始解构MimbleWimble的所有部分3360。   

  

  1、ConfidentialTransactions   

机密交易

  

首先先介绍Confidential Transactions(以下简称CT),CT最早是blockstream的Adam Back提议添加「加法同态」的性质在比特币交易中而产生,后来这个方法被Gregory Maxwell以Confidential Transactions的名义发出来,最后被匿名的佛地魔加到了MW协议中,他的最基础的概念就是要将任何协议中的交易输出及交易输出都以椭圆曲线的方式进行加密。

  

所以在MimbleWimble之中,每个交易输入和交易输出都会以Pedersen Commitment的形式写成:

  

  

如上所写,我们可以知道C(Pedersen Commitment,Pedersen可能是从TPPedersen的论文而来)是一个让交易金额v通过ECDSA( 椭圆曲线数字签名算法,Elliptic Curve Digital Signature Algorithm,缩写ECDSA)而产生的值,这个值众人皆知,然而透过椭圆曲线后所看到的输入值将不再是单纯的金额,我把上面算式内容分成以下三点解说:

  

1. r是所谓的致盲因子(blinding_factor),作为私钥使用,是不能被其他任何人知道的,这个私钥也代表你对这个交易值的所有权。

  

2. G和H则是在椭圆曲线上的两个点,而r*G则是r在G上的公钥,我们没办法透过r*G而知道r值,这是所谓的离散对数问题,我们不会因为知道公钥,就因此而知道私钥,切记不要把这里说的乘法和5*6=30这种单纯的乘法搞混。

  

3. v则是交易的数额,只有交易的另一方也会知道,但是矿工与其他人则不会知道。在这里椭圆曲线确保了一件事,交易金额v和致盲因子r不会被透过逆推的方式而知道。

  

现在你知道一笔交易的长相如何了,我们赶紧来看怎么样可以让这笔交易怎么被验证。

  

1-1、隐藏交易数额的魔法:加法同态(Additively Homomorphic)

  

在MimbleWimble中,每笔交易仍然遵守UTXO( Unspent Transaction Output)的概念,如果对比特币有点了解,应该还有印象当我们说某用户的钱包“收到”比特币时,意思是说这个钱包发现一个可以使用该钱包控制的密钥来花费的UTXO,你可以将他简化成输入=输出。假设今天在比特币交易中,你的帐户有10BTC,你用了7BTC给卖家,3BTC是找零(为了简化先不管手续费)。

  

输入1(10)=输出1(7)+输出2(3)

  

可是今天我们在MW的交易中,数额是不能被外人知道的,这时候交易仍要遵守V1+V2=V3的形式,这时候同态加密 (HomomorphicEncryption)就派上用场了,在CT中遵守的只是同态加密中的加法同态( additively homomorphic ),加法同态的意思,就是先加密再相加=先相加再加密,因此,我们能够看到算式演变如下:

  

V1+V2=V3=> V1*H+V2*H=(V1+V2)*H=V3*H这时候加法同态的性质巧妙的验证了一件事情,那就是我们不需要知道原本v1和v2,以及v3的值是多少,只需要知道V1*H+V2*H=V3*H就可以验证v1+v2=v3了,也因此他能够成功地去隐藏交易数额。

  

但是这里会存在另外一个问题,就是我们如何在输入=输出的情况下,不让交易的另一方,以及后来的验证者不知道我的私钥,同时又可以让他们验证我知道私钥呢?

  

可能看完你还不一定知道问题在哪里,让我们先来看看这个问题:

  

今天Alice假设有24个币,致盲因子为81,则他的Pedersen Commitment会是

  

81*G+24*H那要是Alice传给Bob数量为7的币,那么算式会变成(ps.在此我们先忽略矿工手续费)

  

A-B=(81*G + 24*H)-(81*G + 7*H)=0*G-17*H这样就会变成说,Bob将会知道致盲因子是81,如此一来你的私钥就被曝光了。所以在真实的MW交易中,不能让这种事情发生,否则连你找零的花费都有可能被取走,因此当Alice要和Bob交易时,必须再另外为所找零的钱所设立一个致盲因子,例如我们将另个致盲因子设为8,记住这个8还是不能让他知道的,同时,当你传给Bob时,Bob也会指定一个私钥数字(这里假设Bob的致盲因子是23),虽然这时候Bob不会知道你的致盲因子是多少,但我们能够利用等式两边数值相减为零的特性,来去验证你给的致盲因子之差的正确性。所以这个时候的算式变成这个样子:

  

Alice(24)-Alice(17)-AlicetoBob(7)81*G+24*H-(8*G+17*H)-(23*G+7*H)=50*G+0*H这时候此笔交易中,验证的矿工会收到50*G的余项,这时候的excess value值就是50,50*G(余项)和50(致盲因子差)则刚好可以作为公钥与私钥。(记得这部分的交易内容中,没有算到矿工手续费)。

  

1-2、避免多余金钱被制造的魔法:范围证明(Range Proof)

  

今天我们已经可以确定交易数额可以透过加法同态的方式去隐藏,并且让验证的矿工能够验证交易等式两边是相等的,但这时却还有一个影响交易有效性的问题,就是即使等式两端相等,还是有可能凭空创造出来的金钱,可能一时之间比较难想象,那你能够先看下面这组输入与输出的算式:

  

输入=输出1+输出25=(-10)+15今天以上的算式,也符合输入等于输出的条件,但我却能够发现到,原本的5块变成15块,中间的10块是因为是被凭空创造出来的金钱。而且这个时候负数,在椭圆曲线上对应的可能也是任何值,因此不太会被检测出来。这时候在机密交易中用了另外一种零件,称作范围证明(RangeProof)。

  

RangeProof最早由blockstream的Gregory Maxwell所提出,Range Proof会附挂在每笔交易输入与输出中,他透过简单的零知识证明,可以确保在不知道数额为多少的情况下,还能证明每个单笔的输入输出都是一个0<x<2^64的数,以确保不会有额外的金额产生。然而,每笔输入与输出都必须附带的零知识证明的size大小,却是相对于交易本身要来的更大,而且矿工如果要同步于整个区块,就必须从头到尾都进行验证每笔交易的Range Proof验证,因此Range Proof本身的大小,也成为必须去改进的对象。因此,后来Stanford的学生 Benedikt Bünz又在他的基础上开发出了所占的容量更小,指令周期更快的Bulletproof,在i7–6820HQ的系统系统下实测只有688bytes的大小,较原本Maxwell开发出来的有5kb左右的Range Proof已经有非常大的容量改善,但和每笔交易差度不多33bytes相比仍然非常大。

  

到现在我们可以有一个概念,以了解不用知道金额的交易如何被有效验证:

  

1.矿工透过PedersenCommitment的加法同态性,确保在不知道交易金额的情况下,还能确定等式左右两边输入等于输出

  

2.透过RangeProof来确定某个不知道数额的交易输入或输出,确实大于零,以避免被凭空创造出新钱。

相关文章