grin(Mimblewimble)轉(zhuǎn)賬交易流程深入分析

Grin is an exciting new cryptocurrency leveraging the MimbleWimble protocol. But tutorials on Grin are notoriously nondescript.

這篇文章旨在確切的分享grin的交易過(guò)程似枕。

image.png


grin中浦徊,一個(gè)輸出就是一個(gè)Pedersen Commitment,任何輸出都呈現(xiàn)下面的形式:

A Grin output, which is a Pedersen Commitment.

Pedersen Commitment(Pedersen 承諾)用一種和聰明的方式隱藏了信息蚁飒。如果你是剛聽(tīng)說(shuō)commitments(承諾), 那看到它把它理解成shielded value(屏蔽值)就可以了。

下面的內(nèi)容來(lái)Grin wiki蠕蚜,對(duì)理解這篇文章來(lái)說(shuō)是很好的入門(mén)梢灭。

? 如果選擇一個(gè)很大的數(shù)k作為私鑰,k*H就是對(duì)應(yīng)的公鑰幕侠。即使一個(gè)人知道公鑰k*H值帝美,想推導(dǎo)出k幾乎不可能

? r是被用作致盲因子的私鑰,G是橢圓曲線上的固定點(diǎn)橙依,它們的乘積r*Gr在曲線上的公鑰证舟。

? v 是輸入或輸出的金額硕旗,H是橢圓曲線上的另一個(gè)固定點(diǎn)。

(k+j)*H = k*H + j*H女责,kj都是私鑰漆枚。等式表明從兩個(gè)私鑰的和獲取公鑰(k + j)* H,等價(jià)于每個(gè)私鑰的對(duì)應(yīng)公鑰的和 (k * H + j * H)

更深入的密碼學(xué)研究可以在這里ECC primer找到抵知。但簡(jiǎn)而言之墙基,要花費(fèi)Grin的輸出,你必須知道致盲因子(r)和Grin(v)的數(shù)量刷喜。要解構(gòu)承諾來(lái)推斷這些值是不可能的残制。你必須提前知道它們。

致盲因素的存在是因?yàn)橛腥酥Ц督o你這些grin掖疮,他也會(huì)知道v的值(他給你發(fā)送了多少grin)初茶。但只有你(甚至都不是Grin的發(fā)送者)將會(huì)知道這個(gè)輸出的致盲因子,因此只有你能夠花掉這個(gè)輸出浊闪。

假設(shè)此輸出使用致盲因子20恼布,此輸出包含40 Grin。(注意: Grin的數(shù)量實(shí)際上是以原子單位1 NanoGrin的倍數(shù)發(fā)送的搁宾。在這里直接使用grin簡(jiǎn)化了):

In this output, the blinding factor is 20, and the amount of Grin is 40.

如果我們看Grin 區(qū)塊鏈瀏覽器折汞,輸出不會(huì)像上面那樣優(yōu)雅的分解。就像我們所說(shuō)的盖腿,這才是Grin真正輸出的樣子爽待,

What a Grin output looks like (under the Commit column).

再重復(fù)一次,從這個(gè)輸出中推導(dǎo)出20(致盲因子)或者40(grin 數(shù)量)是不可能的翩腐。

花費(fèi)輸出

假設(shè)剛才展示的輸出屬于Alice∧窨睿現(xiàn)在,Alice希望將40個(gè)Grin中的25個(gè)發(fā)送給Bob栗菜。為簡(jiǎn)單起見(jiàn)欠雌,我們會(huì)忽略挖礦費(fèi)。

假如您有5美元疙筹,購(gòu)買(mǎi)3美元的東西富俄,您將獲得2美元的找零。比特幣交易是這樣的而咆,Grin也不例外霍比。如果Alice想要從她40個(gè)未花費(fèi)的Grin輸出中向Bob發(fā)送25個(gè)Grin,她也會(huì)在同一筆交易中創(chuàng)建一個(gè)輸出暴备,把剩余的15個(gè) Grin(她的零錢(qián))返還自己悠瞬。

Alice identifies how much Grin she wants to send to Bob, and also her change.

這15個(gè)Grin將會(huì)返還Alice,這意味著只有她能夠控制它并再次花費(fèi)它。換句話說(shuō)浅妆,Bob不應(yīng)該花費(fèi)Alice的找零望迎。為此,Alice必須為她的找零輸出創(chuàng)建一個(gè)新的致盲因子凌外。假設(shè)Alice選擇34辩尊。

Alice知道r(為她找零輸出的致盲因子)和 v(她找零的grin的數(shù)量),她擁有創(chuàng)建找零輸出(co)所需的一切康辑。這將作為一個(gè)輸出記錄在區(qū)塊鏈上摄欲,就像Alice創(chuàng)建的將25個(gè)Grin發(fā)送給Bob的輸出一樣。

Alice’s change output.

正如我之前提到的疮薇,要花費(fèi)任何輸出胸墙,您必須知道該輸出中使用的致盲因子。Alice知道她想要花費(fèi)的輸出中所使用的致盲因素(20)按咒,但她需要一種方法向所有人證明她知道迟隅。

這就是為什么她需要?jiǎng)?chuàng)建一個(gè)完全獨(dú)立的計(jì)算,就是致盲因子的和励七。這涉及到Alice剛才為她的找零輸出采用的致盲因子(34)玻淑,并從中減去她想要花費(fèi)的輸出的致盲因子(20)。

Alice’s sum of her blinding factors.

rs(s表示發(fā)送者呀伙,現(xiàn)在是Alice)是Alice所有致盲因子的總和,現(xiàn)在的情況下它是14添坊。(Note: I am intentionally leaving out kernel offsets)剿另。

Alice做的就是創(chuàng)建一個(gè)隨機(jī)的nonce ks(再次說(shuō)明,s表示發(fā)送者)贬蛙。她將使用這個(gè)隨機(jī)的nonce來(lái)幫助她對(duì)這筆交易簽名雨女,我們稍后將會(huì)展示。Alice不會(huì)將實(shí)際的nonce發(fā)送給Bob阳准。相反氛堕,她發(fā)送ks?G,這是對(duì)該nonce 的承諾野蝇。如前所述讼稚,通過(guò)將nonce乘以生成點(diǎn)G,Alice屏蔽了她實(shí)際的nonce值绕沈。

Alice將以下信息發(fā)送給Bob锐想。實(shí)際上,Grin數(shù)據(jù)不會(huì)區(qū)分“Metadata”和“Data”字段乍狐,這里只是為了清楚的顯示赠摇。


Everything Alice sends Bob in the first step of this Grin transaction.

Metadata中的數(shù)據(jù):

  • Amount to send: Alice想要發(fā)送給Bob的grin數(shù)量(現(xiàn)在是25)。
  • TX UUID: Alice和Bob用于在來(lái)回發(fā)送數(shù)據(jù)時(shí),標(biāo)識(shí)此交易的唯一標(biāo)識(shí)符藕帜。
  • TX fee: 交易費(fèi)(這篇文章先不討論)烫罩。
  • lock_height: 區(qū)塊數(shù),在此之后交易將有效洽故。

Data中的數(shù)據(jù)

  • TX Inputs: Alice為她給Bob的交易的使用的未花費(fèi)輸入贝攒。
  • co: Alice的找零輸出
  • ks ? G: Alice的nonce變成對(duì)應(yīng)的承諾通過(guò)乘以生成點(diǎn)G.
  • rs ? G*: Alice致盲因子的和對(duì)應(yīng)的承諾通過(guò)乘以生成點(diǎn)G.

Alice將所有這些發(fā)送給Bob,Bob繼續(xù)下一步收津。

Bob的回合

一旦從Alice接收到該數(shù)據(jù)后饿这,Bob將TX feelock_height連接起來(lái)以創(chuàng)建M,稱為交易的“Message”撞秋。

The “message” of the transaction.

Bob為他希望從Alice哪里收到的25個(gè)grin選擇一個(gè)致盲因子rr(r表示接受者长捧,在這里是Bob)。假設(shè)他選擇 11吻贿。他還選擇了他自己的隨機(jī)的nonce kr(r表示接受者)串结。

就像Alice一樣,Bob通過(guò)將每個(gè)值乘以生成點(diǎn)G來(lái)創(chuàng)建對(duì)這兩個(gè)值的承諾舅列。使用這些值肌割,Bob 為此交易生成 Schnorr challenge,由變量e表示:

The Schnorr challenge for the transaction.

Schnorr challenge由以下值的 SHA256 hash組成:

  • 交易的message帐要。
  • Alice和Bob使用的nonce對(duì)應(yīng)承諾的和把敞。
  • Bob的致盲因子(為他25個(gè)grin的輸出)對(duì)應(yīng)的承諾 + Alice致盲因子和對(duì)應(yīng)的承諾。

Bob使用e為此交易生成他的Schnorr signature 榨惠,簡(jiǎn)稱sr(r為收件人)奋早。雖然它是Bob簽名的全部,但我們稱之為Bob方簽名赠橙,因?yàn)樗罱K將被添加到Alice方簽名中來(lái)創(chuàng)建整個(gè)交易的簽名耽装。

The Schnorr challenge for the transaction.

當(dāng)Alice最終收到sr時(shí),她將無(wú)法從中推斷出krrr的值期揪。

Bob將以下內(nèi)容發(fā)送回Alice

Bob sends his partial signature, commitment to his nonce, and commitment to his blinding factor for his output back to Alice.

包括:

  • sr: Bob方的簽名
  • kr ? G: Bob的nonce對(duì)應(yīng)的承諾
  • rr ? G: Bob為他期望收到的25個(gè)grin選擇的致盲因子對(duì)應(yīng)的承諾掉奄。

最后一步:返回給Alice

Alice現(xiàn)在有所需的一切,她也需要計(jì)算e(這筆交易的Schnorr challenge)凤薛。在本地計(jì)算e之后姓建,Alice就可以驗(yàn)證Bob方的簽名
回顧一下Bob方的簽名sr,由一下組成:

Bob’s partial signature for this transaction.

基于我們前面描述的橢圓曲線的性質(zhì)缤苫,Alice可以將生成點(diǎn)G 引入等式的兩邊引瀑,等式任然成立。

Alice multiples each side of the equation by generator point G.

由于Alice收到了Bob的kr ? G(Bob的nonce對(duì)應(yīng)的承諾)和rr?G(Bob為他期望收到的25個(gè)Grin選擇的致盲因子對(duì)應(yīng)的承諾)榨馁,并且因?yàn)樗呀?jīng)在本地計(jì)算了e憨栽,所以Alice驗(yàn)證Bob方簽名sr,通過(guò)簡(jiǎn)單地將它乘以生成器G并確保等式的右邊等于該值。
通過(guò)這樣做屑柔,Alice證明:

  1. Bob知道他將收到多少grin
  2. Bob知道他的nonce
  3. Bob知道他期望收到的25grin的致盲因子

Alice并不知道Bob的nonce和他選擇的致盲因子屡萤。

然后Alice生成自己方的簽名:

Alice generates her partial signature for the transaction.

Alice現(xiàn)在可以生成整個(gè)交易的簽名,該簽名包括她和Bob的簽名:


image.png

簽名包括

  • Alice和Bob方簽名的和
  • Alice和Bob的nonces對(duì)應(yīng)的承諾(他們都不知道對(duì)方真正的nonce)

再簡(jiǎn)明一點(diǎn)掸宛,它可以是這樣:

The signature for the transaction.

其中 s = ss + sr 死陆,k = ks + kr.

記住這個(gè)簽名,它馬上會(huì)很有意義唧瘾。

完成交易

數(shù)字貨幣需要一個(gè)"memory" , 也就是說(shuō)措译,當(dāng)你向一個(gè)人轉(zhuǎn)賬后,你不能將同樣的錢(qián)再發(fā)給別人饰序。在Grin中领虹,我們隱藏了發(fā)送的Grin數(shù)和接受者。那么我們?cè)趺茨茏C明沒(méi)有錢(qián)被雙花或者憑空產(chǎn)生呢求豫?

在Grin交易中塌衰,當(dāng)您從輸入中減去所有輸出時(shí),剩余的Grin數(shù)應(yīng)該等于0蝠嘉∽罱回到剛才的5美元的比喻,有下面的公式:

3 dollars to cashier (output) + 2 dollars in change back to me (output) - 5 dollar bill (input) = 0

在Grin中蚤告,當(dāng)交易合法時(shí)努酸,相同的求和使v值總和為零。但是杜恰,我們?nèi)绾卧诓恢?strong>value的情況下證明這一點(diǎn)蚊逢?讓我們看一下從Alice到Bob的交易中使用的輸入和輸出:

(34?G)+(15?H)+(11?G)+(25?H) - (20?G) - (40?H)=(25?G)+(0?H)

這里比較巧妙的屬性是,當(dāng)Grin金額抵消時(shí)(因?yàn)闆](méi)有錢(qián)是憑空創(chuàng)造的)箫章,從輸入中減去輸出所剩下的全部是“the excess blinding factor” 的承諾,或者“kernel excess”镜会。這個(gè)“the excess blinding factor”的承諾檬寂,現(xiàn)在是25?G,就是橢圓曲線上的公鑰戳表。

如果Grin交易的輸出總和減去輸入的總和會(huì)在曲線上產(chǎn)生有效的公鑰桶至,你便知道v值肯定已經(jīng)抵消了。如果等式的右邊不是n?G + 0?H的形式 【for some known value of n】 匾旭,你便知道該交易無(wú)效镣屹。這意味著花費(fèi)的金額大于輸入金額(例如,您提供5美元的賬單价涝,向收銀員支付3美元女蜈,并在找零中獲得10美元),或者輸入大于輸出(例如,您提供5美元的賬單伪窖,向收銀員支付3美元逸寓,并且沒(méi)有找零)。

記得之前的簽名嗎覆山?


The signature from the transaction.

這個(gè)簽名實(shí)際上已經(jīng)簽署了我剛剛提到的excess blinding factor對(duì)應(yīng)的承諾竹伸。這是如何做的?

如果你還記得簇宽,當(dāng)你用生成器G乘以等式的兩邊時(shí)勋篓,這就是Bob方簽名。

Bob’s partial signature when you multiply both sides by generator G.

類(lèi)似地魏割,當(dāng)你用生成器G乘以等式兩邊時(shí)譬嚣,Alice方簽名就是這樣:

Bob’s partial signature when you multiply both sides by generator G.

如果將兩個(gè)方程式加在一起會(huì)發(fā)生什么?你會(huì)得到:

sr?G + ss?G =(kr?G)+(ks?G)+(e?(rr?G + rs?G))

請(qǐng)記住见妒,rr是Bob的致盲因子孤荣,rs是Alice的盲目因子之和。還需要記住rr?G + rs?G(rr + rs)?G是等價(jià)的须揣。

Bob的致盲因子對(duì)應(yīng)的承諾是11?G盐股。Alice所有致盲因子的和對(duì)應(yīng)的承諾是14?G。將它們加在一起得到25?G耻卡,這是交易的** excess blinding factor對(duì)應(yīng)的承諾疯汁。因此,添加srss( Bob和Alice各自的部分簽名)證明了整個(gè)交易的有效性卵酪,因?yàn)樗鼈兗悠饋?lái)是 excess blinding factor**對(duì)應(yīng)的承諾幌蚊。
Further simplifying that equation, we get:
進(jìn)一步簡(jiǎn)化該等式,我們得到:

sr?G + ss?G = (k?G) + (e ? (r?G))

或者

sr?G + ss?G = (k?G) + (e ? (25?G))

剩下要做的就是檢查等式左側(cè)等于右側(cè)溃卡。

請(qǐng)記住溢豆,這個(gè)等式中的所有內(nèi)容(雙方簽名的和,e中的所有內(nèi)容瘸羡,** excess blinding factor**對(duì)應(yīng)的承諾漩仙,nonce和對(duì)應(yīng)的承諾)都是公開(kāi)可見(jiàn)的,因此任何人都可以進(jìn)行此驗(yàn)證犹赖。我們不需要Alice和Bob的致盲因子來(lái)驗(yàn)證交易队他。By adding their partial signatures and verifying that they summed to the commitment to the excess blinding factor,我們證明:

  1. 再花費(fèi)Alice之前的輸入時(shí)峻村,沒(méi)有錢(qián)憑空產(chǎn)生麸折。
  2. Alice and Bob both knew the blinding factors for their outputs when they created this transaction. This means the new outputs are spendable by them, and not lost to the abyss.Alice和Bob都知道他們的輸出對(duì)應(yīng)的致盲因子。這意味著他們可以花費(fèi)新的輸出粘昨,而不是丟失【這里翻譯不好】

我們用來(lái)驗(yàn)證交易的信息放在所謂的transaction kernel中了垢啼。

交易核

除了輸出之外窜锯,transaction kernel(交易核)是從Grin交易中產(chǎn)生的另一塊信息。每個(gè)交易都會(huì)產(chǎn)生一個(gè)transaction kernel(交易核)膊夹,但是沒(méi)有辦法通過(guò)Grin區(qū)塊鏈將輸出和交易核關(guān)聯(lián)起來(lái)衬浑。每個(gè)Grin交易都存在一個(gè),它包含沒(méi)有錢(qián)憑空產(chǎn)生的證明放刨。

下面的信息存儲(chǔ)來(lái)交易核中:

  • 交易的簽名(s, k ? G)
  • 和“excess blinding factor” 相關(guān)聯(lián)的公鑰(這里指25?G)工秩,如上所述,它可以用來(lái)驗(yàn)證s进统。
  • 交易的交易費(fèi)鎖定高度(注意:如果這是Coinbase交易助币,那么這些交易都不存在).

總結(jié)

After all this is said and done, the only things broadcast to the network from the transaction are:
完成所有這些之后,只把交易的以下內(nèi)容向網(wǎng)絡(luò)廣播:

  • 所用的輸入
  • 新的輸出
  • 交易核
  • 核偏移 (這篇文章沒(méi)有講到).

None of the transaction metadata from earlier are relayed. Even better, some of this information may get discarded, too?—?but we will save that for another post.

希望這篇文章能夠說(shuō)明Grin交易是如何運(yùn)作的螟碎。我遺漏了范圍證明眉菱,內(nèi)核偏移和交易費(fèi)用。請(qǐng)留意更多關(guān)于Grin如何實(shí)現(xiàn)切入工作的帖子掉分,多參與者交易的外觀以及一些實(shí)驗(yàn)性功能俭缓。Look out for more posts on how cut-through works in Grin, what multi-participant transactions look like, and some experimental features.


原文鏈接: https://medium.com/@brandonarvanaghi/grin-transactions-explained-step-by-step-fdceb905a853
作者: Brandon Arvanaghi

翻譯&校對(duì): 徐曉峰

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市酥郭,隨后出現(xiàn)的幾起案子华坦,更是在濱河造成了極大的恐慌,老刑警劉巖不从,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惜姐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡椿息,警方通過(guò)查閱死者的電腦和手機(jī)歹袁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)寝优,“玉大人条舔,你說(shuō)我怎么就攤上這事》Ψ” “怎么了孟抗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)妻熊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)仑最,這世上最難降的妖魔是什么扔役? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮警医,結(jié)果婚禮上亿胸,老公的妹妹穿的比我還像新娘坯钦。我一直安慰自己,他們只是感情好侈玄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布婉刀。 她就那樣靜靜地躺著,像睡著了一般序仙。 火紅的嫁衣襯著肌膚如雪突颊。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天潘悼,我揣著相機(jī)與錄音律秃,去河邊找鬼。 笑死治唤,一個(gè)胖子當(dāng)著我的面吹牛棒动,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宾添,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼船惨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了缕陕?” 一聲冷哼從身側(cè)響起粱锐,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榄檬,沒(méi)想到半個(gè)月后卜范,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹿榜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年海雪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舱殿。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奥裸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沪袭,到底是詐尸還是另有隱情湾宙,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布冈绊,位于F島的核電站侠鳄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏死宣。R本人自食惡果不足惜伟恶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望毅该。 院中可真熱鬧博秫,春花似錦潦牛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至即寒,卻和暖如春橡淆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒿叠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工明垢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人市咽。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓痊银,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親施绎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子溯革,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353