摘要:安全性不可更改性排序結(jié)果不能被壞人的攻擊更改。這也是很嚴(yán)重的公鏈安全事故??偠灾?,通過設(shè)計(jì)安全的拓?fù)渑判蛩惴?,解決交易順序問題。區(qū)塊排序的一致可以保證無效交易標(biāo)記的一致。樞軸鏈和分叉鏈的區(qū)塊獎勵計(jì)算規(guī)則是一致的。
12月27日,Conflux受邀參與TokenGazer舉辦的在線問答活動,Conflux CTO伍鳴博士與參與活動的百余名研究員進(jìn)行了深度問答、科學(xué)辨析。此次活動讓大家深刻的了解到Conflux的技術(shù)優(yōu)勢和發(fā)展?jié)摿?,也讓更多人對Conflux的未來發(fā)展堅(jiān)定了積極的信念。
(以下為此次活動的文字整理版)
問題1:Conflux使用的有向無環(huán)圖(DAG)跟比特幣、以太坊的區(qū)塊鏈結(jié)構(gòu)有什么具體不同,優(yōu)勢是什么?伍鳴@Conflux: 這個問題是一個非常本質(zhì)的問題,我愿意展開來談一談,這要從比特幣的效率局限性談起。根據(jù)一些論文,在比特幣協(xié)議中,無論如何調(diào)整出塊速度和區(qū)塊大小這兩個參數(shù),速度與安全不可兼得。
這其中的原理是什么呢?我們想象一下,如果兩個區(qū)塊都是由誠實(shí)節(jié)點(diǎn)生成的,但是因?yàn)榫W(wǎng)絡(luò)延遲,他們在生成的時候互相沒有看到對方,那么在兩個不同的分叉上,那么它們就會在不同的分叉上。一旦進(jìn)入到不同的分叉上,二者便是你死我活的競爭關(guān)系,最終有一個區(qū)塊被丟棄。誠實(shí)節(jié)點(diǎn)的區(qū)塊被丟棄,損失的誠實(shí)節(jié)點(diǎn)的總算力。
分叉越多,好人區(qū)塊的內(nèi)訌越多,壞人的攻擊門檻越低,比特幣越不安全。為了安全,比特幣必須維持一個低的吞吐量。
Conflux使用有向無環(huán)圖結(jié)構(gòu) (DAG),我們允許每個區(qū)塊引用多個區(qū)塊作為自己的祖先區(qū)塊,可以避免好人之間的這種競爭,從而打破比特幣的矛盾,在提高效率的前提下不犧牲安全性。
以太坊與比特幣相比特殊一些,以太坊其實(shí)有了DAG的雛形。關(guān)注區(qū)塊鏈技術(shù)的朋友可能知道,以太坊中有叔塊的概念。一些區(qū)塊選一個父塊,幾個叔塊,看似也構(gòu)成了一個DAG。但是,以太坊的叔塊只是為了給沒有進(jìn)主鏈的區(qū)塊發(fā)一點(diǎn)鼓勵安慰的系統(tǒng)獎勵,叔塊中的交易依然會被丟棄。如果將以太坊的出塊速度提高,導(dǎo)致分叉過多,其有效吞吐率依然很低。
下面有圖可以更好地展示優(yōu)勢,這張圖展示了4MB大小區(qū)塊下不同出塊時間下被保留區(qū)塊的數(shù)量。Conflux保留了所有區(qū)塊,比特幣和Ghost (以太坊協(xié)議改自這個協(xié)議) 則由于分叉丟失了大量的區(qū)塊。
總結(jié)一下:
①Conflux是和比特幣、以太坊類似的PoW公鏈,但允許一個區(qū)塊引用多個區(qū)塊作為祖先,從而構(gòu)成一個DAG。
②比特幣、以太坊的實(shí)際吞吐率很低,即使你嘗試減少出塊間隔或者增加區(qū)塊大小,也無法得到一個安全性和效率兼得的公鏈。
③和比特幣、以太坊相比,Conflux可以在不犧牲去中心化和安全性的情況下,提高吞吐率。
問題2:基于DAG的智能合約會遇到“交易順序問題”,比如誰先預(yù)定到某航班的座位跟交易順序有關(guān),Conflux有沒有比較好的設(shè)計(jì)解決這個問題?伍鳴@Conflux: “預(yù)定航班座位”是一個很好的例子,從這個例子可以看到,在DAG中,如果不同的交易需要競爭合約中的資源(比如航班座位),區(qū)塊排序與交易排序是一件十分必要的事情。這將決定誰的交易在前,誰的交易在后,誰最終得到了這個座位。
也是因?yàn)檫@一點(diǎn),我們需要對DAG中的區(qū)塊設(shè)計(jì)一個拓?fù)渑判蛩惴ǎ瑢⑺袇^(qū)塊排一個順序,然后根據(jù)區(qū)塊的順序決定交易的執(zhí)行順序。而且這個拓?fù)渑判蛐枰獫M足以下幾點(diǎn):
· 一致性:不同礦工節(jié)點(diǎn)排的結(jié)果是一致的。如果一些礦工告訴你選座成功,一些礦工告訴你選座失敗,你就會很困惑。
· 安全性(不可更改性):排序結(jié)果不能被壞人的攻擊更改。比如說,你選了一個座位,5分鐘后,這筆交易確認(rèn)成功了,你很開心。三天后你登機(jī)的時候,發(fā)現(xiàn)排序發(fā)生了更改,你的座位沒了。這也是很嚴(yán)重的公鏈安全事故。
Conflux設(shè)計(jì)了一個滿足上述要求的安全拓?fù)渑判蛩惴?,算法輸入一個DAG,輸出DAG中區(qū)塊的一個拓?fù)渑判?。每個礦工(全節(jié)點(diǎn))將本地機(jī)器的DAG上輸入這個算法,就可以得到區(qū)塊排序,根據(jù)這個結(jié)果,就知道了應(yīng)該先執(zhí)行誰,后執(zhí)行誰。
“一致性與安全性”可能比較抽象,我們舉個例子。今天,這個DAG中有10000個區(qū)塊,9900個區(qū)塊里的交易已經(jīng)被確認(rèn)。明天,這個DAG有20000 個區(qū)塊,那么把明天的DAG和今天的DAG分別作為算法的輸入,前9900個區(qū)塊應(yīng)當(dāng)是一樣的,哪怕有壞人在做雙花攻擊。這就是一致性與安全性。
Conflux 的算法設(shè)計(jì)可以保證一致性與安全性。關(guān)于這個排序算法具體是如何設(shè)計(jì)的,感興趣的伙伴們可以閱讀我們的論文或者科普文章。
總而言之,Conflux通過設(shè)計(jì)安全的拓?fù)渑判蛩惴ǎ鉀Q“交易順序問題”。
問題3:如何解決不同區(qū)塊內(nèi)的打包交易的交易沖突問題,了解到當(dāng)交易沖突時時間稍后的沖突交易會被“discard”掉,這個被丟棄的交易是怎樣和有效交易進(jìn)行狀態(tài)區(qū)分的?伍鳴@Conflux: 在問題2中,我們已經(jīng)解決了交易順序問題。那么當(dāng)所有節(jié)點(diǎn)對DAG得到一個一致的區(qū)塊排序時,只要遵循一個規(guī)則:“發(fā)生重復(fù)或沖突者,排序居后的交易無效”,就可以判斷哪些交易是無效的交易,然后自己在本地標(biāo)記一下就行。區(qū)塊排序的一致可以保證“無效交易標(biāo)記”的一致。
額外說一點(diǎn),由于每筆交易是否有效是每個礦工自己做出的判斷,而沒有持久化寫在區(qū)塊中,所以無法實(shí)現(xiàn)像比特幣那樣,通過Merkle Path向輕節(jié)點(diǎn)證明一個交易在區(qū)塊中,因?yàn)槟銦o法通過Merkle Path知道它是有效的還是無效的。但是,Conflux采用賬本模型,每個區(qū)塊頭會存儲當(dāng)前賬本狀態(tài)的哈希值。通過這個哈希值,很容易向輕節(jié)點(diǎn)證明指定地址的余額等。
總結(jié)一下:
①被丟棄的交易由全節(jié)點(diǎn)本地進(jìn)行標(biāo)記,一致的排序結(jié)果保證一致的標(biāo)記。
②基于這一點(diǎn),Conflux輕節(jié)點(diǎn)的交易驗(yàn)證與比特幣有所不同。
問題4:那無效的交易會被追加一個狀態(tài)么,或者說我在區(qū)塊瀏覽器只查看交易哈希時,能否看出這兩筆交易(有效和無效)的區(qū)別?伍鳴@Conflux: 交易是否無效可以看成是交易執(zhí)行的某種結(jié)果,這種結(jié)果狀態(tài)是可以記錄在區(qū)塊中的,這樣,在區(qū)塊瀏覽器中就可以查到這種狀態(tài)。
問題5:這個交易執(zhí)行結(jié)果是標(biāo)記在本地還是在鏈上?伍鳴@Conflux: 標(biāo)記是在本地,但鏈上也會有所提現(xiàn)。之前的回答中其實(shí)提到,每個區(qū)塊頭會存儲當(dāng)前賬本狀態(tài)的哈希值,通過主鏈區(qū)塊的賬本狀態(tài),會體現(xiàn)歷史區(qū)塊中每筆交易是否有效。
問題6:跟其他鏈不同,無效的交易不會記錄在鏈上,Conflux是需要對無效交易本地打標(biāo),這是否可能對不了解的用戶有學(xué)習(xí)成本,以及利用這一點(diǎn)來混淆用戶的可能?伍鳴@Conflux: 通過瀏覽器提供標(biāo)記,可以幫助普通用戶判斷一筆交易是否有效。
問題7: DAG結(jié)構(gòu)中不存在“叔塊”問題,網(wǎng)絡(luò)中是否會存在過多的空塊或者區(qū)塊中的交易重復(fù)導(dǎo)致區(qū)塊數(shù)據(jù)冗余,從而對節(jié)點(diǎn)的網(wǎng)絡(luò)和硬件配置帶來壓力?伍鳴@Conflux: 首先,DAG中每一個區(qū)塊都是需要消耗算力才能生成的,所以網(wǎng)絡(luò)中各種區(qū)塊,無論是正常的區(qū)塊還是空塊,其數(shù)量受挖礦難度的制約,是有一個上界的。所以,對節(jié)點(diǎn)的網(wǎng)絡(luò)和硬件不會帶來額外的壓力。
其次,空塊或重復(fù)交易過多確實(shí)會影響利用率和實(shí)際的交易吞吐率。所以我們需要為礦工們設(shè)計(jì)一個交易選擇算法,從交易等待池中,根據(jù)交易費(fèi)加權(quán)隨機(jī)抽取交易,以最大限度避免交易重復(fù)。這個算法的設(shè)計(jì)應(yīng)當(dāng)考慮激勵兼容性 (Incentive Compatible),以從經(jīng)濟(jì)激勵上鼓勵礦工遵守這個算法。
問題8: 這個算法是否已經(jīng)完成?伍鳴@Conflux: 這個算法的設(shè)計(jì)和理論分析已經(jīng)有了,現(xiàn)在在我們的系統(tǒng)中開發(fā)實(shí)現(xiàn),還沒有完成。
問題9:理論基礎(chǔ)就是姚教授的新論文?伍鳴@Conflux: 姚老師的論文是基于比特幣進(jìn)行分析的,對我們這個算法的理論基礎(chǔ)有一定的啟發(fā)。
問題10:項(xiàng)目是否會進(jìn)行預(yù)挖?主網(wǎng)啟動后礦工獎勵是否會有變化,樞軸鏈和分叉鏈上的區(qū)塊的區(qū)塊獎勵是否一樣。伍鳴@Conflux: 和以太坊一樣,創(chuàng)始塊會分配一定比例的代幣。每個區(qū)塊的基礎(chǔ)系統(tǒng)獎勵開始比較多,時間長了以后會逐漸減少。
在 Conflux 中,每個區(qū)塊的系統(tǒng)獎勵不是一個固定值,是根據(jù)一個規(guī)則算出來的。樞軸鏈和分叉鏈的區(qū)塊獎勵計(jì)算規(guī)則是一致的。
(小編注釋:在介紹這個規(guī)則之前,我們先來考慮一下一種情形。在Conflux 規(guī)則里,每個新的區(qū)塊應(yīng)該選擇一些引用邊,使所有已經(jīng)存在的區(qū)塊成為它的祖先。(具體的選邊規(guī)則參見我們的文章)。但是一個壞人可能會出于某種目的,在挖出一個新的區(qū)塊時,假裝沒收到或沒看見一些區(qū)塊,以獲取更多的交易費(fèi)。我們就要懲罰壞人這種行為,假裝沒看到的區(qū)塊越多,這個區(qū)塊的區(qū)塊獎勵越少。)
如果要具體地描述這個規(guī)則,就要先講一個概念:“光錐外區(qū)塊”(anticone-block)。什么是“光錐外區(qū)塊”呢?在DAG中,如果兩個區(qū)塊之間沒有一條路徑,這兩個區(qū)塊的互為對方的 “光錐外區(qū)塊”, 比如在下圖中,B和C互為對方的光錐外區(qū)塊。
一個區(qū)塊的系統(tǒng)獎勵會與基礎(chǔ)系統(tǒng)獎勵和它的光錐外區(qū)塊的數(shù)量有關(guān),光錐外區(qū)塊越多,其獎勵越少。(小編注釋:當(dāng)壞人挖出一個新區(qū)塊時,那些假裝沒收到?jīng)]看見的區(qū)塊,都會成為新區(qū)塊的“光錐外區(qū)塊”。)如此設(shè)計(jì),是為了鼓勵每個礦工遵守選擇引用邊的協(xié)議。
問題11:項(xiàng)目預(yù)挖的比例是多少呢。還有區(qū)塊減少的規(guī)則(比如比特幣每隔4年減半)?伍鳴@Conflux: 這些具體的數(shù)據(jù)會在我們主網(wǎng)上線之前公布,大家可以關(guān)注我們的公眾號。
問題12:這個設(shè)計(jì)的會讓區(qū)塊內(nèi)的獎勵會有不同,礦工要額外技術(shù)要挖快的預(yù)計(jì)獎勵對吧?那這樣的話,幣的數(shù)量是否會有不確定性?因?yàn)閰^(qū)塊的獎勵不確定,導(dǎo)致一年之后挖的幣的數(shù)量不可控?伍鳴@Conflux: 這個設(shè)計(jì)會讓區(qū)塊內(nèi)的獎勵有不同,但是,在正常情況下,這個差異不會很大。我們希望用這個差異,來鼓勵礦工們遵守協(xié)議。
問題13:Conflux預(yù)計(jì)主網(wǎng)上線是什么時間,TPS能達(dá)到多少。伍鳴@Conflux: 我們的測試網(wǎng)預(yù)計(jì)在明年3月份上線,主網(wǎng)上線預(yù)計(jì)在明年Q3或Q4。
---
小編:
在這次在線問答中,我們發(fā)現(xiàn)很多關(guān)心區(qū)塊鏈的小伙伴對獎勵機(jī)制和挖礦規(guī)則很感興趣,我們會在后期特別推出一篇關(guān)于此話題的技術(shù)文章,歡迎小伙伴們關(guān)注我們的公眾號來隨時掌握更新狀態(tài)!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/11960.html
摘要:安全性不可更改性排序結(jié)果不能被壞人的攻擊更改。這也是很嚴(yán)重的公鏈安全事故??偠灾ㄟ^設(shè)計(jì)安全的拓?fù)渑判蛩惴?,解決交易順序問題。區(qū)塊排序的一致可以保證無效交易標(biāo)記的一致。樞軸鏈和分叉鏈的區(qū)塊獎勵計(jì)算規(guī)則是一致的。 showImg(https://segmentfault.com/img/remote/1460000017710155?w=893&h=380); 12月27日,Conf...
摘要:安全性不可更改性排序結(jié)果不能被壞人的攻擊更改。這也是很嚴(yán)重的公鏈安全事故??偠灾ㄟ^設(shè)計(jì)安全的拓?fù)渑判蛩惴?,解決交易順序問題。區(qū)塊排序的一致可以保證無效交易標(biāo)記的一致。樞軸鏈和分叉鏈的區(qū)塊獎勵計(jì)算規(guī)則是一致的。 showImg(https://segmentfault.com/img/remote/1460000017710155?w=893&h=380); 12月27日,Conf...
摘要:第二十二期掘金團(tuán)隊(duì)請來了進(jìn)階解密作者劉望舒做了為期三天的活動活動已結(jié)束。我們在此精選了一些來自用戶的提問及劉望舒的回答。提醒本期分布式微服務(wù)主題的正在進(jìn)行,歡迎前去提問,傳送門關(guān)于劉望舒進(jìn)階之光進(jìn)階解密的作者,安卓巴士等技術(shù)大會特邀講師。第二十二期 AMA 掘金團(tuán)隊(duì)請來了《Android進(jìn)階解密》作者-- 劉望舒做了為期三天的 Ask Me Anything (AMA) 活動(活動已結(jié)束)。...
閱讀 731·2021-11-24 10:30
閱讀 1266·2021-09-24 09:48
閱讀 3082·2021-09-24 09:47
閱讀 3599·2019-08-29 17:11
閱讀 2884·2019-08-29 15:38
閱讀 2280·2019-08-29 11:03
閱讀 3606·2019-08-26 12:15
閱讀 1018·2019-08-26 10:45