Grin is an exciting new cryptocurrency leveraging the MimbleWimble protocol. But tutorials on Grin are notoriously nondescript.
這篇文章旨在確切的分享grin
的交易過(guò)程似枕。
在grin
中浦徊,一個(gè)輸出就是一個(gè)Pedersen Commitment
,任何輸出都呈現(xiàn)下面的形式:
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*G
是r
在曲線上的公鑰证舟。?
v
是輸入或輸出的金額硕旗,H
是橢圓曲線上的另一個(gè)固定點(diǎn)。
(k+j)*H = k*H + j*H
女责,k
和j
都是私鑰漆枚。等式表明從兩個(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)化了):
如果我們看Grin 區(qū)塊鏈瀏覽器折汞,輸出不會(huì)像上面那樣優(yōu)雅的分解。就像我們所說(shuō)的盖腿,這才是Grin真正輸出的樣子爽待,
再重復(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))返還自己悠瞬。
這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的輸出一樣。
正如我之前提到的疮薇,要花費(fèi)任何輸出胸墙,您必須知道該輸出中使用的致盲因子。Alice知道她想要花費(fèi)的輸出中所使用的致盲因素(20)按咒,但她需要一種方法向所有人證明她知道迟隅。
這就是為什么她需要?jiǎng)?chuàng)建一個(gè)完全獨(dú)立的計(jì)算,就是致盲因子的和励七。這涉及到Alice剛才為她的找零輸出采用的致盲因子(34)玻淑,并從中減去她想要花費(fèi)的輸出的致盲因子(20)。
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”字段乍狐,這里只是為了清楚的顯示赠摇。
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 fee和lock_height連接起來(lái)以創(chuàng)建M,稱為交易的“Message”撞秋。
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
表示:
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è)交易的簽名耽装。
當(dāng)Alice最終收到sr時(shí),她將無(wú)法從中推斷出kr或rr的值期揪。
Bob將以下內(nèi)容發(fā)送回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,由一下組成:
基于我們前面描述的橢圓曲線的性質(zhì)缤苫,Alice可以將生成點(diǎn)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證明:
- Bob知道他將收到多少grin
- Bob知道他的nonce
- Bob知道他期望收到的25grin的致盲因子
Alice并不知道Bob的nonce和他選擇的致盲因子屡萤。
然后Alice生成自己方的簽名:
Alice現(xiàn)在可以生成整個(gè)交易的簽名,該簽名包括她和Bob的簽名:
簽名包括
- Alice和Bob方簽名的和
- Alice和Bob的nonces對(duì)應(yīng)的承諾(他們都不知道對(duì)方真正的nonce)
再簡(jiǎn)明一點(diǎn)掸宛,它可以是這樣:
其中 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)有找零)。
記得之前的簽名嗎覆山?
這個(gè)簽名實(shí)際上已經(jīng)簽署了我剛剛提到的excess blinding factor對(duì)應(yīng)的承諾竹伸。這是如何做的?
如果你還記得簇宽,當(dāng)你用生成器G乘以等式的兩邊時(shí)勋篓,這就是Bob方簽名。
類(lèi)似地魏割,當(dāng)你用生成器G乘以等式兩邊時(shí)譬嚣,Alice方簽名就是這樣:
如果將兩個(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)的承諾疯汁。因此,添加sr和ss( 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,我們證明:
- 再花費(fèi)Alice之前的輸入時(shí)峻村,沒(méi)有錢(qián)憑空產(chǎn)生麸折。
- 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ì): 徐曉峰