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