在比特幣系統中,爲了保證安全,比特幣的交易吞吐率須要保持一個較低的水平。爲了提升區塊鏈的吞吐率,不少方案被提出來,其中一種方案經過使用有向無環圖(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。spa
2.爲了適配智能合約的場景,用戶在以太坊中發起交易時,不直接指定交易費,而是指定一個交易費單價,被稱爲燃料價格(gas price)。 交易實際執行時的計算量就是消耗的燃料,燃料用量乘以燃料價格是以太坊每筆交易最終的交易費。設計
3.以太坊出塊速度較快,因此會出現更多分叉。爲了給礦工提供更好的挖礦體驗,以太坊引入了「叔塊」的概念。每一個區塊除了選擇本身的父親區塊,還應當選擇最多兩個「叔塊」。每一個區塊每選擇一個叔塊,能夠額外得到基礎區塊獎勵 1/32 的獎勵。而被主鏈區塊選中的叔塊,其中的交易不會被執行,但也能夠得到必定的獎勵,具體數值是:code
接下來,咱們以 Conflux 共識機制爲例,爲你們分析一下使用 DAG 帳本結構的 PoW 公鏈,在激勵機制設計上有什麼新的挑戰,以及如何應對。flux
Conflux 經過有向無環圖結構保留了全部的區塊,在保證去中心化和安全性的前提下,能夠提升性能。可是,通過計算和分析,咱們發現若是在 DAG 中直接採用比特幣或以太坊的區塊獎勵方案會存在一些問題。rem
在 Conflux 的共識機制中,全部的區塊被保留了下來。之因此這樣設計,不只是爲了最大化交易處理速率,也有安全上的考慮。(目前已知的 DAG 區塊丟棄規則,在出塊速度較快時,均可能會被壞人利用,致使大量好人區塊被丟棄,從而可能影響安全性。所以保留全部區塊是惟一的選擇。)在這種狀況下,若是咱們依然採用比特幣或以太坊的規則,每個區塊的區塊獎勵是一個固定值,將會面臨一個問題——咱們稱之爲 「零成本攻擊」的問題。
什麼是「零成本攻擊」? 咱們假設在比特幣中,有一個攻擊者正在嘗試挖一條分叉鏈,以此來與主鏈競爭。若是競爭失敗,整個分叉鏈會被丟棄,攻擊者拿不到任何獎勵。在這個過程當中,攻擊者消耗了大量算力,付出了鉅額的電費。這樣的攻擊是有高額的成本做爲代價的。
但若是一個攻擊者在 Conflux 中這樣作,他依舊能夠拿到和正常挖礦至關的區塊獎勵。這是由於 Conflux 會保留全部的區塊,固定區塊獎勵意味着攻擊者不會受到任何懲罰。(須要注意,攻擊者在 Conflux 這樣作是沒法雙花已經被確認的交易的,Conflux 的安全性以很是高的機率保證這件事)。
這個問題雖然不會危及鏈的安全性,可是會影響交易被確認的時間,也會使 DAG 結構變得更加複雜,從而增長每一個礦工的工做量。咱們不但願看到,因爲激勵機制沒有對相似這樣的攻擊行爲作出任何懲罰,致使天天都有礦工在攻擊 Conflux。因此,咱們在設計激勵機制的時候,仔細考慮了這一點。而咱們的解決這一問題的方式是懲罰礦工「僞裝沒有看到一些區塊」的行爲。
下圖中以一個例子,說明了一個壞人若是想挖分叉鏈,就須要僞裝沒有看到一些區塊。
若是要具體地描述這個機制,就要先講一個概念:「光錐外區塊」(anticone-block)。什麼是「光錐外區塊」呢?在 DAG 中,若是兩個區塊之間沒有一條路徑,這兩個區塊的互爲對方的 「光錐外區塊」, 好比在下圖中,B 和 C 互爲對方的光錐外區塊。
一個區塊的區塊獎勵與它的光錐外區塊的數量有關,光錐外區塊越多,其獎勵越少。當壞人挖出一個新區塊時,那些僞裝沒看見的區塊,都會成爲壞人區塊的「光錐外區塊」,減小壞人區塊的區塊獎勵,對壞人形成經濟上的懲罰。
因爲 Conflux 採用了 DAG 結構,所以不一樣的區塊中可能會包含相同的交易。最近,社區裏有不少熱心的朋友詢問咱們,若是相同的交易過多,致使有效吞吐率大幅降低怎麼辦。
這也是一個和激勵機制緊密相關的問題,解決這一問題,歸納來講就是兩句話:
1.礦工從交易等待池(加權)隨機選取交易
2.設計激勵機制,鼓勵礦工遵照上一條規則
在比特幣和以太坊系統中,每一個礦工會選擇交易費最高的若干交易來打包,這樣的選擇在比特幣或以太坊這樣鏈式結構下是沒有任何問題的。
可是在 Conflux 的 DAG 結構中,若是依然採用這樣的策略,就可能會致使每一個節點選擇的交易都差很少同樣,都是那幾筆交易費最貴的交易。那麼區塊中就會出現大量的重複交易,致使吞吐率下降。
爲了解決這個問題,一個很直觀的想法是,那就讓礦工們從交易等待池中,隨機地選取交易。當交易等待池中的交易越多,礦工隨機選取交易出現衝突的機率就越小,重複交易的比例就越小。
除此以外,咱們還應該考慮交易的優先級問題。在比特幣/以太坊的系統中,更高的交易費意味着更高的優先級。在 Conflux 的系統中,也應當保證交易費更高的交易具備必定的優先權。所以,交易選擇策略的目標不該是最大化去重後的交易數量,而是去重後的交易費總量。因此咱們會根據交易費爲每筆交易計算一個權重,礦工根據權重從交易等待池隨機選取交易。
交易隨機選擇策略能夠在不少交易都處於等待的狀態時,很好地解決交易重複的問題,同時還能夠兼顧高交易費交易的優先級。但這樣的策略爲激勵設計帶來了巨大的挑戰。
礦工們的目的是從挖礦的過程當中獲取收益。若是違背交易選擇策略,能夠爲礦工們帶來更高的收益,礦工們天然就會選擇讓本身收益最大化的方案,而非遵照策略。若是 Conflux 採起和比特幣同樣的設計,一個區塊中的交易費由該區塊的礦工所有拿走,每一個礦工的最優策略將會是選擇交易費最高的交易,而非遵照上述規則。
這實際上是一個博弈論機制設計問題。咱們將每一個節點打包交易的過程抽象成一個博弈問題並進行分析後發現,若是在多個並行存在的區塊之間,平均分配這些區塊中的交易手續費,礦工節點之間能夠造成一種合做的模式:即共同經過減小衝突來最大化各自的收益。每一個節點的收益與這些區塊的總交易費成比例。礦工若是遵照規則,將能夠最大化這些區塊的總交易費,從而也就最大化了本身的指望收益。
歡迎關注咱們的微信公衆號:Conflux中文社區(Conflux-Chain)
添加微信羣管理員 Confluxgroup 回覆「加羣」加入 Conflux官方交流羣