稍作思考,區塊鏈只是一個大型的單一資料庫,沒有任何人擁有,但任何人都可以寫入,寫入的內容無法刪除。如果你想對該資料庫進行寫入,你需要在你的電腦上擁有一份該資料庫的副本。所以,你終於意識到成為以太坊驗證者是一個多麼好的投資,並決定試一試,看看能賺多少。首先恭喜你!這是一個巨大的挑戰,我代表以太坊社群感謝你(不管你出於什麼原因成為驗證者——賺取區塊獎勵、讓以太坊更去中心化等等),感謝你的勇敢行動。在同樣的去中心化精神下,我們將探討如何成為一個單獨的驗證者,或稱為在以太坊上進行單獨質押(solo staking)。我們不會討論液態質押、服務質押等其他方式。我是說,既然你已決定成為驗證者,為何不以密碼朋克的方式來做呢?先來熟悉一些詞彙:以太坊自2022年9月15日“合併”後,已轉變為一個證明持股(Proof of Stake, PoS)區塊鏈。這代表以太坊達成共識的方式已完全改變。記得我們說過區塊鏈只是一個大型的**單一**資料庫,運行在多台電腦上,而該資料庫的狀態必須被網路中的所有電腦隨時掌握。參與網路的電腦(節點)必須就資料庫的當前狀態達成共識!以太坊節點不再需要像PoW那樣解決複雜的數學問題來達成共識,而是,提前鎖定以太幣(ether),基本上就是說:*“嘿,我願意成為一個驗證者,負責新增區塊和驗證交易,如果我在執行這個任務時行為不端,你可以沒收我提前存入的以太幣(我的質押)作為懲罰。如果我表現良好,你就獎勵我新產生的以太幣!”* 當超過三分之二的驗證者就上述資料庫的當前狀態達成共識時,該區塊鏈的狀態就被視為最終確定。為什麼是三分之二的驗證者?想像一下,如果我們要等待網路中所有驗證者(目前約有1,031,682個)都同意區塊鏈的狀態?那區塊鏈的最終確認速度會非常慢,幾乎無法使用。區塊鏈的最終速度取決於最慢的節點,考慮到以太坊最大程度的去中心化(也就是可以在普通消費者硬體上運行,速度比企業級超快電腦慢),我們必須考慮最慢的節點。所以,等待三分之二的驗證者似乎是一個合理的數字,不是嗎?😂😂😂以太坊的安全模型可以總結為:*“人類是理性的生物,想賺錢,會做出理性的決策來實現這些利益。因此,他們不會行為不端,因為如果行為不端,他們提前鎖定的以太幣(質押)就會被削減!”*用資本主義來達成安全,對吧?首先,什麼是以太坊節點?以太坊節點就是運行以太坊軟體(稱為以太坊客戶端)的電腦。就這樣,真的就這麼簡單。沒有花俏的詞彙,沒有其他。就是這樣!這就是以太坊節點。這些節點構成了以太坊區塊鏈——一群運行類似軟體、能彼此通訊的電腦。任何人都可以運行以太坊節點,但自己運行並沒有**經濟利益**。不要誤會,運行節點確實有好處(不要跟驗證者搞混)比如:1. 不需要信任任何其他節點,因為你可以自己驗證所有交易資料——真正的密碼朋克精神:“不信任,驗證!”2. 你可以更安全、更私密地使用去中心化應用(dApps),因為你不必將錢包地址和餘額洩漏給中介的可疑節點。3. 你可以將你的以太坊錢包直接連接到你自己運行的以太坊節點的RPC端點。這樣你就擁有唯一的存取權和優先權,能比其他人更快地將交易納入區塊,而不用在公共RPC端點上競爭。4. 你可以強制執行共識規則,避免被騙接受不符合規則的區塊——在極端情況下,所有節點可能串通,這時可以由節點進行社會恢復,選擇遵循誠實鏈。5. 網路中節點越多,越多元且堅韌,讓整個網路更難失效或被審查交易。6. 完整節點提供區塊鏈資料給輕量級客戶端(如Light Client),幫助用戶安全且去中心化地存取和互動,無需同步整個區塊鏈,擴展了應用範圍。透過產生專用的‘魔法’簽名金鑰並將32 ETH質押到一個智能合約中,連結到這個金鑰,你就可以將你的以太坊節點轉變為驗證者。驗證者是“啟動”的節點,負責處理用戶交易並將其定案(即最終確認)。每筆交易的有效性都由所有驗證者(簽署證明)投票,並由他們質押的ETH作為保證。由於驗證者處理並證明用戶交易,他們會因表現良好而獲得獎勵,行為不端則受到懲罰。如果驗證者被發現不誠實、惡意或嚴重疏忽,他們的質押將被削減甚至全部沒收,並從網路中驅逐。這激勵驗證者保持誠實。那麼,如何在以太坊上進行單獨質押(solo staking)呢?你需要質押32 ETH,才能成為以太坊的驗證者。32 ETH在撰寫時約等於Ksh. 13,998,370.65(1 ETH = Ksh. 437,449.08),你現在讀到的時候1 ETH是多少呢?他們是怎麼得出32 ETH的要求的?這已經內建在運行在客戶端軟體中的程式碼裡,參與以太坊區塊鏈。接著,你需要運行特定的客戶端軟體來成為驗證者。以下是一些範例:1. Prysm (https://prysmaticlabs.com/))2. Lighthouse (https://lighthouse-book.sigmaprime.io/))3. Teku (https://consensys.io/teku))4. Nimbus (https://nimbus.team/))5. Lodestar (https://lodestar.chainsafe.io/))這些軟體合稱為共識層軟體,因為它們負責在以太坊上達成共識——決定區塊鏈的狀態。既然你知道要運行哪個客戶端軟體,並且擁有32 ETH,你就可以開始賺取豐厚的區塊獎勵了,是吧?嗯,沒錯,但正如往常一樣,細節很重要。讓我們看看這個過程如何變得非常複雜。### **單獨質押(Solo Staking)**單獨質押意味著你自己完整運行節點,並且自己獲得所有區塊獎勵,不與他人分享。最低硬體需求如下:1. CPU:四核心2. 記憶體:32GB3. 儲存:2TB NVME SSD,讀取IOPS >500,寫入IOPS >1700,非QLC(建議4TB NVME SSD,>5000讀取IOPS,>1700寫入IOPS,非QLC以免壓力過大)4. 網路需求(請向你的ISP確認): 1. 流量:不限或每月至少2TB 2. 速度:至少500mb/s共享——驗證者節點需要至少10mb/s專用網路速度 3. IP地址:若可能,請用靜態IP5. 電源:不間斷電源供應(UPS)硬體需求一開始看起來很嚇人,但你有看過Solana的硬體需求嗎?記得我們之前的思考:*“區塊鏈只是一個大型的單一資料庫,沒有人擁有,但任何人都可以寫入,寫入的內容無法刪除。你若想寫入,必須在你的電腦上擁有一份副本。”*好啦,讓我們來看看每個硬體元件如何影響性能。| 元件 | 對性能的影響 || --- | --- || CPU | – 影響區塊執行速度(4秒限制)<br>– 如果太慢,會錯過證明(attestations)和區塊提案 || RAM | – 當記憶體用完,服務會突然關閉或重啟,導致資料遺失。可能造成資料庫損壞,最壞情況下需重新同步驗證者節點,期間遺失2-3天的證明<br>– 隨著以太坊網路活動增加(如地址、智能合約、交易),對記憶體的需求也會增加,以維持鏈狀態並傳播交易 || 儲存 | – 讀寫速度(IOPS)是區塊執行的主要瓶頸 || 網路 | – 影響接收/傳送區塊的延遲,進而影響整體執行速度(4秒限制)<br>– 靜態IP能提升被其他節點發現的機率,避免低對等節點數問題<br>– 某些ISP可能阻止端口轉發(遠端存取),若沒有靜態IP則可能有問題 || 電源 | – 突發停電(如雷擊、電力中斷)會導致節點非正常關閉,資料遺失,可能造成資料庫損壞,甚至需重新同步,期間遺失證明2-3天 |記得我們說過,你需要運行一個共識層客戶端(如Lighthouse),你還需要運行一個執行層客戶端。什麼是執行層客戶端?我很高興你問了…在以太坊中,執行層客戶端是執行智能合約和交易的軟體。這是你喜愛的dApps(如Aave、Uniswap)以及你期待它們“月亮”的那個合約的運行場所。這個執行層就是以太坊虛擬機(EVM)。執行層客戶端的例子包括:* geth* reth* nethermind* besu* erigon**備註**:為了提升以太坊的韌性,建議使用少數的執行層客戶端。如果發生黑天鵝事件,比如市場佔有率約55%的geth出現重大漏洞,這會影響整個以太坊嗎? 區塊驗證流程如下:1. 在EVM上執行智能合約。這由運行執行層客戶端(如reth)來完成。2. 這個執行會改變區塊鏈的狀態。3. 這些變更必須傳播到整個鏈——記得我們的**一個**大型資料庫——以達成共識,所有節點都要同意此時的鏈狀態。這意味著執行層必須與共識層溝通。舉例來說,設置reth(執行層客戶端)與Lighthouse(共識層客戶端):以下步驟假設你已經熟悉Linux環境,包括在終端輸入命令(即使你只是從StackOverflow複製,沒完全理解它的作用,但沒關係,它能用)。ls -al | grep | xxd | echo -n你沒理解我剛剛輸入的內容?如果ls -al | grep | xxd | echo -n看起來像是中文,那是時候翻翻書、複習你的Linux命令了。不用像我一樣成為大師(我用Arch BTW),但至少要會分辨cd和rm -rf /!我們將在一台安裝Ubuntu的機器上操作。首先,我們需要建立一個JSON Web Token(JWT),讓執行層軟體(reth)與共識層軟體(Lighthouse)能相互溝通。逐行執行以下命令,建立名為jwtsecret的資料夾,並在其中產生jwt.hex檔案:> sudo mkdir -p /var/lib/jwtsecret> openssl rand -hex 32 | sudo tee /var/lib/jwtsecret/jwt.hex > /dev/null稍後,我們會將這個JWT檔案(jwt.hex)設定到執行層與共識層的配置檔中。下載reth並設定服務下載最新版本的reth(https://github.com/paradigmxyz/reth/releases))及其數位簽章檔(.asc)來驗證完整性。> curl -LO https://github.com/paradigmxyz/reth/releases/download/v1.0.0/reth-v1.0.0-aarch64-unknown-linux-gnu.tar.gz> curl -LO https://github.com/paradigmxyz/reth/releases/download/v1.0.0/reth-v1.0.0-aarch64-unknown-linux-gnu.tar.gz.asc進行簽章驗證:> gpg --keyserver keyserver.ubuntu.com --recv-keys 50FB7CC55B2E8AFA59FE03B7AA5ED56A7FBF253E> gpg --verify reth-v0.1.0-alpha.23-x86_64-unknown-linux-gnu.tar.gz.asc reth-v0.1.0-alpha.23-x86_64-unknown-linux-gnu.tar.gz預期輸出:驗證簽章成功的訊息。(範例)gpg: Signature made Mon 24 Jun 2024 01:33:15 PM EATgpg: using EDDSA key 50FB7CC55B2E8AFA59FE03B7AA5ED56A7FBF253Egpg: Good signature from “Georgios Konstantopoulos (Reth signing key for 2024 and on) <[email protected]>” [unknown]gpg: WARNING: This key is not certified with a trusted signature!gpg: There is no indication that the signature belongs to the owner.指紋:50FB 7CC5 5B2E 8AFA 59FE 03B7 AA5E D56A 7FBF 253E驗證發行簽章金鑰(–recv-keys)請參考(https://reth.rs/installation/binaries.html#signature-verification))若驗證成功,解壓縮檔案並移動到/usr/local/bin:> tar xvf reth-v1.0.0-aarch64-unknown-linux-gnu.tar.gz> sudo cp reth /usr/local/bin刪除暫存檔:> rm -r reth reth-v1.0.0-aarch64-unknown-linux-gnu.tar.gz.asc reth-v1.0.0-aarch64-unknown-linux-gnu.tar.gz建立reth用戶(無伺服器存取權限)來運行背景服務,限制潛在攻擊面:> sudo useradd --no-create-home --shell /bin/false reth建立資料夾存放區塊鏈資料,並設定擁有權:> sudo mkdir -p /var/lib/reth> sudo chown -R reth:reth /var/lib/reth建立systemd服務檔,讓reth在背景運行:> sudo vi /etc/systemd/system/reth.service貼入以下內容:[Unit]Description=Reth Execution Client (Holesky)After=network.targetWants=network.target[Service]User=rethGroup=rethType=simpleRestart=alwaysRestartSec=5ExecStart=/usr/local/bin/reth node \ --chain holesky \ --datadir=/var/lib/reth \ --log.file.directory=/var/lib/reth/logs \ --authrpc.jwtsecret=/var/lib/jwtsecret/jwt.hex \ --full \ --port 30304 \ --http \ --http.api eth,web3,net,txpool,debug,trace \ --http.addr <內部IP> \ --http.port 8547 \ --ws \ --ws.addr <內部IP> \ --ws.port 8548 \ --metrics 127.0.0.1:6060[Install]WantedBy=default.target儲存並退出(ESC → ENTER → :wq → ENTER),檢查設定並修正。reth設定摘要:1. --chain:運行在Holesky測試網2. --datadir:存放區塊鏈資料的資料夾3. --log.file.directory:日誌存放路徑4. --authrpc.jwtsecret:指向之前產生的jwt.hex5. --full:運行完整節點6. --port:P2P通訊端口(預設30303)7. --http:啟用HTTP-RPC8. --http.api:RPC模組9. --http.addr:內部IP(例如192.168.x.x)10. --http.port:HTTP端口(預設8545)11. --ws:啟用WebSocket12. --ws.addr:WebSocket地址13. --ws.port:WebSocket端口14. --metrics:啟用監控啟動reth:> sudo systemctl daemon-reload> sudo systemctl start reth.service> sudo systemctl status reth.service預期輸出:顯示“active (running)”。按CTRL+C退出,reth會持續運行。同步約需6小時。查看同步日誌:> sudo apt install ccze -y> sudo journalctl -fu reth -o cat | ccze -A預期輸出:監控日誌。若運行順利,設定自動啟動:> sudo systemctl enable reth.service預期輸出:建立符號連結。參考文件:https://reth.rs/設定共識層客戶端步驟與設定類似前述,下載Lighthouse(https://github.com/sigp/lighthouse/releases))並驗證完整性。> curl -LO https://github.com/sigp/lighthouse/releases/download/v5.2.1/lighthouse-v5.2.1-x86_64-unknown-linux-gnu.tar.gz> curl -LO https://github.com/sigp/lighthouse/releases/download/v5.2.1/lighthouse-v5.2.1-x86_64-unknown-linux-gnu.tar.gz.asc驗證簽章:> gpg --keyserver keyserver.ubuntu.com --recv-keys 15E66D941F697E28F49381F426416DC3F30674B0> gpg --verify lighthouse-v5.1.3-x86_64-unknown-linux-gnu.tar.gz.asc lighthouse-v5.1.3-x86_64-unknown-linux-gnu.tar.gz範例輸出:驗證成功。解壓並移動:> tar xvf lighthouse-v5.1.3-x86_64-unknown-linux-gnu.tar.gz> sudo cp lighthouse /usr/local/bin刪除暫存:> rm -r lighthouse*建立Lighthouse用戶(無伺服器存取權限):> sudo useradd --no-create-home --shell /bin/false lighthousebeacon建立資料夾並設定擁有權:> sudo mkdir -p /var/lib/lighthouse_beacon> sudo chown -R lighthousebeacon:lighthousebeacon /var/lib/lighthouse_beacon> sudo chmod 700 /var/lib/lighthouse_beacon建立systemd服務檔:> sudo vi /etc/systemd/system/lighthousebeacon.service貼入內容:[Unit]Description=Lighthouse Beacon Node (Holesky)Wants=network-online.targetAfter=network-online.target[Service]User=lighthousebeaconGroup=lighthousebeaconType=simpleRestart=alwaysRestartSec=5ExecStart=/usr/local/bin/lighthouse bn \ --network holesky \ --datadir /var/lib/lighthouse_beacon \ --execution-endpoint http://127.0.0.1:8551 \ --execution-jwt /var/lib/jwtsecret/jwt.hex \ --checkpoint-sync-url=https://holesky.beaconstate.ethstaker.cc/ \ --metrics \ --metrics-port 8009 \ --validator-monitor-auto \ --port 9001 \ --http \ --http-port 5051 \ --http-address <內部IP> \ --builder http://127.0.0.1[Install]WantedBy=multi-user.target儲存退出(ESC → ENTER → :wq → ENTER),檢查並修正。設定摘要:1. --network:測試網2. --datadir:資料存放路徑3. --execution-endpoint:執行層端點4. --execution-jwt:JWT檔案路徑5. --checkpoint-sync-url:快速同步URL6. --metrics:監控7. --metrics-port:監控端口8. --validator-monitor-auto:驗證者監控9. --port:P2P端口(預設9000)10. --http:HTTP連接11. --http-port:HTTP端口12. --http-address:內部IP13. --builder:外部建構者URL啟動Lighthouse:> sudo systemctl daemon-reload> sudo systemctl start lighthousebeacon.service> sudo systemctl status lighthousebeacon.service預期:顯示“active (running)”。按CTRL+C退出,Lighthouse會持續同步。同步時間約數分鐘。查看同步日誌:> sudo journalctl -fu lighthousebeacon -o cat | ccze -A若運行順利,設定自動啟動:> sudo systemctl enable lighthousebeacon.service驗證初始根(checkpoint):1. 在瀏覽器中打開https://holesky.beaconcha.in/,查詢slot號碼。2. 比對Block Root與State Root與journalctl輸出。3. journalctl輸出。詳細說明請參考(https://lighthouse-book.sigmaprime.io/intro.html))。**驗證者金鑰產生**驗證者金鑰是用於在以太坊上進行簽名和驗證的加密金鑰。主要有兩種:1. 驗證者簽名金鑰(Validator Key / Signing Key): * 用於簽署證明(attestations)和提案區塊。 * 確保驗證者能證明自己的行為,維持驗證完整性。 * 為熱金鑰,需線上運作。2. 提款金鑰(Withdrawal Key): * 用於管理和提取質押資金。 * 當你想提取已質押的ETH和獎勵時,用此金鑰。 * 為冷金鑰,建議離線存放以增強安全。如何產生這兩個金鑰?我很高興你問了,我們將用密碼朋克的方式來產生。請做好準備…建議用空隔機(air-gapped machine),即從未接觸過公共網路的電腦!可以用便宜的Raspberry Pi(不到100美元)來做。如果沒有Raspberry Pi或新電腦,也可以下載一個全新的作業系統,我推薦Tail OS。用USB啟動Tail OS,產生驗證者金鑰,將金鑰複製到USB,然後離開。不論用哪種方式,務必在安全環境(家裡或辦公室)且連接可信WiFi網路下操作。也要實體遮擋所有攝像頭(手機、Webcam、筆電攝像頭),在產生金鑰前關閉所有網路(Ethernet、WiFi、藍牙)。這是非常嚴格的隱私保護措施,對吧?你甚至不會用這種方式保護你的錢包種子短語(seed phrase)!我說真的,除非你在生成金鑰時採取這些措施,否則一旦金鑰被盜或遺失,後果不堪設想。為安全起見,我們將示範如何在USB隨身碟上的Live OS(Tail OS)中操作。為什麼選Tail OS?因為Edward Snowden都推薦它!你不知道他是誰嗎?快去查。下載最新版本的以太坊驗證者存款金鑰生成二進位檔(https://github.com/ethereum/staking-deposit-cli/releases)),並驗證其完整性。> curl -LO https://github.com/ethereum/staking-deposit-cli/releases/download/v2.7.0/staking_deposit-cli-fdab65d-linux-amd64.tar.gz> echo “ac3151843d681c92ae75567a88fbe0e040d53c21368cc1ed1a8c3d9fb29f2a3a staking_deposit-cli-fdab65d-linux-amd64.tar.gz | sha256sum --check”預期輸出:OK。驗證完成後,解壓縮並進入資料夾:> tar xvf staking_deposit-cli-fdab65d-linux-amd64.tar.gz> cd staking_deposit-cli-fdab65d-linux-amd64### **產生驗證者簽名金鑰****在進行下一步前,請務必:*** **關閉你的Ethernet、WiFi和藍牙*** **實體遮擋所有攝像頭(手機、Webcam、筆電攝像頭)**我不能再強調了,務必保護你的金鑰!像HODL比特幣一樣緊握它們!執行以下命令來產生金鑰,將<數量>替換成你要設定的驗證者數量,<你的提款地址>替換成你的實際提款地址:> ./deposit new-mnemonic --num_validators <數量> --chain holesky --eth1_withdrawal_address <你的提款地址><你的提款地址>請用你自己擁有的安全非托管錢包地址(如冷錢包、多簽地址),不要用交易所錢包!用非托管錢包!系統會提示你輸入以下資訊,請根據自己情況選擇:1. 選擇語言(本次會話)2. 確認你的提款地址(你的提款地址)3. 選擇助記詞語言(種子短語)4. 設定密碼來加密驗證者簽名金鑰5. 確認密碼預期輸出:系統會產生助記詞,請抄寫在紙上,**切勿存於線上或任何連網設備上**。系統會提示你輸入助記詞,請按順序輸入,驗證你有正確記錄。如果正確輸入,你會看到一個犀牛的ASCII藝術!會產生兩個檔案:1. keystore-m_<timestamp>.json:驗證者簽名金鑰,用來簽署證明。務必妥善保管。2. deposit_data-<timestamp>.json:連結你的ETH存款與驗證者的檔案,只用一次(存款時用)。將兩個檔案存到USB隨身碟中,整個staking-deposit-cli資料夾都複製過去。完成後刪除原始資料夾:> sudo rm -r $HOME/staking-deposit-cli/validator_keys重啟你的主機(如筆電),拔除USB隨身碟,因為不會有持久存儲。### **將驗證者金鑰加入節點**將USB插入你的驗證者節點,找到金鑰檔案名稱:> lsblk預期輸出:找到你的USB裝置(如sda),名稱類似。掛載USB到/media:> sudo mount /dev/sda1 /media(請將sda1換成你的裝置名稱)進入USB資料夾,複製金鑰到你的節點HOME:> cd /media/staking-deposit-cli> sudo cp -r validator_keys ~卸載USB:> cd> sudo umount /media建立密碼檔(用來解密金鑰):先列出金鑰檔名:> ls複製金鑰檔名,建立密碼檔:> sudo vi <金鑰檔名>.txt輸入你之前設定的密碼,存檔退出。### **存入32 ETH,成為驗證者**這是最重要的步驟:將32 ETH送到驗證合約。不要直接轉帳到合約地址(0x0000...),而是一定要透過官方的Ethereum Launchpad(http://launchpad.ethereum.org/))完成。若直接轉帳,交易會失敗!務必多次確認合約地址正確(包括Ethereum Foundation、EthHub、EtherScan等多個來源),確保地址是0x0000...。由於我們用的是測試網(holesky),因此用測試網的Launchpad(https://holesky.launchpad.ethstaker.cc/))。如何取得測試網ETH?1. 先到https://holesky-faucet.pk910.de/,試著領取完整的32個測試ETH。 * 成功則跳過 * 不成功就領取能領的數量,繼續操作2. 加入Discord伺服器:https://discord.gg/ethstaker3. 加入#cheap-holesky-validator頻道4. 在文字框輸入:/cheap-holesky-deposit <你的ETH地址>,送出5. 點擊產生的連結(如Signer.is)用Metamask簽署訊息,複製連結網址,貼到簽署框。### **檢查必要的免責聲明**打開https://holesky.launchpad.ethstaker.cc/,點“Become a validator”。仔細閱讀所有免責聲明。不要只點“接受條款”而沒看內容,要理解。一直點到“上傳存款資料”部分。不要擔心“選擇客戶端”和“產生金鑰”部分,因為你已經跟著本指南操作過了。### **進行存款**將之前產生的deposit_data-<timestamp>.json檔案上傳到指定區域,點擊直到看到下一頁。在此頁面,你必須勾選所有免責聲明框,才能繼續。**在此之前**,請點擊“Learn here how to do it safely”來確認你沒有被釣魚。你會看到一個頁面,顯示以太坊Beacon存款合約地址。確認該地址與你的錢包顯示一致後,才點“Send Deposit”。確認無誤後,點擊“Send Deposit”並依照Metamask或其他錢包的指示操作。交易成功後,你可以點擊黃色標記的外部連結,追蹤驗證者的啟動進度與表現。建議收藏這些連結。別擔心,若一開始沒顯示出來,給它點時間更新🙂。恭喜!你已成為以太坊去中心化的一份子,超酷的吧!### **退出驗證者**在驗證者的生命週期中,某個時候你可能想退出,並取回你的資金(32 ETH)和獎勵(如果有的話),前提是你有設定提款地址——如果你跟著本指南走,應該都已經有了。如果你想自願退出(我不太懂為何要這樣做,難道區塊獎勵不夠嗎?想轉去Solana?),以下是步驟(以Lighthouse為例):驗證者可以提交自願退出訊息,停止提案和證明。前提:驗證者必須是活躍狀態、未被削減、已激活至少256個epoch(約27小時)。**注意**:提交退出後,仍需執行職責直到正式退出,以免受罰。退出流程約需5個epoch(約32分鐘),實際時間視排隊情況而定。### **啟動自願退出**用lighthouse的命令:* --keystore:指定驗證者金鑰路徑(json檔)* --beacon-node:指定Beacon節點端點(預設http://localhost:5052)* --network:網路(預設mainnet)* --password-file:密碼檔路徑(若未提供,系統會提示)輸入密碼後,系統會要求你輸入退出短語(exit phrase)作最後確認。範例(在holesky測試網):> lighthouse --network holesky account validator exit --keystore /path/to/keystore --beacon-node http://localhost:5052系統會提示你輸入退出短語,確認後提交。退出成功後,驗證會進入待確認狀態,可能需數分鐘。目前epoch:29946,退出epoch:29951,可提取時間約1920秒。### **全額提取資金**2023年4月12日的Capella升級後,若驗證者有設定正確的提款憑證(0x01),退出時會將全部資金(包括獎勵)轉到提款地址。詳情請參考Ethereum.org。不同客戶端的退出流程略有不同,以下列出:Prsym (https://docs.prylabs.network/docs/wallet/exiting-a-validator))Nimbus (https://nimbus.guide/voluntary-exit.html))Lodestar (https://chainsafe.github.io/lodestar/run/validator-management/validator-cli#validator-voluntary-exit))Teku (https://docs.teku.consensys.net/HowTo/Voluntary-Exit))此篇文章包含測試網與主網的連結與流程,為何?因為我手上沒有32 ETH,請根據你要成為驗證者的鏈(測試或主網)調整。這篇文章長到令人咋舌!你已閱讀6,309字,約40,289字符,完整展現了單獨質押的流程。希望你一開始的期待都已被滿足,現在可以成功設置自己的驗證者。我們在鏈的另一端,討論EigenLayer是否為Ethereum結算的未來,同時嘲笑Solana總是離線,還有Cardano的學術論文(那是另一個故事了!)
開發者觀點 | 如何成為獨立的以太坊驗證者
稍作思考,
區塊鏈只是一個大型的單一資料庫,沒有任何人擁有,但任何人都可以寫入,寫入的內容無法刪除。如果你想對該資料庫進行寫入,你需要在你的電腦上擁有一份該資料庫的副本。
所以,你終於意識到成為以太坊驗證者是一個多麼好的投資,並決定試一試,看看能賺多少。
首先恭喜你!這是一個巨大的挑戰,我代表以太坊社群感謝你(不管你出於什麼原因成為驗證者——賺取區塊獎勵、讓以太坊更去中心化等等),感謝你的勇敢行動。
在同樣的去中心化精神下,我們將探討如何成為一個單獨的驗證者,或稱為在以太坊上進行單獨質押(solo staking)。
我們不會討論液態質押、服務質押等其他方式。我是說,既然你已決定成為驗證者,為何不以密碼朋克的方式來做呢?
先來熟悉一些詞彙:
以太坊自2022年9月15日“合併”後,已轉變為一個證明持股(Proof of Stake, PoS)區塊鏈。
這代表以太坊達成共識的方式已完全改變。
記得我們說過區塊鏈只是一個大型的單一資料庫,運行在多台電腦上,而該資料庫的狀態必須被網路中的所有電腦隨時掌握。參與網路的電腦(節點)必須就資料庫的當前狀態達成共識!
以太坊節點不再需要像PoW那樣解決複雜的數學問題來達成共識,而是,提前鎖定以太幣(ether),基本上就是說:
“嘿,我願意成為一個驗證者,負責新增區塊和驗證交易,如果我在執行這個任務時行為不端,你可以沒收我提前存入的以太幣(我的質押)作為懲罰。如果我表現良好,你就獎勵我新產生的以太幣!”
當超過三分之二的驗證者就上述資料庫的當前狀態達成共識時,該區塊鏈的狀態就被視為最終確定。
為什麼是三分之二的驗證者?
想像一下,如果我們要等待網路中所有驗證者(目前約有1,031,682個)都同意區塊鏈的狀態?那區塊鏈的最終確認速度會非常慢,幾乎無法使用。區塊鏈的最終速度取決於最慢的節點,考慮到以太坊最大程度的去中心化(也就是可以在普通消費者硬體上運行,速度比企業級超快電腦慢),我們必須考慮最慢的節點。所以,等待三分之二的驗證者似乎是一個合理的數字,不是嗎?😂😂😂
以太坊的安全模型可以總結為:“人類是理性的生物,想賺錢,會做出理性的決策來實現這些利益。因此,他們不會行為不端,因為如果行為不端,他們提前鎖定的以太幣(質押)就會被削減!”
用資本主義來達成安全,對吧?
首先,什麼是以太坊節點?
以太坊節點就是運行以太坊軟體(稱為以太坊客戶端)的電腦。就這樣,真的就這麼簡單。沒有花俏的詞彙,沒有其他。就是這樣!這就是以太坊節點。
這些節點構成了以太坊區塊鏈——一群運行類似軟體、能彼此通訊的電腦。
任何人都可以運行以太坊節點,但自己運行並沒有經濟利益。不要誤會,運行節點確實有好處(不要跟驗證者搞混)比如:
透過產生專用的‘魔法’簽名金鑰並將32 ETH質押到一個智能合約中,連結到這個金鑰,你就可以將你的以太坊節點轉變為驗證者。
驗證者是“啟動”的節點,負責處理用戶交易並將其定案(即最終確認)。
每筆交易的有效性都由所有驗證者(簽署證明)投票,並由他們質押的ETH作為保證。
由於驗證者處理並證明用戶交易,他們會因表現良好而獲得獎勵,行為不端則受到懲罰。如果驗證者被發現不誠實、惡意或嚴重疏忽,他們的質押將被削減甚至全部沒收,並從網路中驅逐。
這激勵驗證者保持誠實。
那麼,如何在以太坊上進行單獨質押(solo staking)呢?
你需要質押32 ETH,才能成為以太坊的驗證者。32 ETH在撰寫時約等於Ksh. 13,998,370.65(1 ETH = Ksh. 437,449.08),你現在讀到的時候1 ETH是多少呢?
他們是怎麼得出32 ETH的要求的?這已經內建在運行在客戶端軟體中的程式碼裡,參與以太坊區塊鏈。
接著,你需要運行特定的客戶端軟體來成為驗證者。以下是一些範例:
這些軟體合稱為共識層軟體,因為它們負責在以太坊上達成共識——決定區塊鏈的狀態。
既然你知道要運行哪個客戶端軟體,並且擁有32 ETH,你就可以開始賺取豐厚的區塊獎勵了,是吧?嗯,沒錯,但正如往常一樣,細節很重要。讓我們看看這個過程如何變得非常複雜。
單獨質押(Solo Staking)
單獨質押意味著你自己完整運行節點,並且自己獲得所有區塊獎勵,不與他人分享。
最低硬體需求如下:
硬體需求一開始看起來很嚇人,但你有看過Solana的硬體需求嗎?
記得我們之前的思考:
“區塊鏈只是一個大型的單一資料庫,沒有人擁有,但任何人都可以寫入,寫入的內容無法刪除。你若想寫入,必須在你的電腦上擁有一份副本。”
好啦,讓我們來看看每個硬體元件如何影響性能。
– 如果太慢,會錯過證明(attestations)和區塊提案
– 隨著以太坊網路活動增加(如地址、智能合約、交易),對記憶體的需求也會增加,以維持鏈狀態並傳播交易
– 靜態IP能提升被其他節點發現的機率,避免低對等節點數問題
– 某些ISP可能阻止端口轉發(遠端存取),若沒有靜態IP則可能有問題
記得我們說過,你需要運行一個共識層客戶端(如Lighthouse),你還需要運行一個執行層客戶端。
什麼是執行層客戶端?我很高興你問了…
在以太坊中,執行層客戶端是執行智能合約和交易的軟體。這是你喜愛的dApps(如Aave、Uniswap)以及你期待它們“月亮”的那個合約的運行場所。這個執行層就是以太坊虛擬機(EVM)。
執行層客戶端的例子包括:
備註:為了提升以太坊的韌性,建議使用少數的執行層客戶端。如果發生黑天鵝事件,比如市場佔有率約55%的geth出現重大漏洞,這會影響整個以太坊嗎?
區塊驗證流程如下:
舉例來說,設置reth(執行層客戶端)與Lighthouse(共識層客戶端):
以下步驟假設你已經熟悉Linux環境,包括在終端輸入命令(即使你只是從StackOverflow複製,沒完全理解它的作用,但沒關係,它能用)。
ls -al | grep | xxd | echo -n
你沒理解我剛剛輸入的內容?
如果ls -al | grep | xxd | echo -n看起來像是中文,那是時候翻翻書、複習你的Linux命令了。不用像我一樣成為大師(我用Arch BTW),但至少要會分辨cd和rm -rf /!
我們將在一台安裝Ubuntu的機器上操作。
首先,我們需要建立一個JSON Web Token(JWT),讓執行層軟體(reth)與共識層軟體(Lighthouse)能相互溝通。
逐行執行以下命令,建立名為jwtsecret的資料夾,並在其中產生jwt.hex檔案:
稍後,我們會將這個JWT檔案(jwt.hex)設定到執行層與共識層的配置檔中。
下載reth並設定服務
下載最新版本的reth(https://github.com/paradigmxyz/reth/releases))及其數位簽章檔(.asc)來驗證完整性。
進行簽章驗證:
預期輸出:驗證簽章成功的訊息。
(範例)
gpg: Signature made Mon 24 Jun 2024 01:33:15 PM EAT
gpg: using EDDSA key 50FB7CC55B2E8AFA59FE03B7AA5ED56A7FBF253E
gpg: Good signature from “Georgios Konstantopoulos (Reth signing key for 2024 and on) <[email protected]>” [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
指紋:50FB 7CC5 5B2E 8AFA 59FE 03B7 AA5E D56A 7FBF 253E
驗證發行簽章金鑰(–recv-keys)請參考(https://reth.rs/installation/binaries.html#signature-verification))
若驗證成功,解壓縮檔案並移動到/usr/local/bin:
刪除暫存檔:
建立reth用戶(無伺服器存取權限)來運行背景服務,限制潛在攻擊面:
建立資料夾存放區塊鏈資料,並設定擁有權:
建立systemd服務檔,讓reth在背景運行:
貼入以下內容:
[Unit]
Description=Reth Execution Client (Holesky)
After=network.target
Wants=network.target
[Service]
User=reth
Group=reth
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/reth node \
–chain holesky \
–datadir=/var/lib/reth \
–log.file.directory=/var/lib/reth/logs \
–authrpc.jwtsecret=/var/lib/jwtsecret/jwt.hex \
–full \
–port 30304 \
–http \
–http.api eth,web3,net,txpool,debug,trace \
–http.addr <內部IP> \
–http.port 8547 \
–ws \
–ws.addr <內部IP> \
–ws.port 8548 \
–metrics 127.0.0.1:6060
[Install]
WantedBy=default.target
儲存並退出(ESC → ENTER → :wq → ENTER),檢查設定並修正。
reth設定摘要:
啟動reth:
預期輸出:顯示“active (running)”。按CTRL+C退出,reth會持續運行。同步約需6小時。
查看同步日誌:
預期輸出:監控日誌。
若運行順利,設定自動啟動:
預期輸出:建立符號連結。
參考文件:https://reth.rs/
設定共識層客戶端
步驟與設定類似前述,下載Lighthouse(https://github.com/sigp/lighthouse/releases))並驗證完整性。
驗證簽章:
範例輸出:驗證成功。
解壓並移動:
刪除暫存:
建立Lighthouse用戶(無伺服器存取權限):
建立資料夾並設定擁有權:
建立systemd服務檔:
貼入內容:
[Unit]
Description=Lighthouse Beacon Node (Holesky)
Wants=network-online.target
After=network-online.target
[Service]
User=lighthousebeacon
Group=lighthousebeacon
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/lighthouse bn \
–network holesky \
–datadir /var/lib/lighthouse_beacon \
–execution-endpoint http://127.0.0.1:8551 \
–execution-jwt /var/lib/jwtsecret/jwt.hex \
–checkpoint-sync-url=https://holesky.beaconstate.ethstaker.cc/ \
–metrics \
–metrics-port 8009 \
–validator-monitor-auto \
–port 9001 \
–http \
–http-port 5051 \
–http-address <內部IP> \
–builder http://127.0.0.1
[Install]
WantedBy=multi-user.target
儲存退出(ESC → ENTER → :wq → ENTER),檢查並修正。
設定摘要:
啟動Lighthouse:
預期:顯示“active (running)”。按CTRL+C退出,Lighthouse會持續同步。同步時間約數分鐘。
查看同步日誌:
若運行順利,設定自動啟動:
驗證初始根(checkpoint):
詳細說明請參考(https://lighthouse-book.sigmaprime.io/intro.html))。
驗證者金鑰產生
驗證者金鑰是用於在以太坊上進行簽名和驗證的加密金鑰。主要有兩種:
驗證者簽名金鑰(Validator Key / Signing Key):
提款金鑰(Withdrawal Key):
如何產生這兩個金鑰?我很高興你問了,我們將用密碼朋克的方式來產生。請做好準備…
建議用空隔機(air-gapped machine),即從未接觸過公共網路的電腦!
可以用便宜的Raspberry Pi(不到100美元)來做。
如果沒有Raspberry Pi或新電腦,也可以下載一個全新的作業系統,我推薦Tail OS。用USB啟動Tail OS,產生驗證者金鑰,將金鑰複製到USB,然後離開。
不論用哪種方式,務必在安全環境(家裡或辦公室)且連接可信WiFi網路下操作。也要實體遮擋所有攝像頭(手機、Webcam、筆電攝像頭),在產生金鑰前關閉所有網路(Ethernet、WiFi、藍牙)。
這是非常嚴格的隱私保護措施,對吧?你甚至不會用這種方式保護你的錢包種子短語(seed phrase)!我說真的,除非你在生成金鑰時採取這些措施,否則一旦金鑰被盜或遺失,後果不堪設想。
為安全起見,我們將示範如何在USB隨身碟上的Live OS(Tail OS)中操作。
為什麼選Tail OS?
因為Edward Snowden都推薦它!你不知道他是誰嗎?快去查。
下載最新版本的以太坊驗證者存款金鑰生成二進位檔(https://github.com/ethereum/staking-deposit-cli/releases)),並驗證其完整性。
預期輸出:OK。
驗證完成後,解壓縮並進入資料夾:
產生驗證者簽名金鑰
在進行下一步前,請務必:
我不能再強調了,務必保護你的金鑰!像HODL比特幣一樣緊握它們!
執行以下命令來產生金鑰,將<數量>替換成你要設定的驗證者數量,<你的提款地址>替換成你的實際提款地址:
<你的提款地址>請用你自己擁有的安全非托管錢包地址(如冷錢包、多簽地址),不要用交易所錢包!用非托管錢包!
系統會提示你輸入以下資訊,請根據自己情況選擇:
預期輸出:系統會產生助記詞,請抄寫在紙上,切勿存於線上或任何連網設備上。
系統會提示你輸入助記詞,請按順序輸入,驗證你有正確記錄。
如果正確輸入,你會看到一個犀牛的ASCII藝術!
會產生兩個檔案:
將兩個檔案存到USB隨身碟中,整個staking-deposit-cli資料夾都複製過去。完成後刪除原始資料夾:
重啟你的主機(如筆電),拔除USB隨身碟,因為不會有持久存儲。
將驗證者金鑰加入節點
將USB插入你的驗證者節點,找到金鑰檔案名稱:
預期輸出:找到你的USB裝置(如sda),名稱類似。
掛載USB到/media:
(請將sda1換成你的裝置名稱)
進入USB資料夾,複製金鑰到你的節點HOME:
卸載USB:
建立密碼檔(用來解密金鑰):
先列出金鑰檔名:
複製金鑰檔名,建立密碼檔:
輸入你之前設定的密碼,存檔退出。
存入32 ETH,成為驗證者
這是最重要的步驟:將32 ETH送到驗證合約。
不要直接轉帳到合約地址(0x0000…),而是一定要透過官方的Ethereum Launchpad(http://launchpad.ethereum.org/))完成。
若直接轉帳,交易會失敗!
務必多次確認合約地址正確(包括Ethereum Foundation、EthHub、EtherScan等多個來源),確保地址是0x0000…。
由於我們用的是測試網(holesky),因此用測試網的Launchpad(https://holesky.launchpad.ethstaker.cc/))。
如何取得測試網ETH?
用Metamask簽署訊息,複製連結網址,貼到簽署框。
檢查必要的免責聲明
打開https://holesky.launchpad.ethstaker.cc/,點“Become a validator”。
仔細閱讀所有免責聲明。
不要只點“接受條款”而沒看內容,要理解。
一直點到“上傳存款資料”部分。不要擔心“選擇客戶端”和“產生金鑰”部分,因為你已經跟著本指南操作過了。
進行存款
將之前產生的deposit_data-.json檔案上傳到指定區域,點擊直到看到下一頁。
在此頁面,你必須勾選所有免責聲明框,才能繼續。在此之前,請點擊“Learn here how to do it safely”來確認你沒有被釣魚。
你會看到一個頁面,顯示以太坊Beacon存款合約地址。確認該地址與你的錢包顯示一致後,才點“Send Deposit”。
確認無誤後,點擊“Send Deposit”並依照Metamask或其他錢包的指示操作。
交易成功後,你可以點擊黃色標記的外部連結,追蹤驗證者的啟動進度與表現。建議收藏這些連結。
別擔心,若一開始沒顯示出來,給它點時間更新🙂。
恭喜!你已成為以太坊去中心化的一份子,超酷的吧!
退出驗證者
在驗證者的生命週期中,某個時候你可能想退出,並取回你的資金(32 ETH)和獎勵(如果有的話),前提是你有設定提款地址——如果你跟著本指南走,應該都已經有了。
如果你想自願退出(我不太懂為何要這樣做,難道區塊獎勵不夠嗎?想轉去Solana?),以下是步驟(以Lighthouse為例):
驗證者可以提交自願退出訊息,停止提案和證明。
前提:驗證者必須是活躍狀態、未被削減、已激活至少256個epoch(約27小時)。
注意:提交退出後,仍需執行職責直到正式退出,以免受罰。
退出流程約需5個epoch(約32分鐘),實際時間視排隊情況而定。
啟動自願退出
用lighthouse的命令:
輸入密碼後,系統會要求你輸入退出短語(exit phrase)作最後確認。
範例(在holesky測試網):
系統會提示你輸入退出短語,確認後提交。
退出成功後,驗證會進入待確認狀態,可能需數分鐘。
目前epoch:29946,退出epoch:29951,可提取時間約1920秒。
全額提取資金
2023年4月12日的Capella升級後,若驗證者有設定正確的提款憑證(0x01),退出時會將全部資金(包括獎勵)轉到提款地址。詳情請參考Ethereum.org。
不同客戶端的退出流程略有不同,以下列出:
Prsym (https://docs.prylabs.network/docs/wallet/exiting-a-validator))
Nimbus (https://nimbus.guide/voluntary-exit.html))
Lodestar (https://chainsafe.github.io/lodestar/run/validator-management/validator-cli#validator-voluntary-exit))
Teku (https://docs.teku.consensys.net/HowTo/Voluntary-Exit))
此篇文章包含測試網與主網的連結與流程,為何?因為我手上沒有32 ETH,請根據你要成為驗證者的鏈(測試或主網)調整。
這篇文章長到令人咋舌!
你已閱讀6,309字,約40,289字符,完整展現了單獨質押的流程。
希望你一開始的期待都已被滿足,現在可以成功設置自己的驗證者。
我們在鏈的另一端,討論EigenLayer是否為Ethereum結算的未來,同時嘲笑Solana總是離線,還有Cardano的學術論文(那是另一個故事了!)