作者DarkerDuck (達克鴨)
看板DigiCurrency
標題Re: [問題] 完全去中心化是否真的必要?
時間Mon Feb 26 16:17:00 2018
其實越研究最近對於區塊鏈效率的額外改進方案,越會覺得中本聰的區塊鏈真的是神解
對於全球性金流系統而言,最重要的是
可用性和
共識安全性。
比特幣將可用性的優點體現在不分時間地點、都可以和任何人有比特幣錢包進行交易
在共識安全性上,因為有全網共識,避免了雙花和撤銷交易的可能性,甚至比信用卡安全。
而依照CAP理論,所有的效率的改進方案幾乎都會損害到區塊鏈貨幣的可用性和安全性。
什麼是CAP理論呢?它是對於分散式資料系統的一種限制,你無法同時滿足以下三點特性:
Consistency: 一致性 (所有節點在同一時間具有相同的數據)
區塊鏈系統當然要有同樣的數據資料,並且用PoW或PoS得到唯一有效的共識。
這是對於交易系統的安全性基本需求。
Availability: 可用性 (保證所有類型請求都可以在時限內獲得回應)
對於全球金流系統可用性當然是最重要,
任何使用者可以跟使用網際網路一樣,在任何時間、將所擁有的資金、轉到任一地址。
Partition tolerance: 分隔容忍 (切割成子系統不會影響系統的繼續運作)
中本聰的區塊鏈系統基本上已經把一致性和可用性推到極限。
所以你今天要用比特幣就一定要聯網和區塊鏈同步,大家共識必須一致。沒有子系統。
實際上區塊鏈系統在不擁塞的狀態下根本完美得不得了,一般交易零確認快如閃電。
不信的可以去用零錢玩SatoshiDice,送出交易三秒內就會被偵測到完成一局。
有贏錢三秒內自己的錢包就會收到,根本是real-time的體驗。
連博弈網站都敢這樣搞,bitpay和coinbase也這樣玩很久,代表小額零確認交易非常安全。
所以我一直認為增進區塊鏈容量和效率的技術,才是全球金流系統真正該發展的方向。
那再來看看對於區塊鏈效率的額外改進方案,是否真的是萬靈丹,
可以在不影響一致性和可用性下改進金流系統的效率。
先以已經可以用的
Payment channel來看,
它的原理就是Alice和Bob先把自己一部分的資金鎖到通道內,然後互相只交換未確認交易
只有最後要結束通道的時候,才把最後一次的結算交易丟給礦工做確認和結算。
那這樣就大幅減低了礦工負擔了,增加擴容可能性。因為資金先被鎖住也不會被雙花。
但問題是這極大幅度削弱了區塊鏈貨幣的
可用性,你的資金被
鎖住了。
本來比特幣可以隨時隨地可以轉給任何人,但現在被鎖住只能轉給特定人。
為了解決這個問題,所以後來又搞了一個極端複雜的金流網路,光白皮書就嚇死人。
https://lightning.network/lightning-network-paper.pdf
BTC的
閃電網路,在ETH也有一個差不多一樣的實作叫做Raiden雷電網路。
把on-chain fee推高,讓Core一直狂推,把大家都趕到這個網路內,全部都連在一起。
那這樣可用性不就變高了嗎??
好像很合理。但問題是它的
可用性和本來的區塊鏈系統相比
脆弱非常多。
首先你要發交易當然還是要鎖錢,重點是和你連線的Payment Hub
不能離線,連自己也是。
實際上只要金流的路徑中任何一個節點突然離線了,你的交易就會失敗。
因此這些Payment Hub必定會是非常專業化的,才會閒著沒事24小時開著永不斷線。
但區塊鏈系統大家都可以
隨時上線和離線,但你仍然是永遠可以使用。
更不要說路由問題,要去中化作routing一直是資訊科學裡難解的問題。
現在的Internet實際上是用非常
中心化的方式去做routing,
就幾個骨幹ISP在網路交換中心做路由,甚至很多部分還是要靠人工設定的。
之前就有發生台灣網路交換中心隔壁機房失火,台灣就大斷網的事件。
而目前閃電網路仍然是靠直接全網廣播所有節點路由資訊,來尋找最佳的金流路徑。
然後說這種方式可以解決本來區塊鏈系統的擴容問題,這我真的笑了。
區塊鍊的擴容瓶頸在於通訊瓶寬,你每發一筆交易就要全網廣播到所有礦工節點。
結果現在變成更新路由資訊也要全網廣播,一個hop廣播一次。
可以預見的是,閃電網路系統的頻寬擴容問題甚至會比本來區塊鏈系統更為嚴重。
再來是閃電網路和一般stateless routing不一樣,可不像一般通訊封包丟了就算了。
每個路徑都還有收支平衡、金流寬度、交易狀態等問題,挖靠,根本大爆炸。
更不要說
收款也必須在線這極大幅度影響可用性的問題。
要轉大額款項更是不可能的任務。
可以想見的是閃電網路它的
可用性必定遠遠不如於原本的區塊鏈金流系統。
那麼假如我們把區塊鏈系統切割成一個一個的子系統,是否就可以擴容了呢??
那這其實就是
sharding和
plasma的目標。
https://blockgeeks.com/guides/what-are-ethereum-nodes-and-sharding/
shard可以把會互相交易的同一個DApp丟到同一個shard內。
shard內的交易只讓該shard的隨機validator去確認有效性,
然後寫state root和tx group root到main chain上。
plasma則使用子區塊鏈,同樣把同樣會互相交易的DApp丟到這個子區塊鏈。
但其實這兩個方案適合的是DApp的應用,一個DApp本來就只需要服務部分人,
而不是全部人,所以把DApp丟到shard內,或是plasma的子區塊鏈內,非常適合
因此這兩個方案只有ETH在研發,BTC根本沒在推這兩個方案。
但是全球金流網路這個應用是要服務所有人,要分割子系統就必定會導致延遲。
譬如每一國都有自己自己的shard或是plasma子區塊鍊。
但是比特幣相比於法幣最大的優點就是無國界金流,結果變成所有跨國金流都有高延遲。
以shard來說就需要cross-shard communication,仍然是影響到原本金流系統的可用性。
當然也不排除後來有個比中本聰更神的人來解決這個問題XD。
所以有些系統乾脆對於去中心化的
一致性妥協,譬如IOTA,他必須靠COO來維持共識。
結果變成瓶僅卡在COO,拿掉COO理論上可以很快,但如何維持安全性共識仍然有挑戰。
既然中本聰已經發明這麼好的東西,我認為金流系統把區塊鏈推到極限才是主要目標。
譬如Graphene可以把區塊鏈系統的通訊瓶寬效率搞到逼近於IOTA。
而weak-block可大幅強化零確認交易的安全性,本來就跟閃電網路一樣快。
off-chain或是第二層的方案當然也可以同步研發,對於高頻交易或特定應用很有用。
但直接把區塊鏈系統直接蓋掉反而弊大於利。
--
simpleledger:qryeahexpqszdt9ffech6jhxu6wsfp0fnyhgd44ahf
Bitcoin: 1GxtyprMfcxE366BDUsg1skQyuAnxktZjc
https://www.blockchain.com/zh/btc/address/1GxtyprMfcxE366BDUsg1skQyuAnxktZjc
Bitcoin Cash: bitcoincash:qp928h4q4xasa5wh2x88xhsxgc4vwj6g95uzq0ak97
https://goo.gl/2qNr43
Ethereum: 0x4A2B1e35eb64141bbad4C58cB7D79692bC5Dbbc2
https://etherscan.io/address/0x4A2B1e35eb64141bbad4C58cB7D79692bC5Dbbc2
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.237.120.143
※ 文章網址: https://webptt.com/m.aspx?n=bbs/DigiCurrency/M.1519633022.A.2CF.html
※ 編輯: DarkerDuck (36.237.120.143), 02/26/2018 16:33:24
1F:推 allen139443: 首推 02/26 16:34
2F:推 tcn1john: 再推 02/26 16:37
3F:推 freshego: 推 02/26 16:38
4F:推 poorviv: 推 02/26 16:46
5F:推 Fice: 推 02/26 16:52
6F:推 kugwa: 好多技術只聽過沒時間研究 感謝板大做整理 02/26 16:56
7F:推 ahaha777: 推 02/26 16:59
8F:推 ProtectChu56: 我想版大需要自m文XD 02/26 17:10
9F:推 brain1472000: 推 02/26 17:28
10F:推 ssnopra: 推 02/26 17:28
11F:推 ketao: 推 02/26 17:40
12F:推 EthereumPTT: 感覺ETH發展會比較好 02/26 17:41
13F:推 unojazz: 推 02/26 18:19
14F:推 CCben: 專業文整理 02/26 18:27
※ 編輯: DarkerDuck (36.237.120.143), 02/26/2018 18:35:50
15F:推 camellala: 謝謝板主專業解說,每次看板主的文章就是在提升自 02/26 18:43
16F:→ camellala: 己的知識層次 02/26 18:43
17F:推 berry383838: 版主威猛 02/26 19:06
18F:推 sss910278: 上一次聽到CAP是大二修資料庫的時候xDDD 02/26 19:09
19F:推 rmp4rmp4bear: 如果不是BCH可以改動難度,我大BCH為唯一正統 02/26 19:36
20F:推 davidchen329: 版主威 02/26 20:12
21F:推 camellala: 如果BCH能由PoW改成PoS,會更好 02/26 20:18
22F:推 jackshyu: 推長知識文 02/26 20:35
23F:推 tsl3333: 專業長知識 02/26 20:40
24F:推 evilplayer: 推推~~ 02/26 23:04
25F:推 timwu: 詳細解說給推,聊點想法,sharding不算L2, core & EVM都要改 02/26 23:17
26F:→ timwu: phase2可能要fork才能上,我歸類為L1, 再來 channel routing 02/26 23:18
27F:→ timwu: 我也覺得太複雜,所以我都只推簡化版uRaiden, 只給eth 因為 02/26 23:21
28F:→ timwu: BTC script能力不夠啊, 講到跨國交易, 把貓貓嫩模都在L2處 02/26 23:24
29F:→ timwu: 理掉 主鏈就不會塞啦,POS也有加速效果 只是團隊很少強調, 02/26 23:26
30F:→ timwu: eth fan最自豪的 現在都還沒加速的超塞主鏈一天處理的交易 02/26 23:27
31F:推 martin77: 長知識了 02/26 23:28
32F:→ timwu: 數超過其他所有幣種包含BTC的總和. 02/26 23:28
33F:推 treck: 推推 感謝解說 02/26 23:34
34F:推 coldcolour: 推 02/27 01:51
(DarkerDuck 刪除 catfod 的推文: 農場連結)
(DarkerDuck 刪除 catfod 的推文: 農場連結)
35F:推 sdtty: 所以ripple才是最強的... 02/27 07:40
36F:推 wukeepo: 好強喔 02/27 08:17
37F:→ DarkerDuck: Ripple並無法達成trustless去中心化共識 02/27 11:07
38F:→ DarkerDuck: 而且實際上Ripple的官方具有凍結帳號的權利 02/27 11:07
39F:→ DarkerDuck: 當然假如你不在意這兩點,Ripple交易速度的確更快 02/27 11:10
40F:→ DarkerDuck: 只是這種東西和傳統銀行金流系統並無太大的差別 02/27 11:10
41F:推 steven01942: LTC現在就走在如此的路線上? 02/27 13:43
42F:推 goldflower: 推個 這篇好多關鍵字讓人survey 02/27 13:54
43F:推 john371911: 推。graphene 還有什麼關鍵字查?有沒有易讀的中文資 02/28 00:05
44F:→ john371911: 料? 02/28 00:05
46F:→ DarkerDuck: 這是論文,和閃電網路相比,基本原理簡單非常多 02/28 00:20
47F:→ DarkerDuck: 只是數學驗證collision機率對於一般人比較困難 02/28 00:20
48F:→ DarkerDuck: 我用白話講就是區塊鏈系統的區塊傳播 02/28 00:20
49F:→ DarkerDuck: 不再包含所有交易,只需要包含這些交易的filter表 02/28 00:22
50F:→ DarkerDuck: 所以區塊大小可以極大幅度縮小,達到逼近O(1) 02/28 00:22
51F:→ DarkerDuck: 剩下的擴容瓶頸就會主要是交易的通訊瓶寬 02/28 00:24
52F:→ DarkerDuck: 我一直覺得區塊鏈系統才是簡潔的金流解決方案 02/28 00:26
53F:→ DarkerDuck: 對於金流系統而言,複雜度太高根本是"大災難" 02/28 00:27
55F:→ DarkerDuck: 中本聰的比特幣論文也不到十頁而已 02/28 00:27
57F:→ DarkerDuck: 研究結果指出可以讓區塊傳播小到 "一個封包" 02/28 00:39
58F:→ DarkerDuck: 早期的比特幣研究大部分的精力都在區塊鏈系統改進上面 02/28 00:41
59F:→ DarkerDuck: 我真的非常賭爛現在的Core竟然"放棄了"區塊鏈繼續改進 02/28 00:42
60F:→ DarkerDuck: 直接丟一句區塊鏈不可能改進擴容就算了 02/28 00:43
61F:→ DarkerDuck: 大家一起冒著丟錢的風險來用"去中心化"的LN喔 02/28 00:44
63F:推 rmp4rmp4bear: 覺得好像dna, 區塊組成的長鏈用蜁轉的收束方式可以 02/28 01:14
64F:→ rmp4rmp4bear: 大幅減少空間 02/28 01:14
65F:→ DarkerDuck: 其實這個技術不會縮小區塊鏈大小 02/28 01:17
66F:→ DarkerDuck: 但可以極大幅度降低擴容後,孤立塊的產生 02/28 01:17
67F:→ DarkerDuck: 這樣礦工就更願意把區塊上限調高 02/28 01:17
68F:推 rmp4rmp4bear: 只是現在在把每個塊只留能完整還原所有資訊的片段 02/28 01:18
69F:→ rmp4rmp4bear: 階段 02/28 01:18
70F:→ rmp4rmp4bear: 了改 02/28 01:18
71F:→ DarkerDuck: 其實還有其他分散式的區塊鏈儲存以及UTXO查詢技術 02/28 01:19
72F:→ DarkerDuck: 但是Core全當作沒這回事,區塊鏈就是廢,LN就是棒棒棒 02/28 01:19
73F:→ DarkerDuck: 一些比較舊的區塊鏈可以產生UTXO後砍掉,並分散儲存 02/28 01:20
74F:→ DarkerDuck: 最近Core才剛把零確認交易這個超有用特性幾乎廢掉 02/28 01:28
75F:→ DarkerDuck: 說啥零確認交易不安全,RBF預設開啟才能避免交易卡死 02/28 01:29
76F:→ DarkerDuck: 結果BCH有人懸賞1000美金看有沒有人可雙花零確認交易 02/28 01:29
77F:→ DarkerDuck: 到現在也沒看到那些Core專家雙花成功,笑死人 02/28 01:29
78F:推 a2935373: LN一定要online這點真的太北七了... 02/28 02:03
其實本來的BTC離線交易的能力是很強的:
發送端假如沒有聯網,然仍可以透過自己的私鑰簽章交易,
並且透過藍芽、NFC甚至是QRcode傳輸給接收端,
接收端再把這個交易廣播出去即可。
或是接收端沒有聯網,只丟個QRcode,發送端一樣簽章交易聯網送給礦工即可。
79F:推 sdtty: 如果core那麼鳥 為何礦工算力沒有站出來反抗呢? 一直想 02/28 17:04
80F:→ sdtty: 不透 02/28 17:04
81F:推 qxxrbull: 話說零確認交易沒有辦法成功做出double spending的原因 02/28 17:08
82F:→ qxxrbull: 是什麼? 我印象中不是實作還是要2確認才算不會被翻盤嗎 02/28 17:08
交易所的實作大部分都是兩確認以上,因為交易所幾乎都是大額交易。
有錢能夠使礦工推磨,那就有可能如後所述的買通礦工作雙花交易。
所以交易所幾乎都不願意接受零確認交易。
不過也是有例外啦,早期的shapeshift的確會接受小金額的零確認幣幣交易。
83F:→ DarkerDuck: 礦工本身就唯利是圖,已經做出BCH這個後備方案就好了 02/28 17:29
84F:→ DarkerDuck: 反正挖礦演算法都是一樣的,哪個獲利多就挖哪個 02/28 17:30
85F:→ DarkerDuck: 假如BCH的價格是BTC的十分之一,當然算力也是十分之一 02/28 17:30
86F:→ DarkerDuck: 零確認交易當然有機會可以double spend 02/28 17:30
87F:→ DarkerDuck: 但是你要和夠多算力的礦工配合 02/28 17:31
88F:→ DarkerDuck: 不然依照BCH本身的共識規則,你雙花交易根本傳不出去 02/28 17:31
89F:→ DarkerDuck: 初版的BTC是禁止雙花交易在網路中被轉傳的 02/28 17:32
90F:→ DarkerDuck: 結果被Core改掉,說這樣有助於fee market 02/28 17:32
91F:→ DarkerDuck: 現在BCH又把這垃圾功能拿掉,所以根本不怕雙花 02/28 17:33
92F:推 kugwa: 禁止雙花交易在網路中被轉傳 02/28 17:35
93F:→ kugwa: 意思是mempool裡是否允許雙花的交易存在嗎 02/28 17:36
94F:→ kugwa: *不允許 02/28 17:36
95F:→ DarkerDuck: 當然不允許,你雙花交易會被視為conflict transaction 02/28 17:38
96F:→ DarkerDuck: 不光是進不了mempool,連轉傳出去都沒辦法 02/28 17:38
97F:→ DarkerDuck: 不過後來Core加了一個option flag叫做RBF 02/28 17:38
98F:→ DarkerDuck: 讓更高手續費的交易可以取代原來mempool的交易 02/28 17:39
99F:→ DarkerDuck: 說這樣有助於fee market,也能避免交易卡在mempool 02/28 17:39
100F:→ DarkerDuck: 現在更是直接當作預設值,所以BTC已經沒有安全的 02/28 17:40
101F:→ DarkerDuck: 零確認交易了,這項本來中本聰有提到的特性被毀滅 02/28 17:40
102F:→ DarkerDuck: 不過Core當然可高興了,這樣LN的交易速度就沒人可比了 02/28 17:40
我直接舉個BCH要如何雙花零確認交易的例子好了,
本來初版BTC的規則就是進到mempool的交易不能被取代,
所以接收端要安全地接受零確認交易只需要多連幾個礦工節點,
大約同時連十幾個礦池節點就足夠達成90%算力保護。
https://bitcointalk.org/index.php?topic=423.0
因此要雙花一筆零確認交易必須偷偷和擁有大算力礦工配合,或是根本就是內鬼。
(這也的確有發生過,雙花SatoshiDice,但很快就被抓包,礦池就把那個內鬼員工開除)
首先把兩個同私鑰的錢包準備好,然後要和一個有高算力的礦池配合,譬如擁有30%的算力
這個礦池同樣表面上一樣不會轉傳雙花交易,但卻會把雙花交易放到mempool裡等確認。
既然擁有30%算力,就代表有30%的機率可以成功雙花,假如是損耗很少的交易
譬如是勝率極高版本的SatoshiDice,那就有利可圖。
等到確認後,整個礦工網路就會發現被婊了,怎麼被確認的交易不是mempool裡的呢??
其實這很好抓,的確也有發生過,但是你要和礦工配合,而且也很容易被抓包。
但是當然還是有很多人認為不夠安全,礦池真要這樣搞裝死你也無法可施。
所以也有改進方案提出。譬如雙花警告系統,或是weak block。
不過以小額商品交易而言,這風險小到根本可以忽略,絕大部分雙花嘗試都是浪費錢而已
103F:推 kugwa: 我知道RBF是為了解決卡交易的情況 02/28 22:10
104F:→ kugwa: 但我也同意板大說的 沒有transaction replacement的話 零確 02/28 22:11
105F:→ kugwa: 認交易就會很安全 02/28 22:11
106F:→ kugwa: 請問板大認為在disable RBF的情況下 要怎麼避免卡交易的情 02/28 22:15
107F:→ kugwa: 況發生呢 02/28 22:15
108F:→ kugwa: 是用policy解嗎 例如mempool裡太老的交易優先權會升高 02/28 22:17
最簡單的方式就是讓mempool的timeout時間變短,我覺得6小時就夠了。
BTC歷史上並沒有發生超過六小時仍未有區塊產生的情形。
而不是72小時或甚至是兩個禮拜,那實在會讓交易卡太久。
但也不用急著踢出mempool,而是標記為timeout,讓使用者可以用更高手續費交易去取代
這樣仍然是幾乎不會影響到零確認交易,
因為零確認交易的policy本來就只會去接受手續費高到可以在下一個區塊進去的交易。
而比特幣本來就沒有所謂的fee market去搶著進區塊這種想法。
若要防止spam的話直接把relay fee調高即可。
讓mempool的大小膨脹到區塊大小的數百倍根本就是亂搞。
而區塊大小限制應該是要遠大於一般交易需求的。
在這種狀態下,零確認的安全性甚至超越閃電網路。
※ 編輯: DarkerDuck (61.227.200.140), 03/01/2018 03:39:45
109F:推 ctes940008: 推 03/01 14:08
※ 編輯: DarkerDuck (61.227.200.140), 03/01/2018 14:30:06
※ 編輯: DarkerDuck (118.171.109.20), 03/29/2018 11:43:56
※ 編輯: DarkerDuck (36.237.86.94), 05/04/2019 04:29:36