昨天寫的鏈下交易系列的首篇《鏈下交易梳理之一 閃電網絡》深入(沒法淺出)了頭牌項目:閃電網絡。今天接着整理下最近一些同類項目。

首先,頭牌也是有缺陷的。除了前一篇文章裏提到過的安全性問題以及懲罰措施過於嚴厲之外,還有不少有爭議的話題。比如:

  1. 小額高頻交易是沒有商業價值和潛力的。這基本上就等於直接掀了閃電網絡的桌子,畢竟這本來是閃電網絡立足之本和倡導的方向。

  2. 閃電網絡的通道里允許交易的金額上限 和 存入“用來注資的多重簽名地址”的資金金額是強相關的。這樣一來,嚴格的通道金額上限就搞的閃電網絡有點僵硬:

    1. 繼續用《鏈下交易梳理之一 閃電網絡》中的例子,如果 Alice 和 Bob 分別往他們的通道里存入了 0.5BTC,那麼每一方最多隻能支付給對方 0.5BTC,不能更多了。在極端期況下,Alice 存入了 0.99…99BTC,Bob 存入了 0.00…01BTC,那麼通道內所允許支付的總金額最多是將近 1BTC。如果要涉及到更大的金額的話,只能再開一個新的通道,通過鏈上交易存入更多的 BTC。

    2. 相類似的,如果在一個通道里只抵押了 1 BTC,是沒辦法參與到“高達”1.1BTC 的多跳支付場景的,因爲 HTLC 規定了支付行爲是從最終收款方一側開始一段段逐一實現的(參看《跨鏈梳理之哈希鎖定 及 IOV 簡評》中 1.3 節)。說起來有點類似借記卡,裏面存了多少錢才能花多少錢。不過區別在於,當不夠花的時候,還要去銀行排個隊再辦張新卡,存入更多的錢纔行,這樣想下真的還蠻不方便的。

    3. 另一方面,如果不想頻繁的創建新通道,那就需要多存一點 BTC 了。不過如此一來,爲了使得整個閃電網絡運作起來,需要大量的 BTC 被鎖定在各個通道中。

    4. 路由難度很大。由於通道和通道間可以週轉的金額上限不同,一旦某些場景下需要支付的金額稍大一些,那麼在整個閃電網絡內找到一條有效的路徑來跨越多個通道並串起 HTLC 多跳支付將並不再是件非常容易和有效率的事情了。

    5. 通道之間的不平衡性以及對通道允許交易金額的嚴格要求,有可能會導致中心化的趨勢和風險。比如某大機構可以鎖入更多的資金到閃電網絡中,由此提供充沛的流動性,那麼大家就都會紛紛和他建立起通道來,這個機構就變成了一箇中心化的樞紐。下圖是閃電網絡 testnet 中網絡結構圖。

鏈下交易梳理之二 Liquidity.network

再來看下今天的主角 Liquidity.network,基本上也是從上述的幾個問題點入手,試圖找到改進方案。

首先 Liquidity 是基於以太坊的鏈下擴展,和雷電直接競爭。原先不管是閃電網絡還是雷電,通道都是在交易雙方之間兩兩建立的,而且是雙向通道,然後通過在衆多已有通道間的路由做到陌生人之間的多跳支付。

鏈下交易梳理之二 Liquidity.network

而 Liquidity 則拋棄了雙人通道的概念,轉而直接引入了多人間鏈下交易的樞紐(N-party Hub),而且多個樞紐間可以互聯組成整個網絡。我們一條一條來擼一下。

1. 樞紐(Hub)

樞紐不再是個封閉的兩人世界,而像一個開放的信用合作社,任何人都可以加入某個特定的樞紐(看到第四節就會明白,其實更像一個去中心化交易所)。

新用戶加入樞紐也被設計成了鏈下行爲,從而跳過了閃電網絡那樣鏈上創建交易雙方多重簽名地址的成本和花銷(但是充值和取現依舊會是鏈上行爲,詳情可見第四節)。

存入樞紐內的資金可被視作接受統一管理。另外,項目方的期許是每個 Hub 裏有至少十萬個成員參與其中。

鏈下交易梳理之二 Liquidity.network

2. 整個網絡內需要鎖定的資金可以只是最近十分鐘內的平均交易額度,而不是所有交易金額加起來的總和。舉個例子,假設 100 個用戶之間會發生各式各樣的支付交易,月平均交易量達 100BTC:

1. 對於閃電網絡來說,那麼參與其中的每個人都要押入 100BTC,總共需要將一萬個 BTC 鎖定到閃電網絡中。

2. 同樣情況下,對 Liquidity 來說,將時間縮短到十分鐘,那麼平均交易量也就縮小了 4464 倍(4464 = 31 天 * 24 小時 * 60 分鐘 / 10 分鐘,話說官方還是有點“小無恥”的,白皮書裏也是直接算一個月 31 了,畢竟這樣數據最好看),於是所需要的抵押總額也就縮小了 4464 倍(其實看下去就會發現押金什麼的感覺已經不重要了)。

3. 樞紐減少路由的壓力(假設大部分樞紐都含有成百上千個用戶可以自給自足)。而且樞紐之間也可以互聯,如果同一個用戶同時加入了連接成環的多個樞紐,那麼抵押進這些樞紐的金額可以在彼此之間動態調劑。這個想法是從創始人早先的一個研究成果 REVIVE 引申而來的。REVIVE 是運用在傳統的雙人支付通道中的一個押金再平衡的協議,使用了線性規劃做優化計算。比如下圖裏是一個最簡單的例子,三個人 ABC 每人都擁有 100 錢,通過雙向支付通道形成了一個環,但是通道內的金額分配非常不平衡 :

鏈下交易梳理之二 Liquidity.network

AC 之間,AB 之間和 BC 之間各自擁有了一條通道。在 AC 通道里,當前 A 賬面上有 100,C 啥都沒有,而 AB 通道里,A 啥都沒有,但是 B 有 100。如果這時候 A 要再給 B 轉 50,或者有個多跳支付交易希望通過 AB 通道來走(比如畫面外的一個付款人付給 A 以 50,A 付給 B 以 50,B 再付給畫面外的最終收款人 50),這裏一個比較容易想到的思路就是:把 AC 通道中屬於 A 的 100 裏 50 通過“乾坤大挪移”放到 AB 通道里給 A 使用。

乾坤大挪移流程如下:

隨機在 ABC 中選取一個領導者來引導這個再平衡的過程,期間三個通道需要全部凍結,通過每個人的偏好和當前的需要構建出一系列的鏈下支付交易,交給所有人簽字,都通過後,就強制原子性交易執行。比如在上面這個例子裏,再平衡的結果可以是讓 A 轉給 C 以 50,C 轉給 B 以 50,B 再轉給 A 以 50。這個時候 ABC 每個人依舊每人擁有 100 錢,誰也沒多誰也沒少,不過在每個通道內的所有賬本上都有 50 了。具體的再平衡步驟如下圖:

鏈下交易梳理之二 Liquidity.network

4. 同時 Liquidity 也提到了實現去中心化交易所的構想,主要給鏈下原子性交換打了高光。這個其實也不是什麼新鮮玩意兒,《跨鏈梳理之哈希鎖定 及 IOV 簡評》中 1.4 節也提到了閃電網絡使用 HTLC 實現了該功能,並出了 demo。當然 Liquidiity 如果能實現這個功能也是極好的,而且 Liquidity 的開發基於以太坊,會天然地支持 ETH 和 ERC Token 們,使用範圍也會比基於 BTC 的閃電網絡更加寬些,比如可以幫助 Token ICO 做到 ETH 和 Token 的實時兌換。

5. 架構層面來看,目前也只有比較粗線條的介紹。如下圖,鏈下的 Liquidity 網絡服務器(web server)通過連上 Liquidity 智能合約(smart contract),來創建新的樞紐。

鏈下交易梳理之二 Liquidity.network

這裏的網絡服務器是一箇中心化的存在,不過問題並不大,因爲用戶只是用它作爲前端應用來部署合約,創建新樞紐和進行轉賬交易等而已。每個人都可以創建新樞紐。

碼農看了下 Liquidiy 的第一個 demo 就是關於這個網絡服務器的,使用體驗有點類似於去中心化交易所,比如以德、Idex 之流。

鏈下交易梳理之二 Liquidity.network

如上圖,加入樞紐後,用戶需要把錢先從自己錢包“充值”到 Liquidity 鏈下,才能轉賬給網絡內其他人。不過,關於 Liquidity 智能合約具體怎麼個結構怎麼個邏輯,怎麼實現的充值,最終怎麼廣播上鍊等等內容目前找不到任何細節,導致碼農看的有點懵。

越來越多的疑問着實令碼農難受,所以還是跑去了白皮書中說的已經運作起來(operational,呵呵)的 https://wallet.liquidity.network 直接去驗證下想法。結果,賣個關子,一步一步來別急。

4.1 註冊登陸

Liquidity 目前跑在以太坊的 Ropsten 測試網絡上,需要將 MetaMask 切換過去,然後我們見到了以下的註冊頁面,

鏈下交易梳理之二 Liquidity.network

點擊註冊,需要對一段信息進行簽名來完成授權,看下圖,亂碼可以忽略:

鏈下交易梳理之二 Liquidity.network

點擊“簽名(Sign)”按鍵,進入到了主界面,感覺比 demo 裏的界面要更豐富一些,不過看起來依舊和以德之流差不多。

鏈下交易梳理之二 Liquidity.network

4.2 充值

由於是測試網絡,碼農從“以太水龍頭”裏搞了 3ETH 來做測試,以下是其中一筆交易 https://ropsten.etherscan.io/tx/0xc9d65932d488ff1546ab0f0c771414bbe4dd2fcd808514c7e829c7b8b59da225。有錢之後,刷新下 Liquidity 網頁,認出了測試錢包中的 3ETH:

鏈下交易梳理之二 Liquidity.network

接着讓我們看看到底是怎麼充值的。碼農選擇直接充 2ETH 進去(有錢任性, 嗯),這裏操作的基本單位是 wei,1 wei = 10^(-18) ETH,

鏈下交易梳理之二 Liquidity.network

點下 Deposit 按鍵的那一刻我的心情是複雜的,因爲我看到了下面這個窗口 …

鏈下交易梳理之二 Liquidity.network

還真的是以德 …. 點擊 Submit 後,我們就得到了這個 2ETH 的轉賬交易 https://ropsten.etherscan.io/tx/0xbce901d956607c750cbf07875b01ac6d04c63a23edf1d316f7d9b226ca8d7f5f。所以說,這收款地址還真是 Liquidity 的智能合約麼,而且還真是類似以德這種的鏈上充值。

再次刷新頁面後,我們得到了下圖:除了上方圓環裏的鏈上 / 鏈下資產比例長的極其不像 2:1 以外,其他還都很正常。Liquidity 認出了存入它樞紐的 2ETH,以及碼錢包裏還剩下的不足 1ETH 餘額(扣除了前一筆轉賬的手續費)。另外,從這個頁面可以看到,充值到 Liquidity 裏的 2ETH 已經被算做了鏈下資產(藍紫色的 offchain 條)。接下來,在 Liquidity 網絡內中所有的轉賬都是由 Liquidity 智能合約內部處理的,增減都會反應在這個鏈下資產餘額中。

鏈下交易梳理之二 Liquidity.network

4.3 轉賬

再來試下轉賬,創建了一個新賬戶,完成註冊,回到第一個賬戶,向新賬戶轉入 0.5ETH。

鏈下交易梳理之二 Liquidity.network

系統接連提示了 2 次簽名請求,

鏈下交易梳理之二 Liquidity.network鏈下交易梳理之二 Liquidity.network

然後得到了成功的信息。

鏈下交易梳理之二 Liquidity.network

以及發送到服務器端的數據,

鏈下交易梳理之二 Liquidity.network

不過令人悲傷的是,轉賬遲遲沒有生效,我試了幾次都失敗了,估計還有 bug 吧 …

4.4 取現

另外取現目前也還沒做好,允許取現的最大金額爲 0wei…. 也就是不管填多少金額,都會報錯說當前取現金額太高,

鏈下交易梳理之二 Liquidity.network

綜上,通過驗證我們就理解了,Liquidity 其實這就是一個去中心化交易所,充值和取現都會觸發鏈上交易。而它的主要亮點在於,當資金存入 Liquidity 後,內部的交易都會是鏈下交易,而不是像以德那樣每執行一筆買賣交易都需要經過一次鏈上確認。

對碼農而言,可能是因爲 Liquidity 一直在和閃電網絡在做對比,讓我先入爲主的認爲他的很多操作會和閃電網絡神似,並且在此基礎上再做改進,實際測試才發現兩者相去甚遠。當然,Liquidity 所走的去中心化交易所的道路確實是可以滿足:

  1. 充值抵押到 Liquidity 網絡的資金是彈性的,並且用戶有並且隨時可以取出或充入更多。

  2. 支付基本不需要路由,打錢過去就行了。樞紐充當了“黃頁”的功能。

  3. 同一個賬戶在 n 個不同樞紐(交易所間)的鏈下資金再平衡(對應 n 個 Liquidity 內部地址)。

不過 Liquidity 的白皮書寫的稍微水了點,具體怎麼實現樞紐內部的鏈下處理的細節都沒有說,不過從 4. 3 一節的轉賬測試來看,我猜是直接調用了某合約完成雙方賬戶餘額更新,畢竟以太坊是基於賬戶模型的,沒有任何的 UTXO。總之,感覺寫的算不上技術白皮書,更像是個項目介紹書,大部分都是定性的概念介紹,並沒有涉及太深的技術細節,這點和閃電網絡的白皮書真的沒法比。閃電網絡的技術白皮書深入到每個小細節以及各種“勾心鬥角”的考量,看似難讀,其實是真的好讀,看完後通體舒暢,當浮一大白。可能是 Liquidiity 急於把整個大概念先推出來搶佔風口,然後再慢慢擼技術細節吧。我看創始人 Arthur Gervais 在今年年初接受提問的視頻中也還是對核心架構和信任模型等具體問題直接打太極繞過了,說是會在日後推出更加詳細的技術文檔。