📜 [專欄新文章] 區塊鏈管線化的效能增進與瓶頸
✍️ Ping Chen
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
使用管線化(Pipeline)技術可以提升區塊鏈的處理效能,但也可能會產生相應的代價。
Photo by tian kuan on Unsplash
區塊鏈的擴容方案
說到區塊鏈的效能問題,目前討論度最高的應該是分片(sharding)技術,藉由將驗證者分成多組的方式,可以同時分別處理鏈上的交易需求,即使單分片效能不變,總交易量可以隨著分片/驗證者集的數量線性增加。
除了分片,另一個常用來提升程式效能的方案是將計算步驟拆解,以流水線的方式將複雜的運算攤平,降低系統的閒置時間,並大幅提升工作效率。為了達到管線化預期的目的,會需要先知道系統的瓶頸在哪。
區塊鏈的效能瓶頸
熟悉工作量證明設計哲學的人應該會知道,區塊鏈之所以需要挖礦,並不是為了驗證交易的正確性,而是要決定交易的先後順序,從而避免雙花和帳本分裂的發生。可以說,區塊鏈使用低效率的單線程設計,並付給礦工高額的成本,都只為了一件事,就是對交易的全局排序產生共識。
在這樣的基礎之上,區塊鏈在一段時間內可以處理的交易數量是有限的,這之中包含許多方面的限制,包括 CPU 效能、硬碟空間、網路速度等。其中,關於 TPS(每秒交易數) 提升和對硬體的要求大致上是線性增加的,但在設計共識演算法時,通訊複雜度常是平方甚至三次方的關係。
以現在的目標 TPS 來說,處理交易和生成一個合法的區塊並不困難,只是因為區塊鏈的特性,新區塊需要透過洪水法的方式擴散到全網路,每個節點在收到更新請求的時候都要先執行/驗證過區塊內的交易,等於整個廣播的延時會是「驗證區塊時間×經過的 hop 數量」這麼多。似乎網路越分散、節點越多,我們反而會需要降低計算量,以免讓共識不穩定。
管線化的共識機制
使用權益證明取代工作量證明算是行業發展的趨勢,除了環保或安全這些比較顯然的好處之外,權益證明對產生共識的穩定性也很有幫助。首先,權益證明在同一時間參與共識的節點數是已知的,比較容易控制數量級的邊界;其次,權益證明的出塊時間相較工作量證明固定很多,可以降低計算資源不足或閒置的機率。
相較於工作量證明是單一節點出塊,其餘節點驗證,權益證明的出塊本身就需要很多節點共同參與,瓶頸很像是從驗證轉移到通訊上。
以 PBFT 為例,每次產新區塊都需要經過 pre-prepare, prepare, commit 三個階段,你要對同意驗證的區塊簽名,還要對「你有收到某人的簽名」這件事簽名,再對「你有收到 A 說他有收到 B 的簽名」這件事簽名,過程中會有很多簽名飛來飛去,最後才能把一個區塊敲定。
為了降低每兩個區塊間都需要三輪簽名造成的延遲,後來的共識演算法包括 HotStuff 和 Casper FFG 採用了管線化的區塊驗證過程。也就是對區塊 T 的 pre-prepare 同時是對 T-1 的 prepare 和對 T-2 的 commit。再加上簽名聚合技術,出塊的開銷在複雜度等級和係數等級都降低許多。
然而,要保持管線化的區塊生產順利,需要驗證者集合固定不變,且網路通訊狀況良好。如果會經常更動驗證者集合或變換出塊的領導者,前後區塊間的相依性會是個大問題,也就是 T 的驗證者集合取決於 T-1 裡有沒有會導致刪除或新增驗證者的交易,T-1 的合法性又相依於 T-2,以此類推。
當激烈的分叉出現的時候,出塊跟共識的流水線式耦合就從優雅變成災難了。為了避免這種災難,更新的共識演算法會限制驗證者變更的時機,有些叫 epoch 有些叫 checkpoint,每隔一段時間會把前面的區塊徹底敲定,才統一讓驗證者加入或退出。到這些檢查點的時候,出塊的作業流程就會退化成原本的三階段驗證,但在大部分時候還是有加速的效果。
管線化的狀態更新
另一個可以用管線化加速的是區塊鏈的狀態更新。如前所述,現在公鏈的瓶頸在於提高 TPS 會讓區塊廣播變慢,進而導致共識不穩定,這點在區塊時間短的以太坊上尤其明顯。可是如果單看執行一個區塊內的交易所花的時間的話,實際上是遠遠低於區塊間隔的。
只有在收到新區塊的時候,節點才會執行狀態轉移函數,並根據執行結果是否合法來決定要不要把區塊資訊再廣播出去。不過其實只要給定了交易集合,新的狀態 s’ = STF(s, tx) 應該是確定性的。
於是我們有了一個大膽的想法:何不乾脆將交易執行結果移出共識外呢?反正只要大家有對這個區塊要打包哪些交易有共識,計算的結果完全可以當作業留給大家自己算吧。如果真的不放心,我們也可以晚點再一起對個答案,也就是把這個區塊執行後的新狀態根包在下個區塊頭裡面。
這就是對狀態更新的管線化,在區塊 T 中敲定交易順序但暫不執行,區塊 T+1 的時候才更新狀態(以及下一批交易)。這麼做的好處十分顯而易見,就是將原本最緊繃的狀態計算時間攤平了,從原本毫秒必爭的廣播期移出來,變成只要在下個塊出來之前算完就好,有好幾秒的時間可以慢慢來。新區塊在廣播的每個 hop 之間只要驗證交易格式合法(簽名正確,有足夠的錢付手續費)就可以放行了,甚至有些更激進的方案連驗簽名都省略了,如果真的有不合法交易混進去就在下個區塊處罰礦工/提案者便是。
把負擔最重的交易執行移出共識,光用想的就覺得效能要飛天,那代價呢?代價是區塊的使用程度會變得不穩定。因為我們省略了執行,所以對於一筆交易實際用掉多少 gas 是未知的。本來礦工會完整的執行所有交易,並盡可能的塞滿區塊空間,然而在沒有執行的情況下,只能以使用者設定的 gas limit 當作它的用量,能打包的交易會比實際的上限少。
緊接著,下一個問題是退費困難。如果我們仍然將沒用完的手續費退還給使用者,惡意的攻擊者可以透過發送 gas limit 超大,實際用量很小的交易,以接近零的成本「霸佔」區塊空間。所以像已故區塊鏈 DEXON 就直接取消 gas refund,杜絕濫用的可能。但顯然這在使用者體驗和區塊空間效率上都是次優的。
而最近推出的 smartBCH 嘗試擬了一套複雜的退款規則:交易執行後剩餘的 gas 如果小於 gas limit 的一半(代表不是故意的)就退款;如果剩餘量介於 50%-75% 可以退一半;超過 75% 推斷為惡意,不退款。乍看是個合理的方案,仔細一想會發現製造的問題似乎比解決的還多。無論如何,沒用掉的空間終究是浪費了,而根據殘氣比例決定是否退款也不會是個好政策,對於有條件判斷的程式,可能要實際執行才知道走哪條路,gas limit 一定是以高的情況去設定,萬一進到 gas 用量少的分支,反而會噴更多錢,怎麼想都不太合理。
安全考量,退費大概是沒希望了。不過呢,最近以太坊剛上線的 EIP1559 似乎給了一點方向,如果區塊的使用程度能以某種回授控制的方式調節,即使偶爾挖出比較空的區塊似乎也無傷大雅,也許能研究看怎麼把兩者融合吧。
管線化方案的發展性
考慮到以太坊已經堅定地選擇了分片的路線,比較激進的單鏈高 TPS 管線化改造方案應該不太有機會出線,不過管線化畢竟是種歷史悠久的軟體最佳化技巧,還是很有機會被使用在其他地方的,也許是 VDF 之於信標鏈,也許是 rollup 的狀態轉換證明,可以坐等開發者們表演。
倒是那些比較中心化的 EVM fork/sidechain,尤其是專門只 for DeFi 的鏈,管線化加速可以在不破壞交易原子性的前提下擴容,確實是有一些比分片優秀的地方可以說嘴,值得研究研究,但這就要看那些機房鏈們有沒有上進心,願不願意在分叉之餘也投資發展自己的新技術了。
給我錢
ping.eth
區塊鏈管線化的效能增進與瓶頸 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
生產者剩餘題目 在 酒類專家 王 鵬 Facebook 的最佳解答
【吐酒的技巧,與該不該吐酒的問題】
葡萄酒界有一條法則:「懂得品酒就是不要吞酒」(Savoir déguster sans avaler.)烈酒品評普遍也有吐酒的操作習慣。既然要吐,就要吐得優雅,吐得漂亮。
不難發現,在生產商與酒商任職的專業人士,吐酒技術普遍純熟。這是由於平日工作經常需要品嘗,有充分練習機會的緣故。他們吐酒時,不會讓酒液四處噴灑,而是以一條細柱狀吐出。吐酒的動作,在他們身上彷彿一枚專業印記——每次只持續數秒的這個小動作,往往反映多年的專業經歷與磨練。
在消費端,擁有多年經驗的飲家,卻不見得懂得如何吐酒,這或許是由於喝得多、喝得勤,但是吐得少的緣故。在一般飲家與愛好者當中,由於飲酒的情境不是職業環境,因此往往缺乏吐酒的機會,也不易養成吐酒的技術與習慣。然而,若是可以學會優雅、漂亮地吐酒,不僅可以提升公眾觀感,對於從業人員來說,也可以提升專業形象。
吐酒技巧的練習方式,眾說紛紜,但確實因人而異。有些人說在吐酒前,要先將嘴唇向前聚攏,讓酒液集中至口腔前半段,以舌根的力量將酒液推出。有些人則是用收縮齒齦的方式,配合唇形,讓酒液向外噴出。找到適合自己的方式,一旦學會之後,就不會忘記。
【品嘗啤酒應該吐酒嗎?】
品嘗啤酒的時候沒有吐酒的習慣──這與葡萄酒界「懂得品酒就是不要吞酒」(Savoir déguster sans avaler.)的觀點相悖,也與烈酒品評普遍吐酒的操作習慣不同。「品嘗啤酒的時候,是否應該吐酒?」相關問題值得更進一步探討。
根據馬立歐・德・伊爾(Mario D’Eer)在《啤酒品飲手冊》(Le Carnet de la dégustation des bières,1997)一書中的說法,他似乎假定不把啤酒吞下去就嘗不出餘韻(l’arrière-goût),但是這個觀點是有問題的。餘韻的定義是酒離開嘴巴之後 產生的剩餘味覺或是酒液中原本無法被嘗出的風味經過唾液的作用之後,在數秒鐘之後才出現的風味。按照這個定義,不論酒是向外離開還是向內離開口腔, 口中殘留或出現的餘味都不會變。品酒時把酒吐掉的話,一來不會錯過任何應該留下紀錄的風味,二來也能留著一顆清醒的腦袋繼續工作。何樂而不為呢?
我請教包括釀酒者、經理人、進口商等業界人士以及平日有飲酒習慣的啤酒愛好者。主張吞酒的意見佔絕大多數,他們的看法主要可以歸納為四個要點:
一、由於啤酒有氣泡,不吞下去的話無法感受啤酒入喉之後,氣泡從喉頭內散發出氣味的效應,因此品嘗啤酒的時候應該要吞下去;
二、由於啤酒的酒精含量普遍較葡萄酒來得低,因此,相較於一次吞進好幾種葡萄酒,把啤酒吞下肚比較不會讓人感到頭昏腦脹;
三、啤酒的風味普遍比葡萄酒來得簡單,如果不吞下去的話,會大幅影響對於啤酒風味的感知;
四、根據某些釀酒人的觀點,釀造啤酒是一門在風味濃度與爽口程度之間尋求平衡的食品工藝,以解渴為目的的啤酒就是必須「適飲」,因此評判啤酒的標準 包括「適飲性」(drinkability)。如果不把酒吞下去的話就無從體會酒款風味繁複程度與適飲性之間的協調表現。
以上四個論點頗有說服力,但卻可能只是脆弱的假設而已。
首先,主張啤酒由於含有氣泡因此必須吞下的觀點是大有問題的,因為品嘗香檳也會吐掉,不會因為它有氣泡而吞下去。如果品嘗啤酒必須吞下是一條真理的話,那麼,啤酒含有氣泡的事實也應該不會是這條真理成立的主要理由。
其次,主張啤酒酒精含量較低,因此品酒時應當吞下的觀點也值得重新討論。如果品飲酒精濃度較低的酒款可以吞下去,那麼品嘗酒精濃度稍高的啤酒是否就必須吐掉呢?葡萄酒業人士品嘗酒精含量比啤酒還低的葡萄酒時,他還是會選擇吐掉,而啤酒業人士品嘗一款高酒精含量的啤酒時,卻還是很可能會選擇吞下去。由此看來,品酒時是否將酒吞下應該與酒精含量的多寡沒有直接關係。
再其次,主張啤酒的風味由於普遍比葡萄酒簡單,因此必須要吞下去才能完整感受酒款的風味,這個論點也有不盡合理之處,因為品嘗葡萄酒時,品評者並不會因為它風味淺薄而吞下去;而人們品嘗啤酒時,也不會由於它風味濃郁而吐掉。
最後,「適飲性」的概念頗能讓人信服。這個論點的說服力來自於為啤酒創立一項獨特的品鑑標準,從獨特的角度來說明品嘗啤酒的慣例,而不是從其他酒類飲料既有的標準來看待它。「適飲」似乎不是憑空出現的概念,根據啤酒業人士對於適飲性的普遍理解,我發現「適飲」與葡萄酒品飲標準中的「和諧」 (harmony)有異曲同工之妙,只不過相同的概念在啤酒的領域裡以「適飲性」這個名詞重新包裝,強調啤酒應該「嘗起來協調而不突兀,並且具有解渴功能」。
我個人認為,啤酒業界有意識地使用這項概念很有意義的。反觀葡萄酒,它作為一種飲料的本質一直沒有被忘記,但是很少見到人們談論葡萄酒與「解渴」的關係;相對說來,人們認為啤酒根本上就是一種飲料,它就算被提升到具有美感意義的工藝層次,它總歸還是一種飲料。這種心理或許與釀製啤酒的技術本身有關:釀造啤酒需要用水,強化了啤酒與「解渴」之間的聯想。當然,啤酒必須適飲的觀點也可能傳承自修道院僧侶將啤酒視為營養來源的此一傳統。而現今人們將 清淡口味的拉格啤酒視為解渴飲料來消費,也印證「啤酒作為一種飲料,它必須適飲」。由此看來,品酒時把啤酒吞下肚似乎是順理成章的事。
如果啤酒業界裡原本就有將酒吞下的習慣,那麼一定有它的道理。我個人雖然不贊同品酒必須喝下的觀點,而上文列舉出的四點理由沒有一項能完全說服我,但是它們的加總卻讓人有願意相信的衝動。我試著從一種同情的角度來設想,為什麼品酒應當將酒吞下去:
一、從品嘗活動的基本意義出發
不將酒吞下並不會影響對於酒款風味的認知,反過來說,將酒吞下也不會破壞對於一款啤酒風味的體認。把酒吞下去並不代表沒有品嘗酒的風味。如果品酒的原始意義在於評判風味的話,那麼,品酒時把酒吞下並不與品酒活動的意義產生根本上的矛盾。
二、從攝取酒精的速度來看
將酒吐掉並不代表完全不會攝取到酒精,吐酒只能降低酒精的攝取速度與攝取 量。既然在品酒時攝取酒精是必然現象,那麼吞酒的行為似乎並不那麼不可原諒。 盡量避免攝取酒精只是一個試圖延長品飲工作時間的對策,而不能作為判斷專業表現的依據。如果要為「品嘗啤酒必須吞下」這個論題辯護,可以明確指出品飲葡萄酒時吐酒的慣例,也不能保證品飲者在整個品酒過程中完全不受酒精影響,不妨設想啤酒品飲不過是持續吞下酒精含量普遍較低的液體而已。
三、從工時長度與專注力來看
是否能夠在品評活動中表現應有的技能水準,與是否吞酒沒有絕對關係,可以設想,品評工作時間長度以及品項內容多寡本身就有上限,如果品飲工作內容較少,而工作時間也較短的話,那麼把酒吞下的人不見得會比把酒吐掉的人缺乏工作能力。
四、從專業素養的門檻來看
酒業工作者經常也是喝酒的人,這樣的業界生態也為「為何品嘗啤酒必須吞下」的問題提供一條解答的線索。專業人士普遍具備在少量酒精影響之下仍能維持一定的專注力與評判能力。容易酒醉固然不方便,但是這不是缺乏專業的表徵。就我的觀察,不吞酒固然會有更好的專注力,但是就算把酒吞下,也能憑藉專業素養維繫工作品質。與完全清醒的非專業人士評論相較,一個已經受到酒精影響的專業人士所作出的評論,仍然較具參考價值。這個「專業門檻」的概念能夠解釋為何啤酒業界存在品酒時把酒吞下的慣例,而不甚理會攝取酒精造成的影響。
「品嘗啤酒該不該喝下去?」就像是辯論賽的題目,不論是為正方或反方辯論,都可以找到有力的論點。將這個問題翻來覆去地討論,目的不在於得到非黑即白的答案,在正反俱呈的過程裡,我們似乎已經從這項議題牽連出的種種面向當中,對於這個問題的答案了然於胸。喝下去,還是不喝下去?雖然總是個問題,但是對於絕大多數的人來說,它根本不是個問題。
(改編自《比利時啤酒:品飲與風味指南》,第16-19頁)
生產者剩餘題目 在 連我爸爸都沒有打過我 Facebook 的最讚貼文
《台灣近半環保問題的終極解決方案》元毓說
當初政府要王永慶兄弟到雲林麥寮海埔自己生陸地出來蓋六輕營運。20年後環保團體對於已經被趕到海之濱營運近20年的六輕仍有諸多意見。
對於自1940年代起就開始挖礦的 #亞洲水泥橫山廠、對於無良排放有毒廢水的 #日月光…等許多環保議題,我強烈建議這些環保人士 #自掏腰包花錢把這些上市公司買下來然後結束營業,並要求原本營運者簽約承諾競業禁止50年內不在台灣從事或投資相似行業。問題不就解決了?價格夠高這點小要求都不會是問題的。(要記得遵照你們的左派理念,給員工 #優渥遣散費、#醫療費 跟 #養老金 喔)
甚至只要 #買超過50%股份,就能絕對掌握董事會並決策關閉台灣地區所有生產營運,把那些污染源工廠通通移往中國大陸、美國或世界任何其他國家。根本毋須吹風晒日地抗議,餓著肚皮絕食抗爭。
未來只要出現不環保的開發案,你們就花錢買下該案權利與競業禁止權,然後當場廢棄。什勞子的立法院、行政院通通不用跑了。
哪需要管礦業法?誰有礦權你們就通通買下廢棄!
什麼清境農場違法民宿?小問題,土地建築通通高價買下來然後封山,把山林還給動植物最環保。
什麼國有林地被盜採改為檳榔園?小問題,買下全台灣檳榔攤然後結束營業加競業禁止,既環保又照顧國人健康。
什麼排放廢氣廢水?小問題,工廠買下來結束營業,老闆員工安排國外提早退休都不用做了,污染源瞬間消失。
#如果環保真的這麼重要,我相信你們不會在乎這麼一點小錢的。或者,這麼點小錢一定很容易 #群眾募資 的。
這都要感謝諾貝爾經濟學獎得主R. Coase的 #Coase定律 啊~
以下我進行一些簡單經濟分析:
為什麼要環保團體出價購買?因為從產權經濟學來看,真正覺得問題切身相關的人,應該是 #真正願意付出代價的人。是的,#口嫌體正直 是人性弱點,經濟學不斷告訴我們:不要看一個人說什麼,要看他把財產生命壓在哪裡。
單純透過政治活動運用政府合法暴力禁止污染源生產或繼續污染,Coase告訴我們,這樣的行為本身也侵害了污染者的權利。重點本身不在誰侵害了誰,而是產權要劃分給誰。污染者一般都有清楚劃定的生產權能,但產生的汙染,也就是所謂的「外部成本」(順帶一提外部成本是錯誤的經濟學觀念,不要再亂用了),其實只是難以被清楚界定劃分的污染權或不被污染權。
一種解決方案,是由污染者向被污染者購買「污染權」,這也是現在常見的安排 — 六輕之類的廠商給周遭人民或政府回饋金,比方2014年六輕就給麥寮鄉民達3億元回饋金。這樣的安排缺點在於:a. 每個人對於自身被污染代價願意用多少錢交換不一樣,因此有人有消費者剩餘,有人反倒是淨損;b. 污染範圍難以界定,邊際污染區的人可能根本拿不到回饋金;c. 政治力介入後回饋金也不見得是反應a點所指之交易,而牽涉到政治人物的算盤,與d.看不見的交易容易出現在政治人物與污染者之間。
因此被污染者如果 #真的在乎也計較污染,那另一種有效率的解決方案是透過市場交易,由被污染者買下污染者的產權與未來繼續生產權利。
這同時也說明,為什麼不能由政府出面收購污染者產權?
因為政府收入來自於稅金,稅金包含了污染者或其他並不在乎污染的人的錢,用政府資金買入則侵害了這二種人的權利。尤其是當污染者交的稅金遠高於被污染者(包含實際上可能沒被污染的環保人士)時,會出現:「你們強迫我納稅,再用我交的稅金強迫買下我的資產要我滾蛋」的實則侵害污染者產權的現象。
那為什麼現實沒有環保團體這樣出錢買下污染者產權呢?我認為理由有三:
1. 其實環保團體人士多數 #並不真的那麼在乎污染問題,因為他們不願意付出夠高的市價。又或者他們找不到足夠多的、真正在乎特定問題的資金,同時暗示著 #多數人其實也沒那麼在乎。
2. 多數環保人士想利用政治影響,好付出低於市價的代價來達到目的。這是 #民主制度的弊病,無條件一人一選票必然產生的缺點。其結果是污染者權利受到侵害但沒有補償,同時透過政府也創造很大的 #尋租與制度化貪汙空間。因此帶來第三點:
3. 少數環保人士想要的是 #政治影響力與貪汙空間,並非真的在乎污染問題。(事實上若污染真的沒了,這些少數環保人士反倒失去收入了)。
本文主要談論了環保議題的解決方案之外,其實也順道談了法律經濟分析上一個重要題目–「#外部成本」。
一些自以為懂法律經濟分析的專家,文章、會議開口閉口「外部成本內部化」,其實會談「外部成本」本身就代表他 #經濟學不及格。之所以存在外部成本正是因為產權效果界定存在高度費用,才會有外部/內部之分別。換言之,不可能透過單純課稅或立法,就解決這個制度費用的問題,我們只能透過不同產權規劃排列得知序列上制度費用是否有所改變。
講白了,談「外部成本內部化」只是一種脫褲子放屁的套套邏輯言論,外部成本理論本身也不符合經濟學的科學方法要求,更對瞭解真實世界運作以及解決問題一點幫助都沒有。我知道許多學者嚷著外部成本還能用複雜軟體跑一堆統計迴歸show出成本,其實八成只是在編造故事,並非科學。
http://www.yuanyu.idv.tw/?p=1806
#一切都是環境的錯 #社會的錯 #你們的錯
#嘴巴那麼在乎環保就是不肯拿出錢來
#往別人褲兜掏錢是這些人最大特色
#用群眾暴力的方式要別人就範
#這跟聖戰組織有什麼兩樣
#民主真是個好東西
#有民主真好