Lumino 交易壓縮協議(LTCP),這是根鏈(RSK)鏈下支付網絡 Lumino 網絡的關鍵部分。相同的區塊空間下,LTCP 協議可以使鏈上的交易量比傳統的區塊交易量變得更大。 LTCP 協議是對 RSK 平臺的改進,將能使網絡達到 2000 筆交易/秒。不過,LTCP 也可以以一個軟分叉的方式部署到比特幣網絡,屆時比特幣的吞吐量將可以增加到 100 筆/秒,甚至更多,這取決于使用模式。LTCP 協議可以使 Lumino 網絡滿足 10 億用戶的需求。
前言
正如網絡處理信息一樣,比特幣和加密貨幣是構建一種新型網絡的基石,一種不僅可以適用于知識共享,還有可以用于價值交換的網絡。這種價值的形式可能是產權、股票、貨幣或者其他代幣,例如自治組織的投票權。價值互聯網的誕生和智能手機的不斷普及可能會使普惠金融成為現實。但是這項技術要覆蓋到數十億的人,它需要是便宜的和去中心化的。RSK 平臺是一個去中心化的比特幣側鏈。RSK 價值互聯網技術的構想包括多重協議層,每層協議解決不同的價值轉移需求,共同形成一種連貫而且有彈性的協議棧。本文將介紹 Lumino 交易壓縮協議,RSK 協議棧的關鍵部分。
引言
加密貨幣或者去中心化數字現金領域正處于起步階段。2009 年之前,大多數人嘗試創建需要信任第三方的數字貨幣。所有的數字貨幣支付網絡也都是中心化的。2008 年,(中本聰)發明了第一個去中心化加密貨幣和支付網絡,接著第二年推出這種加密數字貨幣。但是,比特幣的去中心化和抗審查性是對可擴展性進行折衷。 人們發明了各種各樣的技術,例如致密區塊(compact blocks)、更好的路由、區塊頭先行傳播、概率驗證、欺詐證明、區塊鏈裁減、分片和支付通道等等。閃電網絡是致力于改善區塊鏈這一進程中的爭吵的最高潮。閃電網絡承諾減少每個網絡節點所需的資源,并實現更大的網絡吞吐量。但是,為了覆蓋數十億用戶,閃電網絡需要進行大量的鏈上交易。每當一個中心出現問題或者當一方消失的時候,這樣的情況就會發生。此外,用戶需要經常給他們的支付通道補充余額,這就需要更多的鏈上交易。假設每個用戶每個月都使用一個主要的支付通道,那么每個通道每個月也需要結算,并且要求不會出現重大問題的節點,比特幣吞吐量將能夠容納 200 萬用戶使用支付通道。本文提出的 LCTP 協議可以只占用區塊 5 字節的空間來完成余額更新,將能夠容納 10 億用戶使用 RSK 平臺。
我們的貢獻
RSK 平臺遵循與以太坊類似的分類賬結構:網絡建立在賬戶的基礎上而不是 UTXOs。每個用戶控制著一個或者多個賬戶。每個賬戶有一個 ECDSA 數字簽名方案生成的私鑰。公鑰則被映射為更短的 RSK 地址。交易可從賬戶扣除資金,并將其轉到其他賬戶或者智能合約上。每筆交易都會進行簽名,ECDSA 公鑰恢復程序將會從簽名中提取轉出資金的賬戶信息。
在本文中,我們介紹了一種可以處理更大交易量而所占存儲空間小得多的交易壓縮技術。我們還介紹了 Lumino 網絡的基礎,一種類似閃電網絡、使用 LTCP 協議的 RSK 平臺網絡擴展。
Lumino 交易壓縮協議(LTCP)
Lumino 壓縮背后創新性洞察力是對所選字段的深度壓縮(delta compression),所選字段是來自前一筆引用交易和之前交易的簽名集合。深度壓縮是通過允許每一筆交易關聯到相同所有者的前一筆交易,以相同所有者的前一筆交易作為模板。任何可以被覆蓋和未修改的字段都進行完整復制。使用 LTCP 協議的交易包含幾個字段,有些字段是可選的,有些字段是持久性的。持久行意味著他們將永遠成為區塊鏈的一部分,而非持久性的字段可能會也可能不會成為區塊鏈的一部分,這取決與未來的交易。以下是用戶提供的交易字段:
● 隨機數:一個隨機數 [如果重復,將變成持久性的字段]
● seqNum:一個序列號 [可選,持久性]
● 金額:轉賬金額 [可選,持久性]
● 接收者:接收者的地址 [可選,持久性]
● deltaTxNonce:該值將指定引用交易的隨機數進行深度壓縮。[可選,持久性]。如果丟失,將指定前一個交易的隨機數。
● gasPrice(或者手續費):需要支付的手續費金額 [可選,持久性]
● gasLimit:最大執行步數 [可選,持久性]
● 數據:發送給接收者的任意用戶數據(主要用于智能合約)[可選,持久性]一筆交易的持久性字段集合被稱為持久性交易信息(PTI)。添加到 PTI 的一個另外自動計算的字段,即清單索引。這是一串分配給每個新賬號的遞增序列號。實際簽名的不是用戶提供的交易數據,而是擁有附加信息的混合記錄,稱為 SigRec。SigRec 包含所有的字段,加上附加字段:
● prevTx:前一筆源自相同賬戶的交易的 SigRec 哈希值。
SigRec 包含按照固定順序排列的所有字段。要對一筆交易進行簽名,就要對它相應的 SigRec進行哈希,再用發送者賬戶相對應的 ECDSA 私鑰對哈希摘要進行簽名。金額是一個大整數,用以 10 為底數的指數(5bits)和尾數(bits 的數量是變量)表示,這樣可以使壓縮率更高。一個 4 字節的清單索引可以支持十多億個賬戶。還可以使用較短的字段替換清單索引,使用密致、可變長度的正數來表示相同賬戶的交易區塊中 block number delta 和交易指數。例如,如果前一個區塊的第二個區塊就是先前的區塊,則值(-1,2)將解碼引用,占用的空間將不超過 2 個字節。
如果滿足標準條件(足夠的資金,良好的格式等)加上序列號的額外條件,則接受交易,這可以允許 Lumino 網絡更換交易。用戶提供的字段中丟失的交易字段將與 delta 交易的字段一起復制。接受交易的具體條件如下:
● 隨機數必須大于或等于該賬戶前一筆打包到區塊中的交易隨機數。
● 如果隨機數相等,則 seqNum 值必須大于前一個 seqNum 值。
● 如果隨機數相等,它將被包含到 PTI 中以進行廣播。
● 如果存在,deltaTxNonce 必須以小于 D 值的距離指定一筆交易。(D 是指代不同區塊高度之間的差值)
● prevTx = 哈希(prevSigRec),其中 prevSigRec 是前一筆交易的 SigRec
● 來源賬戶必須有足夠的資金用于支付
● 深度壓縮鏈的區塊距離必須低于或者等于 M。
區塊格式
一個 Lumino 區塊存儲兩個 Merkle 樹(或者 Merkle Tries)。第一個樹包含所有 PTIs。第二個樹包含所有的交易 ID。交易 ID 將構建成簽名的 SigRec 哈希值。第二個樹在概念上類似于隔離見證樹,因此我們將呼吁所有字段加上見證部分的簽名。
處理
交易的證明部分 T 存儲在區塊中時,我們稱 T 是持久性的。只有交易 T 中的 PTI 是存儲在區塊中,但是 PTI 的 T 是通過 prevTx references 進行引用的,prevTx references 則緊跟著最好區塊鏈上的持久性交易 T2,而 T2 是處于低于 M-T 值得區塊距離,我們就說交易 T 是docked。可以處理一筆 docked 交易的證明部分,只需要保留 PTI。注意,一筆持久性的交易可以這樣停止并 docked。
驗證區塊
除了標準的區塊驗證規則之外(難度、父母塊等)如果一個區塊包含至少一筆既不被 docked也不持久的交易,那么這個區塊將被視為是無效的。
如果一個區塊包含一筆持久性的交易 T,交易 T 的簽名驗證失敗,那么這個區塊是無效的。但是,如果一個區塊包含一筆 docked 交易,這筆交易的簽名驗證失敗,這個區塊就是有效的,因為節點沒有存儲證明信息的義務。這意味著,如果他們可以提供在隨后的區塊中 dock以往的無效交易的正確交易簽名集合,礦工可以創建一個包含“無效”交易的區塊。
當然,沒有完整節點會接受一個包含無效交易的區塊,因此這些惡意礦工需要構建一條私有鏈,然后公布這條鏈。但是完整節點必須小心那些之前被區塊鏈拒絕接受的區塊,因為如果這些無效簽名被有效區塊確認的話,可能會被再次接受。因此最好緩存被拒絕區塊的時間記錄,這些記錄列出了需要 docked 的無效區塊。
必須永遠存儲第一筆交易的簽名(隨機數=0),以設置發送者的賬戶地址,這些是通過簽名恢復程序暗含在簽名中的。下圖是一個進行了深度壓縮的交易鏈示例,例如在一個鏈上支付通道中:
支付通道雙方可以利用交易壓縮進入鏈上交易通道。發送者向接收者發送一筆支付交易,然后將接收者的字段從交易中刪除。如果 gasPrice 沒有改變,那么隨后每個壓縮交易的都將是這個金額。總的來說,金額要求不超過 4 個字節。
區塊鏈同步
同步區塊鏈和 LTCP 交易包括兩個階段。無論一個節點什么時候接受一個區塊,它必須驗證這個區塊,并找出見證部分是否為無效的或者已丟失。如果所接受的區塊很舊,那么節點可以請求之后的區塊,直到所有無效或者丟失證明信息的區塊都被有效區塊所覆蓋,無效區塊都變得無關緊要。如果仍舊無法提供某些必要的證明信息,那么這條有疑問的分支鏈將不能成為最好的分支鏈。如果接受的區塊是新的,那么節點將請求這個區塊提供所有的見證信息。
其他強化功能
Lumino 網絡是使用 LTCP 協議的類似閃電網絡的網絡。因為閃電網絡要求預先鎖定資金,并由兩個簽名控制,所以我們需要一種由兩個簽名控制的新型賬戶。一個可能性是通過公鑰恢復協議傳遞兩個交易簽名,而他們的公鑰則在哈希之前以特定的順序級聯在一起,以獲得該賬戶的地址。
另一種方法是創建一種可以附加到合約上的新型代碼“簽名驗證代碼”,這種代碼允許進行合約交易,手續費將從合約中扣除,而無需涉及到第二個“源自”ECDSA 的賬戶。源自智能合約的交易需要提供一個發送者字段。智能合約的第一筆交易(隨機數=0)不需要永久性存儲簽名,因為在驗證簽名代碼中明確指定了他們的公鑰。
在這兩種情況下,賬戶是一個持有鎖定資金的智能合約。這允許智能合約賬戶進行結算,因此在包含下一個結算之后就可以對其簽名進行處理,將結算的存儲空間減少為 6 個字節,這取決于智能合約如何編碼和壓縮余額。使用相同隨機數值的 SeqNum 字段可以更新通道余額,但是舊交易無法替代新交易。這是必要的,以避免當隨機數相同的時候,之前的交易阻止之后的交易打包到區塊中。另一種選擇是允許交易隨機數系列存在差距,但是可能會導致礦工漏掉交易,并使智能合約的可預見性復雜化。
使用軟分叉將 Lumino 部署到比特幣網絡
Lumino 網絡是為了使區塊鏈在分類賬的基礎上擁有更快的區塊率(fast block rates)和更多的賬戶而設計的。為了使用軟分叉將 Lumino 網絡部署到比特幣網絡上,我們需要模擬一個基于分類賬的賬戶:我們需要以一個擴展區塊作為側鏈的形式來嵌入比特幣區塊,以此來創建一個賬戶地址空間。每個賬戶在主鏈上創建一個 exodus 地址。這個 exodus 地址是在軟分叉之前任何人都可以花費的地址和軟分叉后特殊的地址。例如,它可以是 push-onlyscriptPub“ 《Lumino-tag》《Lumino-address》”。為了加載帶有比特幣的 Lumino 賬戶,這些比特幣需要先發送到一個 Lumino 地址,這些比特幣將存放在這個地址,直到有人通過提供 Lumino 地址的簽名,從相同的任何人都可花費的地址上通過一筆特定的交易發送回來。一旦資金在 Lumino 網絡上,他們就可以使用 Lumino 交易或者共享 Lumino 支付通道。但是,Lumino 支付確認仍然受到比特幣 10 分鐘出塊時間的限制。為了通過 Lumino 所需的字節擴展比特幣頭部,字節可以存儲在 coinbase 交易的 OP_RETURN 輸出中。
使用軟分叉實施 Lumino 網絡還需要一個嵌入到每個區塊來描述賬戶變動(或者交易收據)的已驗證樹,以允許 SPV 節點檢測區塊,而無需處理 LTCP 交易。
通過比特幣軟分叉部署 LTCP 的擴展性
如果 M 等于一年的區塊量,并且我們假設用戶每天進行兩次付款,則每年進行 730 次付款。
假如 D 等于 10 筆交易。所有這些交易都可以壓縮。一個比較符合實際的假設是,10%的交易發到隨機地址,而剩下 90%將會周期性發到 73 個不同的地址。
隨機支付的 10%將占據鏈上空間 20(接收者)+4(數額)+上一個交易鏈接(3 字節)=27字節,總共 2Kbytes。
90%周期性支付將占據鏈上空間金額(總共 4 字節),加上 73 個地址(1.5 字節)。
我們假設在 D 深度限制內可以使用所有 delta references。因此,730 筆交易將占據 7.5字節,或者每筆交易 10 個字節。但是,在線的完整節點仍然需要處理所有交易并進行存儲。
最后,使用軟分叉將 Lumino 部署到比特幣網絡并不會節省見證字段(Segwit)空間,因為Lumino exodus 地址是一個任何人都可以花費的輸出,消耗此輸出的交易將指定一個空腳本。
擴展性
要了解 Lumino 可以服務多少用戶,處理多少筆交易/秒,我們必須分析 M 和 D 的值可能是多少。
我們應該限制 M 值,以減少對區塊頭的需求。對于以區塊鏈為基礎的工作證明,這通常不是問題,因為每個區塊都帶有工作證明,我們可以通過向無效區塊(包含沒有簽名的交易)添加大量的確認來發起拒絕服務攻擊。我們可以將 M 值設置為 1 年的區塊量。
必須選擇 D 值,以便節點可以存儲每個源賬戶的最后一個 D PTI, 那些交易可以快速持久地進行存儲(就像 RAM 或者 SSD)。假設 D=10,如果平均 PTI 是 20 字節,那么每個源賬戶占200 字節的空間。假設 LTCP 協議占用 SSD 10GB 的空間進行臨時存儲,那么網絡可以處理 5億用戶(這個數字并沒有考慮 Lumino 網絡,僅僅是區塊鏈層。)
但是,為了減少區塊鏈重組之后同步所需的時間,節點可以在最后的 B 區塊中存儲完整交易(例如,B=20),那么節點需要緩存 60MB 的交易,這是可以忽略不計的。礦工存儲完整交易的時間可以更長些,例如一個月,以允許長時間分裂后進行網絡重組。
假設互聯網連接可以進行 0.5 Mbyte/秒的傳輸(4 Mbit/秒, 42.5 GBytes/天)1,假設區塊使用“密致區塊”或者類似區塊 1 壓縮技術進行傳播,則節點使用全帶寬達到 7000 筆/秒。使用三分之一寬帶似乎對于家庭電腦來說是合理的,速度將達到 2300 筆/秒。如果每個用戶進行兩筆支付,那么網絡將可以服務 1 億用戶。
現代家庭電腦的 CPU 每秒可以驗證 8000 筆 ECDSA 簽名,因此 CPU 并不是瓶頸。作為比較,如果比特幣使用相同的帶寬,比特幣區塊將是 100 Mbytes,比特幣吞吐量約為550 筆/秒。但是比特幣區塊鏈所占的空間將是 Lumino 網絡的 40 倍,大約能處理四分之一的交易量。
總結
Lumino 交易壓縮是區塊鏈實現高壓縮比的一個替代方案。交易壓縮意味著重復使用數據,這意味著作折衷,更高的壓縮率需要減少隱私。但是,折衷的選擇權在用戶的手中。雖然LTCP 協議可以壓縮存儲空間,但是存在資源瓶頸:帶寬使用率,以及在較小程度上的 CPU使用率。但是如果節點只接受或者驗證 LTCP 交易,他們就可以輕易發現包含無效驗證數據的交易,因為 LTCP 交易允許短欺詐證明,可以進行分片。
LTCP 形成 RSK 鏈下支付網路 Lumino 網絡的交易層,使 Lumino 網絡可以滿足 10 億 RSK 用戶的需求。
評論
查看更多