為幫助更多優(yōu)秀項目產(chǎn)品落地电湘,中國第一產(chǎn)品經(jīng)理社區(qū)PMCAFF創(chuàng)建了“3點鐘無眠區(qū)塊鏈產(chǎn)品群”硬分叉群。
目前群友包括:李笑來鹅经、陳偉星寂呛、薛蠻子、杜均瘾晃、李林贷痪、徐明星等一線大佬。(具體加群方式請見本文底部)
本次分享嘉賓:吳軼群蹦误,前蝦米網(wǎng)CTO&創(chuàng)始人劫拢,阿里巴巴安全部大數(shù)據(jù)產(chǎn)品負責(zé)人&大數(shù)據(jù)域總架構(gòu)師∪饨颍現(xiàn)杭州智塊網(wǎng)絡(luò)科技有限公司CEO,正在研發(fā)第三代區(qū)塊鏈公鏈TASchain舱沧。
51%的脆弱與標準拜占庭
先拋個問題妹沙,給大家做思維鍛煉。
比特幣講究控制51%的算力控制一切熟吏,這個好理解距糖,有51%的人就超過半數(shù)了,想干啥干啥牵寺∩隹穑可是拜占庭有個標準公式(2n+1)/(3n+1),近似2/3缸剪。大家想想吗铐,為什么51%還不夠,要67%呢杏节?
現(xiàn)在開始吧唬渗,今天我們先講標準拜占庭,也就是這個67%奋渔。然后講小蟻的實現(xiàn)版本镊逝,讓我們先看圖。
左邊的圖嫉鲸,有11個將軍圍住一座敵人的城池撑蒜,然后需要協(xié)商是進攻還是撤退,無論是進攻還是撤退玄渗,只要是大部分的人決定座菠,都沒有錯,唯一的錯藤树,是一部分將軍決定進攻浴滴,另一部分將軍決定撤退,這樣就算錯了(也就是比特幣里的分叉)岁钓。
這11個將軍里有2個其實是叛徒升略,就是那2個黑色的節(jié)點,他們的目的屡限,就是引起分叉品嚣。
右邊的圖,假設(shè)現(xiàn)在叛徒控制了部分通訊钧大,讓整個網(wǎng)絡(luò)分裂成2個子網(wǎng)翰撑。即左邊紅色部分的忠誠將軍決定進攻,而右邊綠色部分的忠誠將軍決定撤退拓型。但是他們之間沒法直接通訊额嘿。
那2個叛徒怎么做呢瘸恼?
他們對兩邊發(fā)不同的消息!
他們對紅色的將軍說:我們也贊同進攻册养!他們又對右邊的綠色將軍們說:我們贊同撤退东帅!
按51%來共識的話,左邊紅色的將軍一看球拦,哎呀靠闭,有5+2個人贊成進攻,咱們是大多數(shù)了啊坎炼,進攻吧愧膀。右邊綠色的將軍也是,有4+2個人贊同撤退谣光,已經(jīng)超過51%了檩淋,咱們撤退吧。所以萄金,忠誠的將軍被分裂了蟀悦,等到他們會合的時候,發(fā)現(xiàn)做出了不同的決定氧敢,這次戰(zhàn)斗失敗日戈。
這跟區(qū)塊鏈的鑄塊在網(wǎng)絡(luò)上的傳播共識類似,標準拜占庭就是這些孙乖,其實很簡單浙炼。一定要超過2/3的人達成共識,才認為這個共識不能被推翻唯袄。
小蟻的實現(xiàn)版本
講一個理論和一個實踐吧弯屈。
我們還是假設(shè)11個人,這次我們叫大臣和王越妈,這樣比較好講季俩。圖里,拿到權(quán)符的人就是王梅掠,王有鑄塊權(quán),大臣有同意/否決權(quán)店归。假設(shè)現(xiàn)在要鑄25高度的塊阎抒,則首先有3號充當(dāng)王,這個還是簡單求模消痛,然后咱們看看正常流程是怎么樣的且叁。
第二張圖是時序的演進。首先秩伞,3號獲得權(quán)符逞带,然后3號鑄塊欺矫,廣播給各個大臣。
現(xiàn)在我們是6號大臣的視角展氓,即6號先驗證3號王的鑄塊正確穆趴,6號簽名(意思就是我驗證過了),6號把驗證消息在大臣間廣播遇汞。
別的大臣做的事情也跟6號一樣未妹,所以6號陸續(xù)收到了1,2,5,8,9號大臣的驗證通過消息最后,6號又收到了10號的驗證通過消息空入,這樣就達到2/3了络它,6號就想全網(wǎng)廣播25高度鑄塊成功。
這次鑄塊結(jié)束歪赢,繼續(xù)鑄26高度的塊化戳。很簡單,咱們再來看看異常的情況埋凯。
還是鑄25高度的塊点楼,還是6號的視角,這次前面4個步驟完全一致递鹉。
但是最后10號大臣說他不同意這個鑄塊盟步,比如里面有一筆交易有問題,只要有一個大臣發(fā)現(xiàn)的話躏结,將會直接發(fā)出換王消息却盘。
如果收集到2/3的換王消息,就會進行權(quán)符轉(zhuǎn)移媳拴。順時針移到下一個大臣黄橘,由4號擔(dān)任王,然后重新來一遍屈溉,直到25高度鑄塊成功為止塞关。
失敗其實包括兩個原因,1子巾、有大臣否決帆赢;2、是在指定的時間窗口內(nèi)無法收集到2/3的驗證通過消息线梗。
小蟻的版本椰于,如果這次共識失敗,則下次共識的時間翻倍仪搔,最后我用撲克牌的思路理了一遍小蟻的共識瘾婿。
小蟻共識撲克牌
1. 共識牌一共有4種花色,a. 鑄塊,b. 驗證通過偏陪,c. 換王抢呆,d. 廣播出塊。
2. N個見證人(大臣)圍坐一圈笛谦。
3. 對每個區(qū)塊高度(M)按求模次序(M%N)決定主鑄塊人(王)抱虐。
4. 只有王才能打出a牌,大臣可以打出b或c揪罕。
5. 一個時間窗口開始梯码,王先打出a,然后等待大臣們打出b或c好啰。
6. 如在時間窗口內(nèi)收集到>2/3的b牌轩娶,則自動切換到d牌,該高度(M)鑄塊成功完成框往。M=M+1鳄抒,重復(fù)3,開始下一個高度的鑄塊椰弊。
7. 如6無法完成许溅,或者時間窗口未到但已有>2/3的c牌,則王位順時針流轉(zhuǎn)到下一個人(新王)秉版,時間窗口翻倍贤重。重復(fù)4。
注:在統(tǒng)計2/3消息時清焕,a牌同時有b的效果并蝗。
群內(nèi)精彩互動節(jié)選
問題1
Ryan@YooGoo:要是有人惡意否決呢?
吳軼群:我覺得見證人是有保證金的秸妥,定期做checkpoint檢查滚停,代碼里沒有考慮惡意否決的情況。
問題2
Ryan@YooGoo:一個鑄塊是所有節(jié)點都要驗證嗎粥惧?還是王和大臣都只是代表键畴?
吳軼群:不是,2/3的大臣驗證通過即可突雪。大臣和王都是POS起惕,DPOS里的見證人。
問題3
wendy Li:時間翻倍咏删?
吳軼群:是的疤祭,就是如果15秒沒完成,4號當(dāng)王的時候就是30秒饵婆。
問題4
wendy Li:那5號當(dāng)王呢?
吳軼群:5號當(dāng)王就是1分鐘,它是個向左位移侨核,時間每次翻倍草穆。
問題5
任鋒@YooGoo:是2/3接受就鑄塊成功?
吳軼群:是的搓译,還包括換王也是一樣悲柱,也是2/3。
問題6
Ryan@YooGoo:我有一個疑惑些己,拜占庭是基于1/3的壞節(jié)點不能搞破壞豌鸡。實現(xiàn)時候又是基于沒有節(jié)點作惡,只有節(jié)點可能失效段标。那小螞蟻還算拜占庭嗎涯冠?
吳軼群:我覺得有2/3的套路,就應(yīng)該算逼庞。它的鑄塊成功和換王蛇更,都是需要2/3的大臣節(jié)點認可。
進群規(guī)則&聯(lián)系方式
進群規(guī)則:
1赛糟,需要原有項目優(yōu)秀派任,且已經(jīng)準備上鏈的CEO或產(chǎn)品任負責(zé)人。
2璧南,不需要投資人了掌逛,群內(nèi)已經(jīng)聚集很多大牛投資人。
3司倚,不要拉合伙人進來了豆混,自己轉(zhuǎn)內(nèi)容吧。
4对湃,長期不活躍請退崖叫,留出更多名額,給好項目拍柒。
聯(lián)系方式:
加群主 @阿德 微信心傀,私聊邀請進群。(阿德微信號:adee10000)
注:本文內(nèi)容來自前蝦米網(wǎng)CTO&創(chuàng)始人拆讯,現(xiàn)杭州智塊網(wǎng)絡(luò)科技有限公司CEO 吳軼群在3點鐘無眠區(qū)塊鏈產(chǎn)品群內(nèi)的主題分享脂男,如轉(zhuǎn)載或引用請注明出處。