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