作者 | Micah Zoltu

參與者

以太坊客戶端開發者- 任何維護以太坊客戶端的人。這包括Geth、OpenEthereum、Nethermind開發者以及Besu開發者和維護這些客戶端的Ethereum Classic分叉的開發者(對於ETC分叉的維護者,他們的參與有點特殊,我今天不會在這裡討論這個問題) 。

用戶--使用以太坊進行交易的人。這包括使用dapp的人,發送/接收幣的人等。

用戶委託- 通常情況下,用戶會將自己的決策權委託給第三方。 Infura和中心化交易所是兩個非常常見的委託人。主流的dapp是另一類常見的用戶委託,用戶會去他們最喜歡的dapp所在鏈上。當我們說到用戶做決定的時候,很多時候會委託給其他地方,但最終還是用戶的決定。


流程

每個客戶端都有自己的開發者,他們有自己的動機、願景等。每一個產品的開發者之間都會決定他們想要在客戶端中放入什麼,什麼時候發布客戶端,以及發布更新時客戶端會有什麼功能。

現在不同客戶端對於開發者來說是可選的,但在過去,客戶端開發者表示希望彼此保持兼容,所以他們通常會派一名代表參與交流,試圖與其他客戶端開發者協調。

最終,每個客戶端團隊都會發布他們認為合適的客戶端更新,這些更新(理想情況下)將與其他客戶端兼容,並擁有與其他客戶端一致的分叉塊號。如果客戶端發布兼容的代碼,共享一個fork塊觸發器,那麼客戶端在用戶運行時將能夠相互通信。

一旦客戶端發布,客戶端開發者和/或他們的支持者會向用戶做公告,用戶會選擇是否更新客戶端,或者可能切換客戶端。用戶通常會將這一決定委託給第三方,如Infura或中心化交易所,但最終用戶可以決定他們想要在什麼哪裡進行交易。在委託投票的情況下,如果他們不同意他們的委託人,他們通常可以切換供應商(這對於託管委託來說有點棘手,因為託管人可能會拒絕把你的錢交給託管人不同意的鏈上)。

誰來做決定?

這裡沒有單一的決策者。任何人都可以發布一個客戶端,宣布一個客戶端,分叉一個客戶端(它們都是開源的)等等,用戶可以選擇使用任何他們想要的客戶端。

每個客戶端的核心開發者都有一套他們個人所關心的特殊內容,他們通常會向其他客戶端開發者表達。如果所有的客戶端開發者都同意開發同樣的功能,那麼事情就會很順利,他們會在發佈時間表上進行協調。

如果客戶端開發者沒有就發布什麼功能或何時發布達成一致,那麼他們中的一些人可能會開發、宣布並推出不同的功能集。我們之前在ETH/ETC的分叉中就看到了這種情況,並不是所有的客戶端開發者都同意如何進行,所以我們最終得到了兩條不同的鏈,由不同的群體來維護。

如何處理分歧?

沒有一個核心開發人員認為這是一個好主意,他們都決定不把它集成到他們維護的客戶端中。一些核心開發人員認為這是一個好主意,但不願意分叉,而另一些人認為這是一個壞主意,願意分叉。有些核心開發人員認為這是個好主意,願意分叉,而有些人認為這是個壞主意,不願意分叉。一些核心開發人員認為這是一個好主意,願意分叉,而另一些人認為這是不好的,願意分叉。所有核心開發人員都認為這是一個好主意。

在1和5的情況下,事情進展非常順利。

在2和3的情況下,通常會進行討論,試圖通過了解人們產生分歧的根本原因來達成共識,如果可能的話,試圖為這些問題找到一個可行的解決方案,但如果不能達成"粗略的共識" ,那麼信念更堅定的一方可能會獲勝。

在4的情況下,我們有一個類似ETH/ETC的分叉。

用戶如何參與其中?

作為以太坊的用戶,您可以選擇是否運行一個給定的客戶端,這意味著如果您認為改變不好,您可以選擇乾脆不升級。事實上你也鼓勵您嘗試說服其他人(在適當的場合)和您一起運行不同的客戶端,如果您認為這樣做是最好的。

如果你有技術頭腦,你也可以通過向核心開發人員提出新的技術想法來參與(例如,通過https://ethresear.ch)。你也可以通過加入現有的團隊、維護自己的fork或者從頭開始構建一個新的客戶端來參與客戶端的開發。

開發者如何決定要寫什麼代碼?

每個以太坊客戶端開發者都有自己的動機,有些是眾所周知的,有些是保密的。這些動機有些是經濟上的(例如,他們被別人讚助,而別人也有自己的動機),有些動機是利他的(例如,他們想建立一個更抗審查的未來)。

然而,由於上文提到的"用戶決定運行什麼"的特點,核心開發者通常會構建他們認為用戶現在和未來會想要運行的軟件。大多數以太坊客戶端開發者對編寫沒有人使用的軟件不感興趣,所以最終他們通常以他們認為用戶想要的東西,或者對用戶有利的東西為指導。