解碼看門人迷思:開發者與位元幣“生態”



一一回應關於位元幣、開發者社群以及生態的常見誤解。

解碼看門人迷思:開發者與位元幣“生態”插图1

您現在收聽的是由HashKey Capital 製作的播客節目 Hash Out 42。在《銀河系漫遊指南》裡,超級電腦“深思”經過長達 750 萬年的運算與驗證之後,得出生命、宇宙、萬物的最終答案是42。這檔節目裡,我們希望與來自 Web3宇宙的創業者、投資人、開發者、社群參與者、監管機構一起分享關於加密及區塊鏈產業的最終猜想。

阿劍00:34

“這些開發者,實際上他們沒有這麼大的這個權力能夠影響到你在這個位元幣的區塊鏈上能做什麼,不能做什麼。”

Jeffrey Hu 00:40

“Luke,他想要去做的事情,可能不是在共識規則這個層面去進行一些修改,而更多的還是在本地的客戶端或者全節點這個層面上。”

阿劍00:51

“這個保守的意義在於,他始終把安全性放在最重要的這個層面,所以它不會去隨便嘗試任何東西。但是你可以認為它是不保守的,因為發現了一種好的解決方案的話,其實大家會很積極地去擁抱它。”

Jeffrey Hu 01:08

hello,大家好,歡迎收聽由 HashKey Capital 製作的播客節目 Hash out 42 的第三期。我是胡智威,HashKey Capital 的技術總監。今天非常榮幸邀請到了位元幣研究者 BTC Study 貢獻者阿劍老師來和我們一起探討位元幣生態的一些迷思。那阿劍老師要不跟我們聽眾朋友打個招呼吧?

阿劍01:28

聽眾朋友們大家好,我是阿劍,我是一個位元幣的研究者。非常榮幸收到Hash out 42 的邀請,來跟 Jeffrey 一起錄製這一期播客。

Jeffrey Hu 01:39

OK,好的,我們這期播客的名字其實叫做解碼看門人迷思,我們想討論位元幣,包括位元幣生態的,大家常見的一些誤解。對,所以我想要不我們先邀請一下阿劍老師來說一下這個最近的一些迷思,因為就像標題一樣,那我估計可能最近大家會有一個我們觀察到的一個誤解,也是我們在做這期播客節目之前去討論到的一些東西。就是說,某一些開發者是看門人,就基本上可以做什麼,或者不能做什麼都是由他們說了算的。在這一點,這個第一個可能大家比較關注的迷思上,阿劍老師有哪些可能想要評論的?

阿劍02:19

這個是中文世界長期以來,嗯,你可以說是根深蒂固,甚至說是最根源的一種迷思,或者說一種想像。它對於位元幣的開發者,尤其是所謂的Bitcoin Core 的客戶端的開發者,認為他們看門人就是能做什麼,不能做什麼,都是得由他們說了算的。實際上,這種想法其實幾乎就沒有什麼真實性可言了,因為大量的事情就是,不管是被某一個還是某一些,還是被許許多多的 Bitcoin Core 的開發者,或者是其他的客戶端的開發者不喜歡的這個事情,直到今日,直到我們錄播客的今天,其實還在位元幣的區塊鏈上仍然在發生。

舉個例子,就大家可能最近都聽說過有一位開發者,他叫Luke,那Luke他有一個特別鮮明的立場,就是他反對在位元幣的區塊鏈裡面亂塞入數據。當然這個具體來怎麼定義,什麼是跟位元幣有關的數據,什麼是跟位元幣無關的數據,不應該寫入的數據,他自己沒有明確表達過。但是我後來仔細想一下,其實它的這個核心的意思,我自己的總結,不,我不能代表它,但是我自己的總結,我認為是一種可以接受的信念是,位元幣的區塊鏈上只應該寫入跟位元幣的密碼學安全有關的數據。

阿劍03:36

什麼是跟位元幣的密碼學安全有關的數據?比如說我們每一筆位元幣它都是一個輸出,那它的腳本當中,會需要註明公鑰來確認說,這筆錢只能被哪個公鑰的所有者(就哪一個私鑰所花費),以及當它被實際上被花費的時候,會需要在鏈上去記錄一個由這個公鑰背後的私鑰計算出來的這個簽名,由這個簽名來證明這筆花費是有效的。

阿劍04:02

那這些東西的話,可以總結為他們是跟位元幣的密碼學安全有關的數據,但是相應的其他的一些,比如說任意的這些數據,類似於額外的資訊,或者今天發生的什麼,有一些人想在上面寫一個生日祝福之類的,這些都是跟位元幣的密碼學安全無關的資訊,那它們就不應該被寫上去,這是我自己個人的總結,但是Luke的他的想法可能會跟這個想法接近,或者是更嚴苛一點都好,我想指出的事實是可能Luke他不喜歡這樣,包括可能不止他一個人不喜歡這樣,但是很多人都會發現這些事情其實到今天它依然在發生,而且你這樣做的就是說記錄了這些額外資訊的,跟位元幣的密碼學安全無關的這些資訊的這些區塊依然是有效的這個區塊。

包括也有很多開發者認為其實這些事情是根本沒有辦法阻止,就是說你其實是技術,不存在一種有效這個技術手段能夠成功地分離開什麼是有意義的,對位元幣的這個安全性有意義的這個數據,什麼是沒有意義的這個數據,因此也就是在根本上註定了這些事情,就是說你最多你只能玩一個打地鼠的遊戲,或者說貓抓老鼠的遊戲,出現一隻老鼠,你抓一隻老鼠,但是不存在一種一勞永逸的辦法。

阿劍05:19

那總而言之,我想表達的意思是,首先不管大家怎麼去理解,有一部分或者說一些位元幣的開發者明確表現出來的個人立場,這些開發者,實際上他們沒有這麼大的這個權利能夠影響到你在位元幣的區塊鏈上能做什麼、不能做什麼。

尤其是有一個非常重要的這個事情,就是如果大家能理解這個事情的話,就應該能夠理解到,其實不管是開發者還是礦工,其實他們的這個權利其實都是在一定的制衡的結構當中,就是位元幣的網路當中選擇什麼樣的這個共識規則,就是說允許什麼樣的這個區塊成為一個有效區塊的這個共識規則是由每個節點自己選擇的,就是你作為一個節點,你可以選擇你認為自己認為有效的這個共識規則。當然你的這個共識規則不能選擇跟其他人不相相容的,但是隻要是這個相容的這個規則當中,你可以自己選擇一套。

阿劍06:09

舉個例子,大家都現在都聽說2021 年實施的這個 Taproot 的升級,但是事實上如果你運行一個 Taproot 升級以前的這個 Bitcoin Core 或者是其他的客戶端的這個版本,你的節點不會離開網路,你的節點依然在網路當中繼續擔當它作為一個全節點的這個驗證功能,只是它無法驗證所謂的這個 Taproot 的輸出的相關的這個交易,再往前推一點, 2017 年的時候,位元幣網路激活了隔離見證分叉,那麼如果你是使用的一個在隔離見證以前發佈的這個 Bitcoin Core或者是其他的 Bitcoin 客戶端的這個版本,你到今天你依然能夠運行在位元幣的網路上,也就是說你只是不運行 2017 年以後的新增的這些位元幣共識規則相關的這些交易,使用 2017 年以前的這些共識規則的這個交易,你一樣是能夠驗證的。

阿劍06:58

這就說明一點是什麼呢?說明瞭所謂的位元幣網路當中,它到底是用哪一些規則來限制我們能在位元幣的區塊鏈上做什麼?這些事情實際上是由一個位元幣的全節點網路分散式的決定出來的,並不是由某一個人或者某一群人決定出來的,不管這一群人,到底是比如說某一群礦工或者是某一群開發者,這種想法其實都是偏離事實的,最接近事實的真相是什麼?是這件事情是由位元幣的網路,一個由全節點組成的網路,現在全網有公開,有15000 個節點, 16000 個,甚至那不公開的這個節點有更多,由這些節點的這些運營者使用一種完全平等的這種方式來決定出來,他到底去驗證一個區塊的哪一部分,哪些區塊在他看來是可以接受的,基本上是這樣的一個過程。

阿劍07:52

所以不存在說某一個人、某一個開發者或者某一群開發者他能夠成為整個網路的這個看門人的這種角色,如果存在這樣的角色的話,其實位元幣就失敗了,因為位元幣它想要做的是一種抗審查的貨幣,或者說它想要的正是一個沒有單點故障的系統,如果存在這樣的人,他有這麼大的這個權利的話,他就變成了一個單點故障。

Jeffrey Hu 08:18

一個延續的一個話題,其實就是經常可能會有一種誤解,就是好像這個某一個網路裡面,它是由某一群人去說了算的,那麼可能是剛才是提到開發者,也有可能是一些礦工等等,他們是可能會決定這個整個網路的走向或者命運。那麼其實這個是我覺得可能大家會常見的一種誤解,那麼其實可能位元幣更像剛才阿劍老師說到的,是一種比較分散的網路,比較去中心化的網路,所以每個人的運行全節點他還是有他自己的一些意義在這塊。那除此之外,最近其實也看到一些新聞報道,就是就順著剛才說那個開發者那個話題來說,就經常有一些新聞報道里面會提到一個詞叫做核心開發者。

那我先說點我自己的感覺,就是我每當看到這幾個字的時候,我自己血壓會稍微升高一點,因為感覺大家可能沒有理解剛才阿健老師說的這個開發者背後的一些概念,因為也有可能是翻譯上的一個錯誤,就是大家可能不太會注意到大小寫,就會把這個Bitcoin Core Dev,就是大寫的 C 的 Core Dev 可能理解成了小寫的 core Dev,就是位元幣的核心開發,但實際上如果我們要去做一個分詞的話,其實應該是把前兩個單字Bitcoin Core分成一個詞,作為位元幣的其中一種,我們剛才說的全節點的一種實現的開發者,而不是位元幣的 core dev ,不是位元幣的核心開發者,不是說整個位元幣的網路都是由這些核心開發者去說了算的,那麼其他一些網路可能會大家會看到,比如說像以太坊的核心開發者可能會在經常會有一些他們的像,比如 ACD call 或者是這種meeting,他們會決定,比如說明年 1 月份可能就要有一些硬分叉的升級或者怎麼樣?但位元幣好像沒有這麼一個比較集中的一個核心開發者群體去做這種對於網路硬分叉的升級的討論。

Jeffrey Hu 10:11

那當然其實也會,比如說對Bitcoin Core 可能會有一些自己的,比如說提 PR (Pull Request) 的話,可能會有一些 PR Review Club 這種會議,可能會去討論一些這個升級,或者是一些 PR 的這個拉取的一個提案是不是合理,或者是有沒有其他一些影響,但是沒有一個這種核心開發者的會去決定整個網路的一個走向,這個可能是一個大家比較常見,也可能會經常會遇到的一種,我認為是一種誤解吧。那當然這塊就額外再提一句,就是就說明這個大小寫也很重要,就是我自己作為一個稍微有點強迫症的人就會看到這種從 Core 的這種 c 如果大寫看成小寫的話就會有問題。那同樣的,對於 HashKey 其實也類似,就是我們的這個 HashKey 的 k 經常會小寫,那其實 h 和 k 都是大寫的,我不知道對於這個有核心開發者這塊,阿劍老師沒有什麼要補充的。

阿劍11:00

對,其實我的反應跟Jeffrey 的反應有點像,就是血壓會稍微升高一些,甚至我想提一個比較刺激一點的提議,就是說如果我們聽眾朋友們聽到,再有人跟你提位元幣核心開發者就是用中文字寫出來的話,你應該合理地懷疑一下跟你溝通的這個人的對於位元幣世界的這個理解。我講這話非常不客氣,因為其實是這裡面有兩方面的原因,一方面是它是一種沿襲已久的誤會,我自己個人的懷疑是肯定在 2017 年以前這種誤會已經形成了,就是說大寫的Bitcoin,就大寫的 B 跟大寫的 C 開頭的一個 Bitcoin Core ,它本身,這個Bitcoin Core,我先說一下 Bitcoin Core 的這個來歷是什麼呢?

沒錯,它就是大家所熟知的中本聰自己寫的那個軟體 Bitcoin,這個軟體的後繼者。就是說在中本聰離開之後,然後一些開發者準備把整個的代碼庫遷移到我們現在的 GitHub 的網站上的時候,他們決定還是使用一個新的名字,就是使用了這個 Bitcoin Core,就是 B 也是大寫的,這個 C 也是大寫的,你說這個 Core 它一定有很大的含義嗎?其實也沒,我感覺也沒有。

阿劍12:15

順便再講一下,就是大家可能認為Bitcoin Core,它就以為位元幣世界裡面只有一種客戶端,其實也不是。因為 Bitcoin C ore 它雖然它佔據的這個使用量是最大的,就是Bitcoin Core的這種客戶端,但是其實也存在有其他語言開發的這個客戶端。比如說有一種客戶端叫 btcd,它是一個閃電網路實現的這個團隊 LND 就是 Lightning Labs 他們開發的一個Bitcoin的一個客戶端,它使用的是 Go 語言編寫的,還有一些人他們會使用 Java 語言編寫的這個 Bitcoin 客戶端,我猜現在應該也有人會嘗試使用 Python 或者是 rust 語言去寫一個位元幣的這個客戶端。

對,這些都是很常見的事情,而且大家還要考慮到另外一點,就是什麼呢?我前面已經講過了,你在位元幣的這個網路當中,大家不是非得使用同一個版本的軟體,也不是非得使用同一套共識規則。這意味著其實如果你在位元幣網路當中,你可能看到,雖然大家都在使用 Bitcoin Core 的客戶端,但是有些人使用的是 22.0 的版本,有些人使用的是 0.21 版本,有些人使用的是 0.17 版本。本質上來說,雖然他們都是使用的比如說 Call 的這個客戶端,他們的軟體在一定程度上它是有差別的,嚴格一點來說你不應該把它當成完全相同的這個軟體。

阿劍13:34

那撇開這一些,我們再繼續回來。那Bitcoin Core 這個名字,可能一開始中文世界的人在理解位元幣的時候,就直接把它翻成了位元幣核心,然後位元幣核心開發者,這樣的一種,你可以認為它是一種翻譯上的誤會,但是我想說的是它可能還受到第二點因素的影響,就是它是一種文化上的誤會。這種文化上的誤會是什麼呢?在於我不確定是否這是否受到了後來的一些密碼貨幣專案,比如說以太坊的這個影響,因為以太坊,它雖然有一些以太坊的這個開發者,或者是支持者認為自己使用了跟位元幣相同的治理結構,或者說 關於整個網路的這個應該如何升級、應該如何協調這個升級、如何確定升級內容,他們認為自己使用了相似乃至於相同的結構,但是我要說這並不是真相。

阿劍14:24

以太坊的開發會比位元幣的這個軟體的這個開發實際上它中心化的多。關鍵的一點就是像Jeffrey 說的,以太坊這個世界裡面是沒有一款客戶端叫做以太坊核心的。以太坊的世界裡面沒有一款客戶端叫做 Ethereum Core ,對吧?實際上你現在能找到是 Geth 客戶端,以前有 Parity 客戶端,現在 Parity 客戶端我不確定它還在不在維護,那現在可能有一些其他的一些客戶端,然後以太坊的世界裡,比如說它會有一個所謂的 all core developer meeting,大概是每兩個周的星期五晚上就舉行一次,然後就會說,需要討論某一些事項的時候,你就會邀請有一些人去參加這個會議,當然其他人可以旁聽,其他人旁聽不一定能表達意見,就是或者說能不能表達意見,這並不由你說了算,對吧?而是由會議本身有一個組織者,那他可以,他可以去設置這個議程。

阿劍15:19

然後還有一個很重要的地方在於以太坊使用的是所謂的這種硬分岔的這種升級模式。硬分岔意味著什麼呢?硬分叉就是如果你的節點不升級,而大部分人升級的話,那麼你就沒有辦法再加入這個網路了,你會因為技術上的理由直接被踢出這個網路,就是如果你不同意這個升級,或者是你不想升級你自己的軟體,你的節點就沒有辦法在以太坊的這個網路當中繼續存在下去,這是一個關鍵性的這個差別,這意味著誰掌握了這個定義我們要升級什麼、我們要更新以太坊協定所謂共識規則的這個權利的話,它實際上掌握了一種非常大的這個權力,可以使得一些人出於一個他自己並不自願的一個理由,會被踢出這個網路。這種權利實際上就構成了很多人理解的所謂的核心開發者的權力的來源。

阿劍16:08

而且這種想像在一定程度上在以太坊上是真實的,只是它在位元幣上並不這樣而已。因為位元幣選擇了完全不同的這個開發的方式,並且整個的社區文化也跟以太坊的完全不同,所以我在想就是說,一方面是沿襲已久的翻譯上的這種誤會,另外一方面是一種文化上的這種想像,這種文化上的想像可能跟你自己的這個實際的這個生活經驗有關,也有可能跟一些其他一些密碼貨幣的專案的這種開發的這個方式有關。

阿劍16:39

但是這一些在位元幣上這種文化想像是極大程度上是錯位的,因為位元幣裡面並不存在這樣的一種能夠掌握一種這麼大的權力的這個機制,實際上也不存在某一種像你自己的這個親身經歷一樣,有人能掌握這麼大的這個權利,相反,我建議你自己去嘗試運行一下Bitcoin Core 或者是其他任何的位元幣的這個客戶端。

阿劍17:02

我知道我有,我身邊有一些朋友是他就選擇不運行Bitcoin Core,就他明確表示他不運行Bitcoin Core ,他喜歡運行 btcd,對吧?這都完全沒問題。只要你自己運行一下這些客戶端,包括你可以,甚至你可以挑一些很老的這個版本的 Bitcoin Core,或者其他的這個位元幣的軟體的客戶端嘗試運行一下,然後你就會知道這是怎麼回事。

Jeffrey Hu 17:41

其實我覺得阿劍老師剛才的回答,其實可能也回答了另外一種大家最近常見的一種誤解,就是說Luke 他可能要新改一客戶端,那麼跟現在的很多 Bitcoin Core 的實現不一樣,所以他可能要去分叉了,或者是Luke,那他建議那個 Bitcoin Core 在新版本裡加一些功能,那可能會導致整個網路的分叉,那實際上這個也是一個比較常見的誤解,就是目前從我們看的公開的資訊來說,整個 Luke 他所想要去做的事情,可能不是在我們提到的共識規則這個層面上面去進行一些修改,而是更多的還是在本地的這個自己的所謂客戶端或者全節點這個層面上面做了一定的修改或者過濾,或者是一個轉發策略上進行了一些修改,所以就目前來看其實跟分叉其實是完全沒有關係的。然後剛才其實也說到了分叉這塊,就是還有一個大家會經常提到的一種誤解,就是位元幣開發文化其實可能會是比較保守的,因為每次都是軟分叉,阿劍老師對這塊是怎麼看?

阿劍18:41

我給大家一些數位,可能會讓大家更具體的理解這一點。或者我給Jeffrey 提一個問題。第一個問題是,你認為 Bitcoin 網路是否運行過硬分叉?第二個問題是如果有的話,你認為是幾次?

阿劍19:10

現在被大家明確認定的位元幣網路的這個共識規則更改的次數,總共包括Taproot 升級是 21 次,但是這裡面統計的方式,或者說定義方式是會有一些分歧。比如說我很喜歡的一位位元幣的工作者,就是應該是稱作工作者,因為他並不是一個開發者,他是 Jameson Lopp,他自己認為因為一些意外的原因構成了位元幣區塊鏈出現分裂的這個情形,在他看來也不一定被算為硬分叉,那麼在他看來位元幣網路上的硬分叉只有一次,我記得沒錯的話,應該是 2013 年。

阿劍19:49

為了什麼事情呢?為了向位元幣的腳本當中添加一種特殊的操作碼,就是NOP,就是遇到這個操作碼的時候,你的腳本應該是不做任何的事情,就遇到這個操作碼,你可以認為它只是一個佔位符,對,遇到這個操作你就不做任何事情,那這個不做任何事情的這種操作就完全多餘的。那它是為了做什麼呢?它是為了給日後的這個軟分叉升級提供幫助。

阿劍20:16

就是說舊節點,一旦這一次升級之後,是能夠理解NOP 操作碼的語法的一個節點,那麼你遇到這個節點的時候,你就不做任何事情。但是那些使用了新的共識規則的節點,遇到了一個 NOP 操作碼,它可能會明確地認定它是有一定的語義的,然後來去執行它的這個語義,然後從而完成這個所謂的共識規則的軟分叉升級,所以很有趣,對吧?你發生了 21 次共識規則變更,只有一次是硬分叉,而且這一次硬分叉還是為後面的軟分叉 升級提供幫助。所以可以認為,位元幣網路這麼多的升級當中,都是在做軟分叉的升級。

阿劍20:58

那麼我們再回到一個問題,就是說這種軟分叉升級的這個文化,我們先不管它是怎麼來的,那它客觀上對位元幣網路的這個影響是什麼?它會不會導致位元幣的開發者更加的保守?我覺得這裡面是有兩個方面的,一個方面是位元幣的開發者不是因為軟分叉而保守,或者說你可以認為大家對位元幣的這個網路的理解就是對於這個網路來說有一個東西是不能犧牲的,就是安全性,各方各面的安全性包括在於比如說我們說節點你能不能抵抗這個拒絕服務式攻擊,DOS 攻擊,對吧?以及個人用戶你使用公鑰的時候,或者說你使用腳本的時候安不安全?又或者是說整個網路的共識你在執行的時候是否安全?這些安全性是位元幣網路最重要的一個東西。

阿劍21:48

給定這個最重要的這個優先項的話,其實你自然而然會發現位元幣的開發者不會去嘗試任意可能嘗試的開發方向,而他們最主要的開發方向一定是說我要強化位元幣的安全性,這是一方面。所以如果一些人認為位元幣網路上好像不是什麼事情都能做,或者是說好像增加新的這個特性也特別慢,認為這是一種保守的一個表現的話,他們的第一印象是對的。但是至於說這件事情本身,說你是不是應該把它理解為一個保守,那我自己會覺得是保留意見。因為我接下來講的事情是在位元幣的,比如說2021 年的這個 Taproot 升級當中,它使用了這個施諾爾簽名,就是這件事情很有趣,有趣的地方在哪裡?我們知道位元幣是最早出現的密碼貨幣專案在內,在它剛剛出現的時候,它選擇了使用 ECDSA 這個這種電子簽名的這種算法,而且他選擇的橢圓曲線是中本聰精心挑選的,他避開了更多人使用的那一條,他選擇了一個更少人使用的那一條。

阿劍22:51

然後的話我們會發現後來很多密碼學貨幣專案都繼承了這一點,就包括後來的出現以太坊也好,或者其他專案也好,他們繼續使用了ECDSA 簽名。但是也有一些後來的這個專案,他們會使用施諾爾簽名的一些變種,比如說 Ed25519,就是如果瞭解密碼學的這個朋友會知道這個 Ed25519,比如說後來的 Polkadot,他就使用 Ed25519。可能還有一些其他專案也會使用這種算法,其實這種簽名的話,它也是施諾爾簽名的一種變種,所以會很有趣,就是當時這些位元幣的這個繼承者,他們繼續選擇 ECDSA 簽名,而且並且沿用到今天,甚至還準備繼續沿用下去,或者說至少不會特別積極的想使用新的一種簽名算法的時候,位元幣為了一些鏈上的效率,就是說節約鏈上空間也好,或者說為了讓這個鏈上交易更加緊湊,或者說因為使用了施諾爾簽名,因為 Taproot 的話,它也使用了施諾爾簽名來達成了一種非常有趣的用法,就是單一地址既可以既包括密鑰的這個花費方法,又包括這個腳本的花費方法,可以實現這樣的東西。

阿劍24:01

因為各種各樣的理由,位元幣就選擇了去支持施諾爾簽名。這件事情難道它保守嗎?就是說它難道不是本身就是很大膽的一種事情嗎?它在我能夠想像到的任何的意義上,它都是一個創新,一種非常大膽的創新。就是在Taproot 升級之前的話,你在位元幣網路上,你可以明確區分什麼是單公鑰的輸出,就是也就一般來說是個人保存自己資金的這個形式,以及腳本輸出,就是通常來說可能是個人的錢包,也有可能是更復雜的這種合約式協定所使用的輸出形式。

阿劍24:38

在Taproot 的以前,這兩種輸出你是能夠在鏈上區分出來的。而在 Taproot 升級之後,這兩種這個輸出的形式被合二為一,這本身就是一個非常大膽的這個事情。按照我的說法,我覺得這是一個非常非常精彩的事情,在任何意義上都當得起創新這個詞。所以你可以說它既是保守的,但它又是不保守的。這個保守的意義在於,它始終把安全性放在最重要的層面,所以它不會去隨便嘗試任何東西。但是你可以認為他是不保守的,因為當他發現了一種好的解決方案的話,其實大家會很積極地去擁抱它 。

Jeffrey Hu 25:14

沒錯,特別同意這個就是對施諾爾簽名的這個升級,因為現在我們知道,剛才提到的很多其他的區塊鏈的專案,其實他可能會至少在本身原生地址的這個層面上,如果要再新加一種簽名的這種方式,或者是改變原來的這種橢圓曲線的話,其實還是會阻力很大,就也有可能是因為技術架構原因,也有可能是因為整個文化或者是社區討論的一個原因,我們會看到其實會非常慢,那可能會採用一些其他的方式,比如說再加到智慧合約裡面做一種相容或者怎麼樣的方式來做。但不是像位元幣這種,基本上你可以認為是原生的方式去增加了一種簽名的這種方式,這點我其實是挺同意的。

Jeffrey Hu 25:56

那我們再說回到剛才Luke 的那個客戶端的那個事,就是剛才因為這是說分叉這塊去額外去聊到的一個話題,那其實分叉這個詞我個人不是特別喜歡,我不知道阿劍老師怎麼樣,我覺得分叉這個詞就經常會讓人感覺到有些誤解,就比如說剛才說到的那個,可能因為一些算力或者 bug 的原因,導致網路的分區,其實可能有時候也會被一些人認為是一種硬分叉或者怎麼樣,那實際上我自己理解的通常意義上的軟分叉或者硬分叉,那可以用另外一種技術名詞來進行代替。軟分叉其實就是相容升級,硬分叉其實就是非相容的升級,就是你加了更多的新的功能,那可能就自己的這個節點,就是要麼你認為是原來那些運行老軟體的這個節點不能在新的網路裡面來出現了,那如果是在位元幣網路裡面,其實我覺得可以把這個視角倒過來去看,就如果說一個節點如果要做一些硬分叉升級的話,那其實是自己把自己分叉出去了,那麼這也是一種相對的這種概念嘛,因為它不是不再遵守整個網路的一個共識的規則了。

Jeffrey Hu 27:01

那麼再多說一點,就這次Luke 做這個可能他自己想修改節點的這麼一個事情,但其實他更多的發生還不是在我們討論的這種軟分叉或者硬分叉的這個層面上面,還沒有涉及到整個網路區塊共識的這個層面上面,就有時候在網路上爭得面紅耳赤,但實際上更多的討論的是還是覺得這個節點其實可能會再直接去分叉出去,但實際上他做節點的這個事情還沒有到那個層面,就如果我們去直觀的理解一下,就是 Luke,其實做的層面是在整個的交易內存池,或者在交易池就 mempool 的這個層面,它只是做了一些節點的一些交易的過濾或者轉發策略上的一些修改。

Jeffrey Hu 27:41

那麼怎麼具體理解呢?這塊我可以再稍微展開一點,就是就因為大家可能原來用Metamask 或者其他錢包可能會更多一點,所以我們可以看到就如果要發一筆交易,基本上只要去點上幾下按鈕,交易就發出去了。那實際上在位元幣上面交易,從你去試圖去寫一筆,到最後再確認,基本上我自己理解可以分成三步,就第一步是對於你自己需要簽名這個交易的一個資訊,這是第一步,就已經產生了一個已經簽名的一個資訊。那第二步是要把這個簽名好的資訊去放到整個的交易的內存池裡面。那第三步才是打包到區塊裡面,這個就是簽完名的這個資訊,其實過程也是非常重要的。

Jeffrey Hu 28:21

第一步,比如說閃電網路裡面,雙方其實是可以互持閃電網路裡面的通道,雙方可以去互持對方去簽名過的一個一部分的交易的資訊,那如果對方作惡的話,就可以用這個以對方簽名的資訊,我再補上我自己簽名信息,就可以廣播出去懲罰做惡的對方了。所以這是就閃電網路裡面去用簽名信息的一步,其實也就對應到交易發出的第一步,那麼第二步其實才是說我如果要發一筆交易,我才把我簽名信息去廣播到網路裡面,然後我再讓其他的這個節點可以去進行處理,那麼節點也會收到之後做一些合法性的校驗,然後再去轉發。

Jeffrey Hu 28:59

那麼Luke 這次做的事情其實主要是在第二步,就是我的整個節點在接收到之後是不是要進行一些這個怎麼樣的一種過濾,或者是一個處理?因為他認為可能有一些交易可能會像 BRC 20的一些交易,可能會對網路的負擔太重,所以那就不希望在這個層面上,在 mempool 庫這個層面上再進行轉發了。

Jeffrey Hu 29:18

那麼到此為止其實都還沒有涉及到就是整個網路的共識這個層面,那最終其實如果要整個交易,在有些挖礦的一些節點,在根據整個現在mempool 裡面的資訊,包括上一個塊的一些資訊,整個去計算出哈希值之後,才會再把整個現在交易打包到區塊裡面,這才是了整個網路共識這個層面上面。

Jeffrey Hu 29:42

那所以其實可以看到就Luke 這次的只是一個在 mempool 層面上進行修改,其實跟分叉就沒有什麼太大的一些關係。對,然後我其實之前還想了一個例子,怎麼去更生動形象地去解釋這個事情,我想的一個例子是什麼?就是我不知道阿劍老師覺得是不是合適。我可以說一下我這個想法,以前可能會多一些,就是有些人會拿著很多的自己的零錢到銀行的網點去,我要去存錢,比如說我拿了 100 萬的一毛錢的一個鈔票,想要到銀行網點去存錢,那麼這時候銀行網點可能就自然而然會有兩種想法,就是這個可能沒辦法,那你既然來了,那我肯定要處理,對吧?你拿的鈔票也都是真實的鈔票,那我也肯定要處理,這是按照整個央行的規定,我是要去進行處理的,那可能我就需要花一個很長的(時間),我可能要派一個專門的一個人去花很長的時間去處理,一毛錢一毛錢的放到驗鈔機裡面去數,然後處理完成之後再把你的錢存到銀行裡面。那這是一種,那我這銀行網點對用戶非常負責。那還有一種銀行網點就會被這種惡意搞亂的客戶搞煩了,就說啊,這種客戶你不要來我的銀行網點了,你要去其他銀行網點吧,我不接受這種太小額鈔票的這個客戶了,你要不去其他的銀行網點,那麼這時候的客戶可能就會有一個想法,就說,誒,你這個銀行網點怎麼不遵循央行的規定啊,怎麼是不接受我這個客戶的存錢的一個規定了?其實這銀行網點可能也會有些冤枉,對吧?就是我並不是說想跟央行對著幹,只不過是我的銀行網點,我實在沒有更多的人力去服務這種小額鈔票的一個客戶了,所以我可能會我頒佈我自己的一些規定,比如說 100 塊錢以下的這種鈔票我就不處理了,可能我只處理 100 塊錢的整票的存取,其他的你要自己去找其他網點,或者你乾脆自己去辦一個銀行網點,自己去處理吧。

Jeffrey Hu 31:37

所以這個其實就類似於,就是就如果我們再帶回到這個例子裡面,如果認為Luke 可能是要硬分叉的話,其實可能會有點冤枉它本來的意思,他也並不是像銀行網點想要去另起一個央行去處理整個的鈔票的查驗真偽,或者是怎麼樣去記賬的規則,他只是覺得這個自己的節點可能不應該花更多資源去處理這種像 BRC 20 或者 Inscription 的交易。

阿劍32:00

Jeffrey 的那個比喻真的非常非常好,非常生動。我稍微補充一點,就是大部分人說他沒有經常關注這些技術資訊的話,他可能不太能分清說什麼是共識規則,什麼是節點願意接受一筆交易進入自己的交易池,並且轉發給其他的節點,就自己的這個跟自己有連接的其他節點的這部分規則,上面的一種規則,我們叫做共識規則,另一種規則我們叫做交易池規則,或者說交易池驗證規則,它們是不同的。

阿劍32:34

為什麼?因為一個共識規則你可以認為它是一個,在一定程度上來說,你可以認為它是一個更寬鬆的東西,為什麼呢?因為說它只是決定說一個區塊,我到底這個區塊是否有效,而每個節點自己定義的這個所謂的這個交易池規則只是決定我要不要接受一筆交易,並且轉發這筆交易,那它可能會使用比共識規則更加嚴格的規則。

阿劍32:56

為什麼呢?因為共識規則當它規定一個區塊的有效性的時候的話,那麼節點可以很自然地就把過濾掉無效交易的這部分工作分相當於你委託一部分工作給礦工。為什麼?因為曠工自己必須保證自己的區塊是有效的,否則當你的區塊,當你的交易被拒絕的話,那麼你是完全得不到任何收益的。

阿劍33:16

所以你可以合理假設他會收集到的都是有效的這個交易,然後因為他已經付出了大量的這個工作量證明,所以我再花一點時間來去驗證它的這個區塊,是一個對我來說是一個完全能夠負擔而且沒有什麼太多壞處的事情。但是如果一筆交易它憑空飛來的,它在網路當中遵循不確定的這個路徑傳播到我這裡的時候,你不知道它是一筆有效的交易還是一筆無效的交易。

阿劍33:43

如果你收到的每一筆交易你都要完完全全的執行驗證的話,其實這個事情本身是非常耗費時間的,要耗費資源的,那麼所以節點的這個做法一定是說我優先確認這一筆交易的某一些驗證起來很簡單的一些特徵,然後由這些特徵來去決定我到底要不要繼續進一步驗證這筆交易,還是說當它已經不符合這個特徵了,我就乾脆我就不驗證了,我就乾脆等看看是不是看礦工還願意打包這筆交易,如果他願意打包了,我再驗證他,對吧?是這樣的一個過程,大部分我們的這個聽眾或者是其他的一些朋友沒有辦法,或者說不太能夠想到這一點,是因為大家原來經常使用的那些網路當中是沒有這一層的,這是一種基本上專屬於UTXO 或者交易輸出,就是用交易輸出的這個形式來表達一筆資金以及它的花費條件的時候,才會有需要去考慮這個問題。

阿劍34:40

為什麼呢?給大家舉個例子,你在以太坊裡面,它的這個所謂的所有的智慧合約都是一種賬戶,包括你自己的擁有的這個用私鑰控制的,但也是一個賬戶,以太坊的這個設計就是說它的所有的核心的目的,就是說所有的這個處理的這個複雜性都要放在合約裡面,由合約這個代碼本身來自己鑑別。

阿劍35:00

什麼交易能處理,什麼交易不能處理?所有的以太榜的這個交易都是由某一個外部賬戶發起,對吧?某一個外部賬戶用某一個它的這個流水號被我們稱為Nonce 值,可能會有一些歧義,但是你把它稱為流水號就對了,因為每一個賬戶它都有這個流水號,後面的這個流水號要後處理,那麼每一個賬戶用一個還沒有使用的這個流水號發起一筆交易,然後當他被這個區塊確認的時候,他在進入確定的這個以太坊的最新的這個狀態當中得到處理,然後給你一個結果,對吧?所以在以太坊的這種模式當中,所有的複雜性全部都被放在智慧合約賬戶裡面,而它的這個節點是儘量不管你的這個交易攜帶的這個指令最後的執行的結果是什麼。

阿劍35:42

也就是說你的每一筆交易,它實際上它只是某一個賬戶發起了一筆交易,然後在交易裡面攜帶一些指令,就是這些指令到底執行起來會產生什麼結果,節點完全不管它,只管你是否付了一定數量的這個交易費。所以對於以太坊這樣的這個網路來說,它的這個節點的交易池規則是實際上是非常簡單的,就相對來說會更簡單,因為它只需要驗證,首先你這個賬戶是不是有足夠多的錢來付你的這個gas fee, 對吧?然後你的這個流水號以之前有沒有被用過,如果是用過,那就是一筆無效的交易。或者說我應該通過一個比較這個 gas fee 這個高低費率的這個高低來選擇一筆在我的這個交易池裡面保存下來。

阿劍36:23

至於他的這個交易的這個裡面的這個附帶的這些資訊,附帶的這些指令是什麼含義?他不管,他完全不管,那所以他的這個節點的這個交易池的這個規則就特別簡單。但是在基於交易的輸出,比如像位元幣這樣UTXO 這樣的這個模式下來說的話,你的交易池的這個驗證就必須更加複雜。

阿劍36:43

為什麼?因為你會擔心比如說他的花費到底是不是一筆有效的花費,那一筆無效的花費是不能進入區塊的,這是位元幣的這個特點,那麼所以的話,你自然而然就產生了一系列要節約它的這個資源的這些我們稱為你可以認為是一種啟發式的方法也好,或者說一些提前早於簽名驗證的一些先行的驗證措施、驗證規則來去盡可能保護這個節點不被DOS 攻擊。

阿劍37:11

給大家再舉一個很有趣的例子是大家不知道有沒有聽說過Nervos Network, Nervos Network 他們的那個交易、資金也是基於交易的輸出的,只不過他們的那種形式叫Cell,對吧?它其實結構上跟 UTXO 很相似,那他們在 Nervos Network 裡面也會產生一些,就是先於礦工去聚合一些網路當中已經廣播出來的一些交易,去給他們先做一些聚合,然後再交由礦工去做一個完整的這個打包,會加入一個中間的這個聚合層,這個聚合層的出現實際上也是因為這個 UTXO 的這個特性,因為 UTXO 這個特性它就意味著很多你的交易本身,它攜帶的這個指令會更明確,而且也會更復雜。

阿劍37:55

那所以在此基礎之上就要產生一些所謂的這個交易池的這個驗證規則,來去幫助這個節點確定自己要不要允許一筆交易進入自己的交易池。因為他進入你的交易池,等於是你要去保存這筆交易,而且你還會轉發他,對吧?它是需要消耗資源的事情,所以大概就是這麼一回事吧。

聯系郵箱:0xniumao@gmail.com