注意這篇文章你已經(jīng)了解Smart Contract 的話理解比較簡(jiǎn)單,如果不了解Smart Contract 的話讀起來(lái)會(huì)有點(diǎn)吃力。
Raiden是一個(gè)基于Ethereum (以太坊)的鏈下交易方案,主要想解決三大問(wèn)題:速度、費(fèi)用與隱私。
速度跟費(fèi)用是在Ethereum上蠻需要解決的問(wèn)題,依照目前的資訊目前網(wǎng)路上每秒的平均交易數(shù)量為10個(gè),而交易費(fèi)雖然可以每次Transaction都可以調(diào)整gas price,不過(guò)網(wǎng)路雍塞時(shí)卻不得不調(diào)高來(lái)讓自己的交易可以完成,最近的加密貓之亂讓整個(gè)Ethereum網(wǎng)路擁塞想必有些支援以太幣(Ether)的交易所像是熱鍋上的螞蟻一樣吧。
雖然Sharding與Plasma等等解決交易速度的擴(kuò)展解決方案愈來(lái)愈常提及,不過(guò)距離正式的釋出似乎都還需要一段時(shí)間的醞釀。而Raiden在目前看起來(lái)是完成度較高的擴(kuò)展方案。
注:我沒(méi)介紹隱私方面有什么問(wèn)題,因?yàn)橛X(jué)得速度跟費(fèi)用這兩個(gè)問(wèn)題比較嚴(yán)重。
速度與交易費(fèi)的問(wèn)題
但這實(shí)際上問(wèn)題到底是出在哪里呢?
在速度方面,因?yàn)樗薪灰锥夹枰W(wǎng)共識(shí)的關(guān)系,所以每個(gè)交易都須要等到新的區(qū)塊被算出來(lái)時(shí),并且此筆新交易需要包含在其中之后才會(huì)成立,依照目前Ethereum 的出塊速度交易可能會(huì)需要數(shù)十秒到數(shù)分鐘才有辦法確認(rèn),在網(wǎng)絡(luò)壅塞時(shí)甚至需要等更久。
交易費(fèi)的狀況則是因?yàn)镋thereum 中所設(shè)計(jì)的gas 機(jī)制的關(guān)系,每筆交易都會(huì)支付給礦工一筆交易費(fèi)用,這交易費(fèi)用如果放到比較大額的交易時(shí)還好,不過(guò)如果在小額交易時(shí)費(fèi)用比例就會(huì)太高。比如說(shuō)最近幾次我完成的交易費(fèi)用大約在0.3USD~0.37USD 之間,如果只是作幾百塊臺(tái)幣的交易那就顯然太貴了。
Raiden 網(wǎng)絡(luò)的解決方案
最前面有提到一個(gè)讓人很疑惑的句子:Raiden 是一個(gè)基于 Ethereum (以太坊)的鏈下交易方案,既然是鏈下解決方案,怎么會(huì)又基于Ethereum呢?
因?yàn)镽aiden 是一個(gè)輔佐型的網(wǎng)絡(luò),利用開(kāi)啟通道(Channel) 來(lái)處理一批次的交易,再用一些加密演算法的機(jī)制在鏈下紀(jì)錄并核實(shí)真正的交易數(shù)據(jù),最后在關(guān)閉Channel 時(shí)將交易數(shù)據(jù)送入區(qū)塊鏈中進(jìn)行實(shí)際的加密貨幣交易與核實(shí)。這樣實(shí)際在區(qū)塊鏈上的交易筆數(shù)就會(huì)減少許多,達(dá)成減低交易費(fèi)與加速的目的了。
聽(tīng)起來(lái)很神奇(確實(shí)也是),但是要達(dá)成這樣的目的需要有許多細(xì)節(jié),會(huì)在下面一一的解釋。
首先要先說(shuō)明Raiden 是一個(gè)多節(jié)點(diǎn)的網(wǎng)絡(luò),但是為了先從簡(jiǎn)單的情境開(kāi)始,我們會(huì)先說(shuō)明兩個(gè)節(jié)點(diǎn)之間要怎么利用Raiden 的原理達(dá)成減少交易費(fèi)以及加速的目的,最后再解釋在許多Raiden 的節(jié)點(diǎn)所形成的網(wǎng)路要怎么達(dá)成目的。
另外Raiden 可以轉(zhuǎn)任何ERC20 的token,我們以下雖然用以太幣Ether (ETH) 作為范例,不過(guò)實(shí)際上會(huì)被包裝成一個(gè)相容于ERC20 的token。
先想像一下…
因?yàn)槲疫€沒(méi)看過(guò)Raiden 的服務(wù)或錢(qián)包長(zhǎng)怎樣,為了比較好的解釋跟想像Raiden Network,請(qǐng)先想像使用Raiden 時(shí)會(huì)像是悠游卡一樣的儲(chǔ)值卡app,不一樣的是它是一個(gè)app,平常你會(huì)到捷運(yùn)的儲(chǔ)值機(jī)儲(chǔ)值悠游卡,在Raiden Network 底下你需要要一個(gè)app 把你的Ether 以太幣儲(chǔ)值入Raiden 里面。
你可以在這個(gè)app 上面看到你的Ethereum 帳戶與Raiden 帳戶里面分別有多少余額、列出你曾經(jīng)在Raiden 網(wǎng)絡(luò)上作的轉(zhuǎn)帳,最后app 底端有三個(gè)功能:
· 儲(chǔ)值(Deposit):把以太幣從Ethereum 帳戶轉(zhuǎn)到Raiden 帳戶
· 提領(lǐng)(Withdraw):把以太幣從Raiden 帳戶轉(zhuǎn)回Ethereum 帳戶
· 轉(zhuǎn)帳(Transfer):把以太幣轉(zhuǎn)給同樣在Raiden 網(wǎng)絡(luò)里面的帳戶
先談兩個(gè)節(jié)點(diǎn)之間的互動(dòng)
說(shuō)了這么多,終于要開(kāi)始解釋兩個(gè)節(jié)點(diǎn)之間的互動(dòng)了。前面有提到Raiden 網(wǎng)絡(luò)的原理是在Ethereum 上開(kāi)一個(gè)通道來(lái)處理多筆交易,讓我們來(lái)好好檢視一下之中的細(xì)節(jié)。
開(kāi)啟通道
首先,其實(shí)通道(Channel) 其實(shí)就是一個(gè)Smart Contract。當(dāng)你打開(kāi)了一個(gè)通道后就是布署了一個(gè)新的Smart Contract。舉例來(lái)說(shuō)Bob 跟Alice 之間經(jīng)常一起吃飯,三天兩頭就要互相Cover 飯錢(qián),他們之間的互動(dòng)會(huì)是這樣:
上面的這張圖虛線以上是區(qū)塊鏈上的互動(dòng),虛線以下是Raiden 網(wǎng)絡(luò)上的互動(dòng)。
首先他們要先開(kāi)啟一個(gè)通道(部署一個(gè)Smart Contract),接著兩個(gè)人都先放5 以太幣到這個(gè)Smart Contract 里面,讓資金足夠可以在兩人之間流動(dòng)。當(dāng)這個(gè)Smart Contract 已經(jīng)儲(chǔ)存了兩人的以太幣后,雙方就可以開(kāi)始在Raiden 網(wǎng)絡(luò)中進(jìn)行交易了。當(dāng)Bob 在Raiden 網(wǎng)絡(luò)送出第一筆1 ETH 的交易給Alice 時(shí),此筆交易并不會(huì)發(fā)到區(qū)塊鏈上,取而代之的是Bob 會(huì)將此筆交易資訊包含雙方在通道中的余額利用自己的私鑰簽章過(guò)后,送給Alice 保存此筆資訊,此筆資訊稱為Balance Proof。當(dāng)Alice 也通知Bob 收到Balance Proof 后,這筆交易在Raiden 上面就會(huì)成立了。
在這個(gè)時(shí)間點(diǎn),雙方都會(huì)有通道上的余額資訊,如Alice會(huì)擁有一份Balance Proof Bob: 4 ETH, Alice 6 ETH并且已經(jīng)經(jīng)過(guò)了Bob的簽章。
接下來(lái)的三筆交易都會(huì)用同樣的方式僅在Raiden 當(dāng)中檢查、簽名與傳送,這些資訊都不會(huì)上到Ethereum區(qū)塊鏈網(wǎng)絡(luò)上。
另外在Raiden 網(wǎng)絡(luò)上面并不需要保存所有的交易紀(jì)錄,僅需要保存最后的余額即可。
關(guān)閉通道
當(dāng)這兩個(gè)節(jié)點(diǎn)的任何一個(gè)節(jié)點(diǎn)想要把在Smart Contract 的儲(chǔ)值的錢(qián)領(lǐng)回時(shí),可以關(guān)閉通道(Close Channel)。
假設(shè)是Bob想要關(guān)閉通道,則Bob呼叫Smart Contract的close(),此時(shí)Bob會(huì)在close()的參數(shù)內(nèi)附上自己最新取得的一次Balance Proof,同時(shí)在一段時(shí)間內(nèi)Alice也可以呼叫updateTransfer()更新雙方余額數(shù)據(jù)。
當(dāng)雙方都更新完數(shù)據(jù)后,此通道可以被任何一個(gè)人(不限于雙方,可以是Ethereum上的任一節(jié)點(diǎn))觸發(fā)settle()將雙方的錢(qián)都發(fā)回。Bob跟Alice當(dāng)初都存了5 ETH進(jìn)去這個(gè)通道,最后余額的狀況則是發(fā)回給Bob 6 ETH,給Alice 4 ETH。
這邊的重點(diǎn)就是因?yàn)槊總€(gè)人擁有的Balance Proof都會(huì)經(jīng)過(guò)對(duì)方的私鑰簽名,所以不論是哪一方呼叫了close()或是updateTransfer(),此通道的Smart Contract都可以利用Solidity中的ecrecover()驗(yàn)證簽名,當(dāng)Balance Proof驗(yàn)證正確后,Smart Contract就可以確認(rèn)這筆余額雙方都確認(rèn)無(wú)誤。
整個(gè)Raiden 網(wǎng)絡(luò)
剛剛先說(shuō)明了兩個(gè)節(jié)點(diǎn)在Raiden 網(wǎng)絡(luò)的運(yùn)作狀況,但是如果每次都要在需要支付的雙方開(kāi)一個(gè)通道來(lái)轉(zhuǎn)帳顯得很不合理,所以Raiden 網(wǎng)絡(luò)上的多個(gè)節(jié)點(diǎn)就派上用場(chǎng),假如說(shuō)Alice (A) 現(xiàn)在要轉(zhuǎn)帳給David (D),他們之間其實(shí)并不需要雙方存在直接通道,僅需要Alice 跟David 都在Raiden 網(wǎng)絡(luò)上即可,也就是說(shuō)他們都跟Raiden 網(wǎng)絡(luò)上的其中一些節(jié)點(diǎn)之間已經(jīng)開(kāi)啟了通道。
原圖出自Raiden Network 101,但是把格式改成橫的方便閱讀
當(dāng)Alice要轉(zhuǎn)帳給David時(shí),首先他要先在Raiden中找到一條通往David節(jié)點(diǎn)的路徑,找到后就可以借用這些節(jié)點(diǎn)之間的通道把以太幣轉(zhuǎn)給David。而在整個(gè)傳輸完成前,這條通道上交易會(huì)使用Hash Lock鎖定住,直到David在通道上確認(rèn)已經(jīng)收到款項(xiàng),跟Alice用SecretRequest要求解鎖的Key后,整個(gè)交易才會(huì)解鎖。
最后每個(gè)傳送者都會(huì)傳送Balance Proof 給下一個(gè)接收者,最終的狀態(tài)則是在這個(gè)通道上的所有人,都會(huì)擁有上一個(gè)的Balance Proof。比如說(shuō)Bob (B) 有Alice (A) 簽名過(guò)的Balance Proof,Carol (C) 有Bob (B) 簽名過(guò)的Balance Proof,這些Balance Proof 就可以在關(guān)閉通道時(shí)使用。
而這些通道不必然要馬上關(guān)閉,因?yàn)檫@些通道還可以用在其他人的轉(zhuǎn)帳,這樣就可以在不需要Ethereum 交易費(fèi)的狀況下繼續(xù)轉(zhuǎn)帳。這個(gè)時(shí)候讓我們?cè)倩氐皆镜哪菑埐輬D,你的Raiden app 就像是儲(chǔ)值卡一樣,可以快速地拿它來(lái)做小額交易,直到你認(rèn)為需要把錢(qián)提領(lǐng)回你的Ethereum 帳號(hào)時(shí),才按Withdraw 提領(lǐng)把錢(qián)領(lǐng)出來(lái)。在你的通道還沒(méi)關(guān)閉時(shí),都可以透過(guò)Raiden 網(wǎng)絡(luò)轉(zhuǎn)帳給另外一個(gè)人。
由于不需要全網(wǎng)共識(shí)的關(guān)系,所以Raiden 可以在相對(duì)快的速度當(dāng)中完成交易。另外在這邊要說(shuō)Raiden 網(wǎng)絡(luò)中傳輸還是會(huì)有費(fèi)用的,總共有兩種,其中一種Protocol level fees 會(huì)在你轉(zhuǎn)帳時(shí)收取,不過(guò)理論上費(fèi)用會(huì)非常少。另外一個(gè)費(fèi)用是Peripheral fees,如果你只有使用Raiden 的輕節(jié)點(diǎn)(light node) 時(shí)因?yàn)樽陨頉](méi)有跑完整的Raiden 服務(wù)的關(guān)系,所以會(huì)需要全節(jié)點(diǎn)替你提供服務(wù),所以會(huì)收取費(fèi)用。
但如果是跑全節(jié)點(diǎn)(full node)就不需要收取費(fèi)用,反而還可以因?yàn)樘峁┺D(zhuǎn)發(fā)服務(wù)而從輕節(jié)點(diǎn)那邊收取到Peripheral fees。
結(jié)論
總之Raiden Network 就是利用上述的方式用鏈下的方案來(lái)解決目前Ethereum 交易速度與費(fèi)用的問(wèn)題,不過(guò)我目前都僅是在文件上的閱讀與理解,還沒(méi)試著跑過(guò)他們的網(wǎng)絡(luò)來(lái)實(shí)際體驗(yàn)一下效果。所以實(shí)際上到底能不能解決問(wèn)題還需要更深入的探討才能知道目前實(shí)作的狀況。
另外在Raiden Network 要解決交易費(fèi)太少的這個(gè)問(wèn)題上,其實(shí)在透過(guò)多個(gè)節(jié)點(diǎn)轉(zhuǎn)送交易時(shí),交易費(fèi)的高低會(huì)依照中間經(jīng)過(guò)的節(jié)點(diǎn)數(shù)量會(huì)有所不同,數(shù)量愈高交易費(fèi)也會(huì)伴隨著提高。所以問(wèn)題會(huì)回到在Raiden 網(wǎng)絡(luò)上找到的最短路徑所產(chǎn)生的交易費(fèi)是不是可以比原本直接在Ethereum 區(qū)塊鏈上直接交易要來(lái)得低。
評(píng)論
查看更多