什么是狀態(tài)通道和側(cè)鏈?它們有什么區(qū)別?
狀態(tài)通道和側(cè)鏈技術(shù),是以太坊社區(qū)的兩種擴(kuò)容技術(shù),但是很多人經(jīng)常會(huì)傻傻分不清楚,因此導(dǎo)致很多困惑。
今天,這篇文章試著解釋其中的道理,希望讓大家能夠理解。這篇文章的主要目的,是說(shuō)清楚:
? 什么是狀態(tài)通道技術(shù)?
? 什么是側(cè)鏈技術(shù)?
然后試著比較這兩個(gè)技術(shù):
? 他們?cè)噲D解決什么問(wèn)題?
? 這兩者誰(shuí)是更好的擴(kuò)容解決方案?
不浪費(fèi)太多時(shí)間了,讓我們趕緊開(kāi)始吧。
什么是狀態(tài)通道技術(shù)?狀態(tài)通道是非常廣泛和簡(jiǎn)單的方法,來(lái)在區(qū)塊鏈上對(duì)其進(jìn)行擴(kuò)容,但是這是在區(qū)塊鏈鏈下進(jìn)行的,并沒(méi)有顯著增加區(qū)塊鏈參與者的風(fēng)險(xiǎn)。這種方案最出名的案例就是比特幣的支付通道,它可以讓兩者之間直接發(fā)送快速以及手續(xù)費(fèi)很低的支付。
狀態(tài)通道是支付通道的統(tǒng)稱,可以把這個(gè)技術(shù)應(yīng)用到任何狀態(tài)更改的操作,大多數(shù)情況下是在區(qū)塊鏈上進(jìn)行。
將計(jì)算移動(dòng)到鏈下,就不需要多余的信任,可以導(dǎo)致成本的降低和速度的極大提升。狀態(tài)通道是區(qū)塊鏈擴(kuò)容技術(shù)的重要組成部分,可以支持更高級(jí)別的使用。
狀態(tài)通道基本的組成部分有以下:
1. 區(qū)塊鏈的部分狀態(tài)通過(guò)多個(gè)簽名和部分智能合約鎖定,所以這部分參與者必須要完全同意對(duì)方去更新它。
2. 參與者通過(guò)產(chǎn)生以及簽名轉(zhuǎn)賬來(lái)自己更新?tīng)顟B(tài),這最終會(huì)上傳到區(qū)塊鏈上,而不是直接在鏈上進(jìn)行計(jì)算。每個(gè)新的更新會(huì)刷新之前的更新。
3. 最終,參與者將狀態(tài)傳回到區(qū)塊鏈上,然后關(guān)閉狀態(tài)通道,并且再次鎖定狀態(tài)(通常是按照和開(kāi)始不同的設(shè)置)。
如果參與者之間更新的“狀態(tài)”是數(shù)字貨幣余額,那么我們就會(huì)有支付通道。第一步和第三步,就會(huì)開(kāi)啟和關(guān)閉這個(gè)通道,包括區(qū)塊鏈操作。但是第二步,無(wú)限的更新就會(huì)快速進(jìn)行,而且不需要區(qū)塊鏈的干預(yù)- 這就是狀態(tài)通道的力量,因?yàn)橹挥械谝徊胶偷谌叫枰_(kāi)到網(wǎng)絡(luò)上,支付手續(xù)費(fèi),或者等待確認(rèn)。其實(shí),有了精心的計(jì)劃和設(shè)計(jì),狀態(tài)通道可以幾乎保持無(wú)限開(kāi)啟,并且被用作中心和分支系統(tǒng),來(lái)助力整個(gè)經(jīng)濟(jì)和生態(tài)系統(tǒng)。
盡管我們是很簡(jiǎn)單地描述,其實(shí)狀態(tài)/支付通道是很復(fù)雜的。這里有幾個(gè)原因,其中一個(gè)就是這三步背后有很復(fù)雜的分散步驟。讓我們仔細(xì)來(lái)看看,這些都是什么,讓我們從以下開(kāi)始:
可以提交到區(qū)塊鏈。
為了讓狀態(tài)通道工作,參與者必須要保證他們可以在任何時(shí)候公開(kāi)通道目前的狀態(tài)。這就會(huì)導(dǎo)致很多重要的限制,例如有人必須要在線去保護(hù)每個(gè)參與者,直到通道關(guān)閉。
想象下,當(dāng)我們開(kāi)啟支付通道,我通過(guò)100個(gè)比特幣開(kāi)始,但是你是通過(guò)10個(gè)比特幣開(kāi)始。如果我們開(kāi)始簽名一個(gè)更新,轉(zhuǎn)賬10個(gè)比特幣給我,然后又簽名一個(gè)更新,轉(zhuǎn)賬50個(gè)比特幣給你,那么之后的更新很明顯是比早前的那個(gè)更有利益。如果你不幸地沒(méi)有網(wǎng)絡(luò)連接了,那么假設(shè)第二個(gè)更新永遠(yuǎn)不會(huì)發(fā)生,那么我就可以將第一個(gè)轉(zhuǎn)賬更新到區(qū)塊鏈上,然后從你那邊偷走50個(gè)比特幣!你需要做的,就是有人在線,并且有之后轉(zhuǎn)賬的復(fù)制,從而他們可以“覆蓋”前個(gè)轉(zhuǎn)賬,并且保證你的比特幣是被保護(hù)的。不一定非要是你- 你可以這個(gè)備份傳送給很多隨機(jī)的服務(wù)器,它們都是通過(guò)智能合約同意地,并且只要需要,就可以公開(kāi)轉(zhuǎn)賬(當(dāng)然,需要很少的手續(xù)費(fèi))。但是無(wú)論你怎么做,你需要保證最近的簽名更新是可以覆蓋所有其他的。這就到我們的第二個(gè)步驟:
每個(gè)新?tīng)顟B(tài)“覆蓋”之前的更新為了完成狀態(tài)通道的這部分工作,鎖定和解鎖機(jī)制必須要能夠合理地設(shè)計(jì),從而提交到區(qū)塊鏈的舊狀態(tài)更新有機(jī)會(huì)被替代他們的更新?tīng)顟B(tài)所糾正。最簡(jiǎn)單的方法,就是讓任何解鎖都開(kāi)啟計(jì)時(shí)器,在這段時(shí)間里,任何更新的更新能替代舊的更新(同時(shí)也重新啟動(dòng)計(jì)時(shí)器)。當(dāng)計(jì)時(shí)器完成的時(shí)候,通道就會(huì)關(guān)閉,并且狀態(tài)就會(huì)反應(yīng)收到的最后一個(gè)更新。計(jì)時(shí)器的長(zhǎng)度會(huì)為每個(gè)狀態(tài)通道特定選擇,從而平衡一個(gè)長(zhǎng)通道的關(guān)閉時(shí)間,同時(shí)也增強(qiáng)安全性,這會(huì)防止網(wǎng)絡(luò)連接或者區(qū)塊鏈問(wèn)題。另外,你可以通過(guò)金融懲罰的方式來(lái)構(gòu)建通道,從而任何向區(qū)塊鏈公開(kāi)不準(zhǔn)確更新的人,通過(guò)假設(shè)之后的轉(zhuǎn)賬不會(huì)發(fā)生,讓這些人失去更多。
但是這個(gè)機(jī)制并不是很重要,因?yàn)椋ɑ氐街八f(shuō)的點(diǎn))這個(gè)情況下的博弈論會(huì)讓事情變得很糟糕。這個(gè)機(jī)制可能只是理論上聽(tīng)起來(lái)沒(méi)問(wèn)題,但是可能從不會(huì)使用。其實(shí)通過(guò)計(jì)時(shí)器/懲罰過(guò)程,也許會(huì)導(dǎo)致多余的費(fèi)用,延遲或者其他不方便;如果讓某些人進(jìn)入到這個(gè)機(jī)制,并不能給你任何好處,狀態(tài)通道的更方可能只是通過(guò)人工同意最終的狀態(tài)通道,從而關(guān)閉通道。最終的關(guān)閉操作需要和正常的“中介”更新不同(因?yàn)樗鼤?huì)繞過(guò)上面的“覆蓋”機(jī)制),所以一旦在某個(gè)通道的部分狀態(tài)鎖定,參與者會(huì)只是簽署最終的轉(zhuǎn)賬。
這些“細(xì)節(jié)”不是特別重要。它最終分解開(kāi),可以理解為,參與者通過(guò)設(shè)置一個(gè)“法官”智能合約來(lái)打開(kāi)通道,互相簽署協(xié)議,如有必要,裁判可以強(qiáng)制執(zhí)行,然后通過(guò)在其中達(dá)成共識(shí)關(guān)閉通道,那么法官的判斷就不需要。只要“法官”機(jī)制是可靠的,這些承諾就可以被認(rèn)為是即時(shí)轉(zhuǎn)賬,法官只在特殊情況下上述,例如一方參與者消失。
當(dāng)然,這些細(xì)節(jié)只是人們認(rèn)為狀態(tài)/支付通道復(fù)雜的愿意之一。更多地是,比特幣支付通道是很復(fù)雜的。在比特幣中建立“法官”機(jī)制是非常錯(cuò)綜復(fù)雜的。但是一旦你對(duì)狀態(tài)通道有清晰的理解,你可以看到這僅僅來(lái)自于在受限的上下文中實(shí)現(xiàn)這個(gè)想法。基礎(chǔ)的智能合約機(jī)制,例如計(jì)時(shí)器機(jī)制以及根據(jù)上傳的簽名信息來(lái)選擇兩個(gè)不同的道路,這其實(shí)在比特幣中更難做到。某些功能是逐漸添加和建立的。通過(guò)看到支付通道只是特殊的廣泛“狀態(tài)通道”概念的子案例,我們發(fā)現(xiàn)這是更快寬泛的技術(shù),并且這個(gè)狀態(tài)通道能夠應(yīng)用到任何智能合約中,它們和定義的參與者之間進(jìn)行高頻的更新。你可以預(yù)見(jiàn),這種方式會(huì)在很多分布式應(yīng)用中出現(xiàn)。
現(xiàn)在,我們應(yīng)該對(duì)什么是“狀態(tài)通道”比較清楚了,接下來(lái)我們來(lái)看看側(cè)鏈技術(shù)。
什么是側(cè)鏈技術(shù)?側(cè)鏈技術(shù)是一種分開(kāi)獨(dú)立的區(qū)塊鏈,其會(huì)使用一個(gè)雙向錨定來(lái)依附于主鏈。
換句話說(shuō),你可以將資產(chǎn)移動(dòng)到側(cè)鏈上,也可以轉(zhuǎn)移回主鏈。
這個(gè)雙向錨定可以在主鏈和側(cè)鏈之間按照預(yù)先設(shè)定的速率進(jìn)行資產(chǎn)的內(nèi)部交換。初始的區(qū)塊鏈通常代表著主鏈,而且所有新增的區(qū)塊鏈都被定義為側(cè)鏈。
主鏈上的用戶首先需要將代幣轉(zhuǎn)移到輸出地址,在那里代幣會(huì)被鎖定,從而用戶不能消費(fèi)它們。一旦轉(zhuǎn)賬完成,在經(jīng)過(guò)安全時(shí)間的等待之后,信息就會(huì)在鏈上傳遞。在等待時(shí)間之后,相同數(shù)量的代幣就會(huì)在側(cè)鏈發(fā)布,讓用戶能夠獲得并且消費(fèi)它們。當(dāng)從側(cè)鏈轉(zhuǎn)移到主鏈的時(shí)候,相反的事情就會(huì)發(fā)生。
聯(lián)盟聯(lián)盟是指作為主鏈和其中一個(gè)側(cè)鏈中間點(diǎn)的群體。這個(gè)群體在用戶鎖定和釋放代幣的時(shí)候,就會(huì)確定。側(cè)鏈的創(chuàng)建者可以選擇聯(lián)盟的數(shù)量。但是聯(lián)盟結(jié)構(gòu)的一個(gè)問(wèn)題在于,它會(huì)在主流和側(cè)鏈之間添加一個(gè)層級(jí)。
側(cè)鏈對(duì)于他們自身的安全性是需要負(fù)責(zé)的。如果沒(méi)有足夠的算力來(lái)確保側(cè)鏈的安全,就可能會(huì)被黑客侵入。因?yàn)槊總€(gè)側(cè)鏈都是獨(dú)立的,如果被入侵,那么損害就會(huì)包含在側(cè)鏈上,不會(huì)影響主鏈。
相反地,如果主鏈被入侵了,那么側(cè)鏈仍然可以允許,但是錨定就會(huì)失去價(jià)值。
側(cè)鏈需要他們自己的礦工。這些礦工能夠通過(guò)“聯(lián)合挖礦”來(lái)獲得激勵(lì),同種算法,同時(shí)挖礦,并且可以獲得兩種不同的數(shù)字貨幣。
現(xiàn)在,我們對(duì)側(cè)鏈也有所了解了。那么,讓我們來(lái)比較它們之間的區(qū)別。
它們?cè)噲D解決什么問(wèn)題?側(cè)鏈和狀態(tài)通道是用于來(lái)提高區(qū)塊鏈的擴(kuò)容性。
它們都符合類似的模型。
? 鎖定狀態(tài)/資產(chǎn)。
? 在鏈下進(jìn)行轉(zhuǎn)賬
? 在狀態(tài)通道/側(cè)鏈解鎖狀態(tài)/資產(chǎn)
但是盡管這樣類似,其中也有很多區(qū)別,主要是在狀態(tài)通道中,我們不使用單獨(dú)的區(qū)塊鏈,但是在側(cè)鏈中,我們使用單獨(dú)的區(qū)塊鏈。那么我們來(lái)看看,最終的結(jié)果是什么。
這兩個(gè),誰(shuí)是更好的擴(kuò)容方案?
為了得到答案,讓我們來(lái)看看他們各自的優(yōu)勢(shì)和劣勢(shì)。
狀態(tài)通道的好處狀態(tài)通道有很強(qiáng)的隱私性能:這是因?yàn)槿魏问虑槎际前l(fā)生在通道中的,而不是公開(kāi)廣播并且記錄在鏈上。只有打開(kāi)和關(guān)閉轉(zhuǎn)賬必須是公開(kāi)的。但是在側(cè)鏈系統(tǒng)中,每筆轉(zhuǎn)賬都是發(fā)布在側(cè)鏈上的,然后側(cè)鏈上的每個(gè)參與者都會(huì)收到,然而事實(shí)上,你并沒(méi)有和側(cè)鏈上所有參與者交互。
? 狀態(tài)通道有即時(shí)的最終確定性,也就是說(shuō)只要兩方簽署了狀態(tài)更新,就能認(rèn)為狀態(tài)結(jié)束了。雙方對(duì)其能夠有很高的保證,如有需要,他們可以“強(qiáng)制”將狀態(tài)放入在鏈上。但是就像上面討論的那樣,狀態(tài)通道關(guān)閉,考慮到轉(zhuǎn)賬的安全性等級(jí),可能會(huì)需要花費(fèi)各種時(shí)間。然而在側(cè)鏈中,你在另一邊有區(qū)塊鏈。所以,最終結(jié)果取決于側(cè)鏈的挖礦算力。
狀態(tài)通道的缺陷? 狀態(tài)通道需要所有參與者100%的在線:就像我們討論的,如果任何參與者變得不在線,那么對(duì)他們來(lái)說(shuō)成本是很高的。參與者可以使用別人來(lái)作為代表,如果他掉線,但是代表被攻擊的可能性成了狀態(tài)通道的問(wèn)題。但是在側(cè)鏈中,你就不需要一直在線。
? 狀態(tài)通道最好是用于一系列參與者:這是因?yàn)榉ü俸霞s(用來(lái)鎖定狀態(tài)的合約)必須總是知道參與者/個(gè)體(也就是地址)是這個(gè)通道的一部分。我們可以添加和移除參與者,但是需要每次都對(duì)合約進(jìn)行改變。但是在側(cè)鏈,對(duì)于參與者的轉(zhuǎn)移就沒(méi)有這類限制。
? 狀態(tài)通道對(duì)于要長(zhǎng)期進(jìn)行很多狀態(tài)更新的參與者來(lái)說(shuō),尤其有用:這是因?yàn)樵诓渴鸱ü俸霞s的時(shí)候,創(chuàng)建通道有初始成本。但是一旦部署了,通道內(nèi)部每個(gè)狀態(tài)的更新都非常便宜。
側(cè)鏈的好處? 側(cè)鏈?zhǔn)怯谰玫?。如果現(xiàn)在已經(jīng)有了,你不需要為了特定目的,來(lái)創(chuàng)建你自己的側(cè)鏈:側(cè)鏈在完成的時(shí)候,就被創(chuàng)建并且維護(hù)。我們不會(huì)關(guān)閉側(cè)鏈,而是在側(cè)鏈上鎖定資產(chǎn),然后轉(zhuǎn)移到主鏈。這對(duì)于那些想在鏈下進(jìn)行特定任務(wù)的情況,是非常有幫助的(例如,狗狗幣轉(zhuǎn)賬),因?yàn)樽罱K都會(huì)到同個(gè)側(cè)鏈。所以,你不必為每個(gè)新的參與者來(lái)創(chuàng)建不同的側(cè)鏈。但是在狀態(tài)通道,你總說(shuō)需要?jiǎng)?chuàng)建新的通道,然后添加新的參與者。但是,有些項(xiàng)目也使用了別的方法,可以不用為每個(gè)參與者都創(chuàng)建新的通道。你可以通過(guò)其他參與者不直接地在你和接收者之間建立通道。
? 側(cè)鏈可以讓數(shù)字貨幣和對(duì)方交互: 他們會(huì)添加了靈活性,同時(shí)也讓開(kāi)發(fā)者在把數(shù)據(jù)推送到主鏈之前,能夠進(jìn)行軟件測(cè)試。傳統(tǒng)銀行功能,例如發(fā)放跟蹤股權(quán)的所有者,可以在將他們轉(zhuǎn)移到主鏈之前,在側(cè)鏈進(jìn)行測(cè)試。
側(cè)鏈的壞處? 側(cè)鏈需要很多的初始投資才能開(kāi)始:為了創(chuàng)建側(cè)鏈,我們需要有足夠的礦工,從而網(wǎng)絡(luò)可以防止攻擊者,保持安全。同時(shí),我們必須要保證它們是在線并且運(yùn)行的。但是在狀態(tài)通道中,沒(méi)有區(qū)塊鏈。所以,也不需要這類需求。
? 對(duì)于側(cè)鏈來(lái)說(shuō),聯(lián)盟是需要的:這會(huì)在主鏈和側(cè)鏈之間增加另個(gè)層級(jí)。這對(duì)于攻擊者來(lái)說(shuō),是另一個(gè)脆弱的點(diǎn),因?yàn)榭梢怨袈?lián)盟。因此在狀態(tài)通道中,我們只需要智能合約來(lái)這樣做。
其實(shí)這兩個(gè)擴(kuò)容方案之間的競(jìng)爭(zhēng)是很大的。塵埃落地,但是這兩者仍然還發(fā)展地很好。由于研究還在繼續(xù),現(xiàn)在很難決定到底誰(shuí)是獲勝者。也許他們會(huì)合作來(lái)形成另外的混合解決方案,來(lái)為解決擴(kuò)容問(wèn)題?,F(xiàn)在只能等待,看看時(shí)間會(huì)給我們帶來(lái)什么。