1. 程式人生 > >DAG 下的激勵機制的挑戰與對策

DAG 下的激勵機制的挑戰與對策

在比特幣系統中,為了保證安全,比特幣的交易吞吐率需要保持一個較低的水平。為了提高區塊鏈的吞吐率,很多方案被提出來,其中一種方案通過使用有向無環圖(Directed Acyclic Graph, DAG)的賬本結構,提高基於工作量證明(Proof of Work, PoW)的區塊鏈系統的吞吐率,從而實現不犧牲安全性與去中心化的效率提升。
那麼和經典的鏈式結構的 PoW 區塊鏈(如比特幣、以太坊)相比,DAG 賬本結構對區塊獎勵與交易費機制設計提出了哪些新的要求和挑戰呢?

比特幣/以太坊的激勵機制

對於一個基於工作量證明的公鏈來說,通過設計合理的激勵機制,來鼓勵礦工參與挖礦並遵守規則,是非常重要的事情。

作為加密數字貨幣的開山鼻祖,比特幣合理的激勵機制設計是它成功的重要因素。在比特幣中,礦工每挖出一個區塊,就可以獲得一定數額的 區塊獎勵 。最開始這個獎勵數額是 50 BTC, 之後每挖出 21 萬個區塊,比特幣的區塊獎勵就減半。目前比特幣的區塊獎勵是 12.5 BTC。 預計在 2020 年夏天,比特幣的區塊獎勵將降至 6.25 BTC。

除了區塊獎勵,比特幣礦工的另一個收入來源是交易費。每個使用者在發起一筆交易時,需要支付一筆 交易費 。每個比特幣區塊中所有的交易費會付給挖出這一區塊的礦工。在比特幣的設計中,早期的交易不多,區塊獎勵是礦工主要的收入來源。隨著時間的流逝,當比特幣的使用者越來越多,區塊獎勵也經過多次減半後,交易費將取代區塊獎勵成為主導部分。例如,在比特幣區塊 500439 中,交易費超過 13 BTC,高於該區塊的區塊獎勵 12.5 BTC。

以太坊的礦工收入主要也包含 區塊獎勵交易費 兩部分,但與比特幣相比有幾處不同:

1.以太坊的基礎區塊獎勵沒有比特幣的定期減半計劃。在初始階段,以太坊的基礎區塊獎勵是 5 ETH。在 2017 年名為拜占庭的硬分叉中,649 號提案被啟用,基礎區塊獎勵調整為 3 ETH。目前的 1234 號提案計劃將基礎獎勵調整至 2 ETH。

2.為了適配智慧合約的場景,使用者在以太坊中發起交易時,不直接指定交易費,而是指定一個交易費單價,被稱為燃料價格(gas price)。 交易實際執行時的計算量就是消耗的燃料,燃料用量乘以燃料價格是以太坊每筆交易最終的交易費。

3.以太坊出塊速度較快,所以會出現更多分叉。為了給礦工提供更好的挖礦體驗,以太坊引入了“叔塊”的概念。每個區塊除了選擇自己的父親區塊,還應當選擇最多兩個“叔塊”。每個區塊每選擇一個叔塊,可以額外獲得基礎區塊獎勵 1/32 的獎勵。而被主鏈區塊選中的叔塊,其中的交易不會被執行,但也可以獲得一定的獎勵,具體數值是:

(8+叔塊高度-主鏈塊高度)/8*基礎區塊獎勵

接下來,我們以 Conflux 共識機制為例,為大家分析一下使用 DAG 賬本結構的 PoW 公鏈,在激勵機制設計上有什麼新的挑戰,以及如何應對。

DAG 的區塊獎勵機制

比特幣的方案在 DAG 中有什麼問題

Conflux 通過有向無環圖結構保留了所有的區塊,在保證去中心化和安全性的前提下,可以提高效能。但是,經過計算和分析,我們發現如果在 DAG 中直接採用比特幣或以太坊的區塊獎勵方案會存在一些問題。

在 Conflux 的共識機制中,所有的區塊被保留了下來。之所以這樣設計,不僅是為了最大化交易處理速率,也有安全上的考慮。(目前已知的 DAG 區塊丟棄規則,在出塊速度較快時,都可能會被壞人利用,導致大量好人區塊被丟棄,從而可能影響安全性。因此保留所有區塊是唯一的選擇。)在這種情況下,如果我們依然採用比特幣或以太坊的規則,每一個區塊的區塊獎勵是一個固定值,將會面臨一個問題——我們稱之為 “零成本攻擊”的問題。

什麼是“零成本攻擊”? 我們假設在比特幣中,有一個攻擊者正在嘗試挖一條分叉鏈,以此來與主鏈競爭。如果競爭失敗,整個分叉鏈會被丟棄,攻擊者拿不到任何獎勵。在這個過程中,攻擊者消耗了大量算力,付出了鉅額的電費。這樣的攻擊是有高額的成本作為代價的。

但如果一個攻擊者在 Conflux 中這樣做,他依舊可以拿到和正常挖礦相當的區塊獎勵。這是因為 Conflux 會保留所有的區塊,固定區塊獎勵意味著攻擊者不會受到任何懲罰。(需要注意,攻擊者在 Conflux 這樣做是無法雙花已經被確認的交易的,Conflux 的安全性以非常高的概率保證這件事)。

這個問題雖然不會危及鏈的安全性,但是會影響交易被確認的時間,也會使 DAG 結構變得更加複雜,從而增加每個礦工的工作量。我們不希望看到,由於激勵機制沒有對類似這樣的攻擊行為做出任何懲罰,導致每天都有礦工在攻擊 Conflux。所以,我們在設計激勵機制的時候,仔細考慮了這一點。而我們的解決這一問題的方式是懲罰礦工“假裝沒有看到一些區塊”的行為。

Conflux 的區塊獎懲方案

下圖中以一個例子,說明了一個壞人如果想挖分叉鏈,就需要假裝沒有看到一些區塊。

如果要具體地描述這個機制,就要先講一個概念:“光錐外區塊”(anticone-block)。什麼是“光錐外區塊”呢?在 DAG 中,如果兩個區塊之間沒有一條路徑,這兩個區塊的互為對方的 “光錐外區塊”, 比如在下圖中,B 和 C 互為對方的光錐外區塊。

一個區塊的區塊獎勵與它的光錐外區塊的數量有關,光錐外區塊越多,其獎勵越少。當壞人挖出一個新區塊時,那些假裝沒看見的區塊,都會成為壞人區塊的“光錐外區塊”,減少壞人區塊的區塊獎勵,對壞人造成經濟上的懲罰。

避免重複交易與交易費機制

由於 Conflux 採用了 DAG 結構,因此不同的區塊中可能會包含相同的交易。最近,社群裡有很多熱心的朋友詢問我們,如果相同的交易過多,導致有效吞吐率大幅下降怎麼辦。

這也是一個和激勵機制緊密相關的問題,解決這一問題,概括來說就是兩句話:

1.礦工從交易等待池(加權)隨機選取交易

2.設計激勵機制,鼓勵礦工遵守上一條規則

交易隨機選擇策略

在比特幣和以太坊系統中,每個礦工會選擇交易費最高的若干交易來打包,這樣的選擇在比特幣或以太坊這樣鏈式結構下是沒有任何問題的。

但是在 Conflux 的 DAG 結構中,如果依然採用這樣的策略,就可能會導致每個節點選擇的交易都差不多一樣,都是那幾筆交易費最貴的交易。那麼區塊中就會出現大量的重複交易,導致吞吐率降低。

為了解決這個問題,一個很直觀的想法是,那就讓礦工們從交易等待池中,隨機地選取交易。當交易等待池中的交易越多,礦工隨機選取交易出現衝突的概率就越小,重複交易的比例就越小。

除此之外,我們還應該考慮交易的優先順序問題。在比特幣/以太坊的系統中,更高的交易費意味著更高的優先順序。在 Conflux 的系統中,也應當保證交易費更高的交易具有一定的優先權。因此,交易選擇策略的目標不應是最大化去重後的交易數量,而是去重後的交易費總量。所以我們會根據交易費為每筆交易計算一個權重,礦工根據權重從交易等待池隨機選取交易。

交易費用激勵機制

交易隨機選擇策略可以在很多交易都處於等待的狀態時,很好地解決交易重複的問題,同時還可以兼顧高交易費交易的優先順序。但這樣的策略為激勵設計帶來了巨大的挑戰。

礦工們的目的是從挖礦的過程中獲取收益。如果違背交易選擇策略,可以為礦工們帶來更高的收益,礦工們自然就會選擇讓自己收益最大化的方案,而非遵守策略。如果 Conflux 採取和比特幣一樣的設計,一個區塊中的交易費由該區塊的礦工全部拿走,每個礦工的最優策略將會是選擇交易費最高的交易,而非遵守上述規則。

這其實是一個博弈論機制設計問題。我們將每個節點打包交易的過程抽象成一個博弈問題並進行分析後發現,如果在多個並行存在的區塊之間,平均分配這些區塊中的交易手續費,礦工節點之間可以形成一種合作的模式:即共同通過減少衝突來最大化各自的收益。每個節點的收益與這些區塊的總交易費成比例。礦工如果遵守規則,將可以最大化這些區塊的總交易費,從而也就最大化了自己的期望收益。


歡迎關注我們的微信公眾號:Conflux中文社群(Conflux-Chain)

新增微信群管理員 Confluxgroup 回覆“加群”加入 Conflux官方交流群