手把手帶你參與以太坊2.0主網質押

來源|
Go Ethereum Node (code branch) Go Ethereum代碼分支代碼分支)
代碼分支MetaMask
瀏覽器插件加密錢包
一級標題
本教程參考了網上的各種資料,感謝這些提供資料的貢獻者!
本教程參考了網上的各種資料,感謝這些提供資料的貢獻者!EthStaker感謝
一級標題
免責聲明
一級標題
支持
一級標題
一級標題
Reddit:https://www.reddit.com/r/ethstaker/
Discord:https://discord.gg/7z8wzehjrJ
條件
條件
條件
條件還需要準備:
Ubuntu 服務器v20.04 (LTS) amd64
Ubuntu 服務器v20.04 (LTS) amd64MetaMask或者一個較新的,在本地計算機或云端安裝和運行的Ubuntu服務器。
一級標題
一級標題
要求
要求
一級標題
概覽
下面這個簡化圖表標明了本篇教程所涉及的範圍,標黃的即是本文會覆蓋到的部分:

整個流程可以概念化表述為:
整個流程可以概念化表述為:
整個流程可以概念化表述為:
整個流程可以概念化表述為:
那我們現在就開始吧!
那我們現在就開始吧!
那我們現在就開始吧!
一級標題
一級標題
一級標題
點擊
點擊
點擊此處此處
此處https://github.com/ethereum/eth2.0-deposit-cli/releases/

在“Assets”那一欄選擇與你的設備(如Windows、Mac、Linux Desktop等) 匹配的版本並下載。
二級標題
二級標題
二級標題
運行存款工具(Eth2 存款CLI)
解壓文件,裡面應該有一個二進製文件(可執行文件)。存款工俱生成用於質押的文件和一組助記詞。這組助記詞需要安全地保存。下面有兩種選擇:
Linux/Mac:
./deposit new-mnemonic --num_validators
Windows:
deposit.exe new-mnemonic --num_validators
不建議方案:在當前使用的計算機上運行。但是網絡連接可能會導致你的助記詞密鑰洩漏。如果沒有未聯網的計算機,那就在開始運行之前斷開網絡。

準備好之後,在終端窗口(或windows的命令提示符CMD) 中運行這份文件以繼續使用下面列出的命令。確定好你要運行的驗證者節點的數量之後,用該數字替換

。比如: --num_validators 2

在你選擇的計算機執行上面的步驟之後,你將被要求創建一個驗證者密鑰存儲庫(validator keystore) 密碼,並保存在一個安全的地方。在後面的步驟中,你將需要這個keystore來上傳驗證者密鑰到Teku的驗證者錢包裡。

隨後會生成一組助記詞,請保存在一個安全的地方,這至關重要。因為最終你需要助記詞來生成提款密鑰以提出質押的ETH,並且增加驗證者節點時也需要使用助記詞。如果你丟失了助記詞,就無法將你的資產提出了。
一旦你點擊確認已經記好助記詞之後,你的驗證者密鑰對便會生成。
· 文件keystore-m...json 包含經過加密的驗證者簽名密鑰。每一個驗證者節點對應一個“keystore-m”。該文件將被導入到Teku驗證者錢包中以備質押時使用。隨後需要將這些文件複製粘貼到Ubuntu服務器中。
二級標題
二級標題
二級標題
首先完成並驗證你的質押設置非常重要。如果你的ETH存款激活了,但是質押設置還沒準備好的話,你將會受到怠工懲罰。
一級標題
一級標題
一級標題
第2步:連接至服務器
# adduser
注意:如果你不是用root登錄的便可以直接跳到第三步。
# usermod -aG sudo
安全性十分重要。但由於本文不是針對安全性的指南,所有隻列出了一些基礎的設置。
# rsync --archive --chown=
登入Ubuntu服務器。
正文
確保系統更新至最新的軟件和安全設置。
$ sudo apt update && sudo apt upgrade$ sudo apt dist-upgrade && sudo apt autoremove
$ sudo reboot
安全性十分重要。但由於本文不是針對安全性的指南,所有隻列出了一些基礎的設置。
安全性十分重要。但由於本文不是針對安全性的指南,所有隻列出了一些基礎的設置。
二級標題
二級標題
二級標題
$ sudo ss -tulpn | grep ':
修改SSH默認端口
$ sudo nano /etc/ssh/sshd_config
SSH默認端口是端口22,也是易受攻擊的矢量,因此可以修改SSH端口來防止攻擊。
Port
在1024 — 49151之間選擇一個端口號,然後運行以下命令以檢索尚未使用的端口號。沒有其他顯示便意味著該端口號未被使用;顯示紅色便意味著已被使用,請嘗試其他端口號。比如:sudo ss -tulpn | grep ':6673'

確定端口號可用之後,通過升級SSH設置來修改默認端口。
$ sudo systemctl restart ssh
二級標題
配置防火牆
配置防火牆
配置防火牆
配置防火牆
$ sudo apt install ufw
Ubuntu 20.04 服務器可以使用默認的UFW 防火牆來限制訪問該服務器的流量,不過要先設置其允許來自SSH、Go Ethereum、Teku 的入站流量。
明確地應用默認值,拒絕入站流量,允許出站流量。
$ sudo ufw default deny incoming$ sudo ufw default allow outgoing
允許SSH
允許SSH
$ sudo ufw allow
允許SSH
允許你此前設置的端口號
拒絕SSH 端口號22
$ sudo ufw deny 22/tcp
允許Go Ethereum
注意:當你完成了修改SSH 默認端口之後再做這一步。
允許Go Ethereum
$ sudo ufw allow 30303
允許與Go Ethereum 的對等節點(端口30303) 進行點對點(P2P) 連接。如果你使用第三方託管的Eth1 節點,則可以跳過這一步。
注意:如果你在本地託管你的Ubuntu服務器,你需要配置你的網絡路由以允許來自端口30303 的入站流量。
注意:如果你在本地託管你的Ubuntu服務器,你需要配置你的網絡路由以允許來自端口30303 的入站流量。
$ sudo ufw allow 9000
允許Teku 客戶端
$ sudo ufw enable$ sudo ufw status numbered
參考下方的截圖。

一級標題
一級標題
$ timedatectl
一級標題
$ sudo timedatectl set-ntp on
第5步:配置定時器

只能使用單個定時器服務。如果你此前安裝過NTPD,你需要檢查此文件是否還存在,如果存在請操作下面的命令行以刪除。
$ ntpq -p$ sudo apt-get remove ntp
一級標題
為Eth1區塊鏈創建數據目錄,用來存儲Eth1節點數據。
二級標題
安裝Go Ethereum
安裝Go Ethereum
$ sudo add-apt-repository -y ppa:ethereum/ethereum$ sudo apt update
$ sudo apt install geth
為Eth1區塊鏈創建數據目錄,用來存儲Eth1節點數據。
$ sudo useradd --no-create-home --shell /bin/false goeth
為Eth1區塊鏈創建數據目錄,用來存儲Eth1節點數據。
$ sudo mkdir -p /var/lib/goethereum
設置目錄的權限。 goeth 賬戶需要權限來修改該數據目錄。
$ sudo chown -R goeth:goeth /var/lib/goethereum
創建一個systemd服務配置文件來對該服務進行配置。
$ sudo nano /etc/systemd/system/geth.service
將下列的服務配置複製粘貼到文檔中。
[Unit]Description=Go Ethereum Client
After=network.target
Wants=network.target[Service]
User=goeth
Group=goeth
Type=simple
Restart=always
RestartSec=5
ExecStart=geth --http --datadir /var/lib/goethereum --cache 2048 --maxpeers 30[Install]
WantedBy=default.target
將下列的服務配置複製粘貼到文檔中。flags:
將下列的服務配置複製粘貼到文檔中。http://localhost:8545)。
將下列的服務配置複製粘貼到文檔中。
需要注意的
--http 用來公開與Teku信標鏈節點連接的一個HTTP端口 (

--cache 指的是內部緩存的大小,以GB為單位。數值的增減取決於你的可用系統內存。設置2048 將大概需要使用4-5 GB的內存。
$ sudo systemctl daemon-reload$ sudo systemctl start geth
$ sudo systemctl status geth
參考下方的截圖。按CTRL+x 然後選'y' ,按回車保存並退出。

如果你每一步都做對了,它會用綠色字體顯示”active (running)"參考下方的截圖:
如果你每一步都做對了,它會用綠色字體顯示”active (running)
$ sudo systemctl enable geth
。如果沒有顯示,你需要倒回去重複上述步驟,修復問題。按Q退出(此操作不會影響geth服務)。
$ sudo journalctl -fu geth.service
參考下方的截圖:

二級標題
二級標題
geth attach http://127.0.0.1:8545> eth.syncing
二級標題
查看同步狀態

完成時按“CTRL+d”以退出。
二級標題
二級標題
geth attach http://127.0.0.1:8545> net.peerCount
二級標題
完成後按“CTRL+d”以退出。
二級標題
二級標題https://gist.github.com/rfikki/a2ccdc1a31ff24884106da7b9e6a7453二級標題
$ sudo systemctl stop geth$ sudo nano /etc/systemd/system/geth.service
添加bootnodes (可選)
ExecStart=geth --http --datadir /var/lib/goethereum --cache 2048 --maxpeers 30 --bootnodes "enode://d0b4a09d072b3f021e233fe55d43dc404a77eeaed32da9860cc72a5523c90d31ef9fab7f3da87967bc52c1118ca3241c0eced50290a87e0a91a271b5fac8d0a6@157.230.142.236:30303,enode://5070366042daaf15752fea340e7ffce3fd8fc576ac846034bd551c3eebac76db122a73fe8418804c5070a5e6d690fae133d9953f85d7aa00375d9a4a06741dbc@116.202.231.71:30303"
有時可能要花點時間才能找到要同步的對等節點,可以添加bootnodes以改善這種情況。訪問
$ sudo systemctl daemon-reload$ sudo systemctl start geth
$ sudo journalctl -fu geth.service
注意:需要按照一系列特定的步驟來更新Geth。更多信息請參見“附錄A:更新Geth”。
一級標題
一級標題
一級標題第7步:下載Teku

Teke客戶端由兩份二進製文件組成:信標鏈節點和驗證者客戶端。本步驟將講解如何下載Teku二進製文件。

首先,訪問

https://github.com/ConsenSys/teku/releases並找到最新發布的Teku版本。通常在頁面的最頂部,比如:
在“Downloads”那一欄選擇“binary distribution”。
$ cd ~$ sudo apt install curl
$ curl -Lo teku-20.11.0.tar.gz https://bintray.com/consensys/pegasys-repo/download_file?file_path=teku-20.11.0.tar.gz
然後將下載鏈接複製粘貼至文檔“teku-…tar.gz”中。請確保複製的鏈接是正確的。
$ tar xvf teku-20.11.0.tar.gz$ sudo cp -a teku-20.11.0 /usr/local/bin/teku
操作下列命令來下載這些文件。將下方指令部分的URL改為最新版本的下載鏈接。
$ sudo apt install default-jre
注意語法是curl -Lo
$ cd ~$ sudo rm teku-20.11.0.tar.gz
$ sudo rm -r teku-20.11.0
注意:需要按照一系列特定的步驟來更新Teku。更多信息請參見“附錄B:更新Teku”。
一級標題
導入驗證者密鑰對以配置Teku。
二級標題
二級標題二級標題。
將文件放置在: $HOME/eth2deposit-cli/validator_keys。如果需要的話創建文件目錄。
二級標題
二級標題
$ sudo mkdir -p /var/lib/teku$ sudo cp -a /$HOME/eth2deposit-cli/validator_keys /var/lib/teku
創建一個目錄以存儲驗證者密鑰並將包含keystore-m…json 文檔的validator_keys目錄複製過去。
$ cd /var/lib/teku/validator_keys$ ls
$ sudo rm
二級標題

二級標題
二級標題
創建驗證者密碼文檔
創建驗證者密碼文檔
$ ls /var/lib/teku/validator_keys
在運行和自動重啟服務的時候,Teku需要一個密碼文檔以訪問每個驗證者賬戶。
每一個keystore-m...json文檔都需要一個對應的密碼文檔。即使每個驗證者賬戶的密碼是相同的這一步也是需要的。密碼文檔的命名需要與對應的keystore-m...json文檔相匹配。
$ sudo nano /var/lib/teku/validator_keys/
對於每個keystore_m*.json文檔,都要創建一個名字相同的密碼文檔。
在你執行下一個命令前,以

命名這個json文檔。不要忘了在最後加上.txt。例如:sudo nano /var/lib/teku/validator_keys/keystore-m_12381_3600_0_0_0–1606351647.txt
在txt文檔裡,用YourKeystorePasswordForThisValidator代替密鑰存儲密碼(你在第1步創建驗證者文檔時提供的密碼)

二級標題
一級標題
二級標題
設置賬戶和目錄
二級標題
$ sudo useradd --no-create-home --shell /bin/false teku
設置權限
設置權限
$ sudo chown -R teku:teku /var/lib/teku$ ls -dl /var/lib/teku
設置權限

設置權限
$ sudo chmod -R 700 /var/lib/teku/validator_keys$ sudo ls -lh /var/lib/teku/validator_keys
參考下方的截圖。

二級標題
創建一個systemd服務的config文檔來配置服務
$ sudo nano /etc/systemd/system/teku.service
將下面這段代碼複製粘貼到文檔裡
[Unit]Description=Teku Eth2 Client
Wants=network-online.target
After=network-online.target[Service]
User=teku
Group=teku
Type=simple
Restart=always
RestartSec=5
Environment="JAVA_OPTS=-Xmx2g"
ExecStart=/usr/local/bin/teku/bin/teku --data-base-path=/var/lib/teku --eth1-endpoint=http://localhost:8545 --validator-keys=/var/lib/teku/validator_keys:/var/lib/teku/validator_keys --rest-api-enabled=true --rest-api-docs-enabled=true --metrics-enabled --validators-graffiti="
WantedBy=multi-user.target
將下面這段代碼複製粘貼到文檔裡flags:
將下面這段代碼複製粘貼到文檔裡
將下面這段代碼複製粘貼到文檔裡
--validators-graffiti="
--eth1-endpoint如果你使用的是一個遠程的或第三方的Eth1節點,改變這個值。如果你是在本地創建這個Eth1節點的,則不需要改變。

重新加載systemd以顯示更改。
$ sudo systemctl daemon-reload
重新加載systemd以顯示更改。
啟動服務並檢查,確保運行正確。
$ sudo systemctl start teku$ sudo systemctl status teku
啟動服務並檢查,確保運行正確。

如果你每一步都做對了,它會用綠色字體顯示”active (running)"。如果沒有顯示,你需要倒回去重複上述步驟,修復問題。按Q退出(不會影響teku的服務)。
允許服務隨系統重啟而自動重啟。
$ sudo systemctl enable teku
允許服務隨系統重啟而自動重啟。
$ sudo journalctl -fu teku.service
允許服務隨系統重啟而自動重啟。
Nov 26 21:00:50 ETH-STAKER-001 teku[41629]: 21:00:50.573 INFO - Eth1 tracker successfully caught up to chain headNov 26 21:10:49 ETH-STAKER-001 teku[41629]: 21:10:49.010 INFO - 4 days 14 hours 49 minutes 34 seconds until genesis time is reached. Peers: 74
允許服務隨系統重啟而自動重啟。
如果Eth2 鏈處於創世後的狀態,Teku信標鏈會開始同步數據。它可能要花幾個小時才能完全實現同步。你可以通過運行journalctl 命令來追踪進程或檢查錯誤。按CTRL+c退出(將不會影響teku的服務)beaconcha.in查看你的驗證者狀態。只需要搜索你的驗證者公鑰或使用你的MetaMask (或其他)錢包地址進行搜索。你的數據可能要過一段時間才會在網站上顯示。
一級標題
一級標題
一級標題
第10步:進行驗證者存款
現在你的節點已經設置好並開始運行,你將需要將ETH存入你的驗證者節點。
注意:如果你已經提交了你的質押存款,你可以跳過這一步https://launchpad.ethereum.org/
一直隨著屏幕切換點擊這些警告步驟,直到你到達密鑰對生成的部分。選擇你打算運行的驗證者數量。選擇一個與你在步驟1中生成的驗證者文件數量相匹配的值。

往下滾動,看這些內容你是否同意,然後點擊“Continue” (繼續)。

往下滾動,看這些內容你是否同意,然後點擊“Continue” (繼續)。

往下滾動,看這些內容你是否同意,然後點擊“Continue” (繼續)。
往下滾動,看這些內容你是否同意,然後點擊“Continue” (繼續)。

你會被要求上傳deposit_data-[timestamp].json文檔。這個文檔你是在步驟1生成的。瀏覽/選擇或拖拉這個文檔,然後點擊Continue。

連接你的錢包。選擇MetaMask (或者是其他支持的錢包),登錄,選擇存有你的ETH的錢包,然後點擊Continue。"Initiate All Transactions"你的MetaMask餘額就會顯示出來。如果你選擇了主網且你有充足的ETH餘額,網站會允許你繼續下一步。

(啟動所有交易)。
當所有的交易都成功完成時,你的質押也完成了!

當所有的交易都成功完成時,你的質押也完成了!
查看你的驗證者存款狀態
新加入的驗證者需要等一下(幾個小時到幾天不等)才能激活。你可以以下幾步來查看你的密鑰狀態:
新加入的驗證者需要等一下(幾個小時到幾天不等)才能激活。你可以以下幾步來查看你的密鑰狀態:
新加入的驗證者需要等一下(幾個小時到幾天不等)才能激活。你可以以下幾步來查看你的密鑰狀態:beaconcha.in/
新加入的驗證者需要等一下(幾個小時到幾天不等)才能激活。你可以以下幾步來查看你的密鑰狀態:

複製你的MetaMask (或其他)錢包地址。

前往這裡:
用你的錢包地址搜索你的密鑰
是時候來一頓肥宅水狂歡了。
一級標題
一級標題
一級標題
第11步:監測
因為一些還沒被解決的安全問題,監測這一部分將在未來補充到這份教程。
結束語及後續建議
感謝大家給我這個機會。希望這份教程能幫到大家。
後續步驟:
- 檢查三次所有密鑰與密碼備份。
- 了解如何升級客戶端與服務器軟件。beaconcha.in- 熟悉- 使用htop來監測本地電腦的資源。
的Discord,留意重要通知。Discord、 Twitter的Discord,留意重要通知。Reddit、或
- 請在Ethstaker、或
- 支持一下:somer.ethfriend link- 用
- 支持一下:somer.eth
一級標題
一級標題
一級標題
延伸閱讀Prysm | Lighthouse | Teku | Nimbus
- 強烈建議大家從盡可能多的來源獲取信息,還有很多其他資源可以幫助你熟悉如何在Eth2上質押。
- 如果作者對這些資源還沒測試或驗證過,而你採用了的話,是要自己承擔風險的。
- 以太坊2.0質押的Telegram服務 https://9elements.com/blog/ethereum-2-0-2/)
一級標題
如果你需要更新到Geth的最新版本,請按下列步驟:
$ sudo systemctl stop teku$ sudo systemctl stop geth
$ sudo apt update && sudo apt upgrade
$ sudo systemctl start geth
$ sudo systemctl status geth # <-- Check for errors
$ sudo journalctl -fu geth # <-- Monitor
$ sudo systemctl start teku
$ sudo systemctl status teku # <-- Check for errors
$ sudo journalctl -fu teku.service # <-- Monitor
一級標題
首先,前往
首先,前往這裡這裡"binary distribution"這裡
這裡
$ cd ~$ sudo apt install curl
$ curl -Lo teku-20.11.0.tar.gz https://bintray.com/consensys/pegasys-repo/download_file?file_path=teku-20.11.0.tar.gz
找出最新的Linux發布。在Downloads那一欄,點擊
$ sudo systemctl stop teku
。然後復制下載連接到teku-…tar.gz文檔。確認你複製的是正確的鏈接。
$ tar xvf teku-20.11.0.tar.gz$ sudo rm -r /usr/local/bin/teku # <-- Remove the old files
$ sudo cp -a teku-20.11.0 /usr/local/bin/teku
將下方指令部分的URL改為最新版本的下載鏈接。
$ sudo systemctl start teku$ sudo systemctl status teku # <-- Check for errors
$ sudo journalctl -fu teku.service # <-- Monitor
清理提出的文檔。如果需要的話,修改文檔名稱。
$ cd ~$ sudo rm teku-20.11.0.tar.gz
$ sudo rm -r teku-20.11.0
一級標題
一級標題
Fatal: Failed to register the Ethereum service: write /var/lib/goethereum/geth/chaindata/383234.ldb: no space left on device
一級標題LVM附錄C — 擴展邏輯卷
$ sudo lvdisplay # <-- Check your logical volume size$ sudo lvm
> lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
> exit
$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
$ df -h # <-- Check results
很多時候Ubuntu只預配200GB的較大固態硬盤,導致用戶在同步他們的Eth1節點時就耗盡存儲空間了。報錯信息近似於:
為了解決這個問題,假設你有一個大於200GB的固態硬盤,你可以通過下列步驟為EthStaker的Discord上尋求幫助。
一級標題
這篇文章(教程) 僅供參考,不構成專業建議。作者不保證文章中任何信息的準確性、質量、完整性、實效性與有效性。本文所有信息均按“原樣”提供,不作任何形式的保證,並可隨時更改,恕不另行通知。作者不因任何目的對任何形式的明示、暗示和法定保證負責,包括對文章內容的準確性、時效性、完整性或合適性的保證。作者也不對任何直接、間接、偶然、後果性或任何其他因使用本文或根據本文所提供的信息而造成的損害負責。這包括任何人身傷害、業務中斷、使用損失、數據丟失、利潤損失或任何其他金錢損失,無論是在合同、疏忽或其他不當使用中,即使作者已了解這種可能性。
公眾號:ETH中文站
公眾號:ETH中文站


