教程 | Nimbus 開發更新:開放以太坊 2.0 測試網

2021-02-18 以太坊愛好者

我們做到了!😱🎉我們構建了一個 Nimbus-to-Nimbus 的測試網,並不是在一臺機器上進行模擬,而是包含一個遠程引導節點(bootstrap node),用戶甚至可以從 Status 之外訪問!

這是以太坊 2.0 開發的一個重要裡程碑,雖然網絡穩定性依然有一些問題,也可能存在一些 BUG,但是我們現在有了一個能夠在節點間同步信息的信標鏈,並且節點可以分布在遠程的設備上,這是非常重要的。

我們將其命名為 testnet0 ——這是未來一系列測試網絡中的第一個,每個測試網絡都將增加新的功能、可擴展性與穩定性。在最初運行的幾周內,testnet0 將經常重啟,以修正或改進我們從反饋和網絡監控中發現的一些問題與提案。這次迭代基於 eth2.0-spec 的 0.5.1 版本,設置 400 個驗證者節點來維護網絡正常運行。其中,50 個驗證節點預留給 「勇敢的探索者」(當你想加入我們的時候,你將得到一個隨機分配給你的驗證者節點)。

插播:如果你有任何問題,你可以在 Status 的 #status-nimbus 頻道向我們詢問,或是在 Chaos Unicorn Day 找到 Status,在 Gitter 上聯繫我們。

Nimbus 入門

我們將從 Nimbus 的父倉庫啟動所有指令。nim-beacon-chain 代碼庫是 Nimbus 的一個依賴庫,其中包含了 以太坊 2.0 的全部代碼,但是這些代碼將從 Nimbus 的父倉庫啟動。nim-beacon-chain 的代碼將作為一個子模塊自動拉取下來,並且包含一個自己的 Makefile 文件。

請注意,本文中所有指令僅適用於 Linux 或 Mac 作業系統。除非你配置一個像我們這樣的 nim-vagrant 虛擬機,否則你不能在 Windows 上運行這些指令。

加入 Nimbus 測試網

想加入我們的測試網麼?教程如下!

從頭開始

如果你是從頭開始,甚至沒有安裝 Nim 的話(你首先還需要安裝 RocksDB - 教程),以下是完整命令:

# 確保你在運行以下命令以前已經正確安裝 RocksDB!
git clone https://github.com/status-im/nimbus
cd nimbus
make update # 這可能需要幾分鐘
cd vendor/nim-beacon-chain # 以太坊 2.0 全部功能代碼都在這個 package 中
make testnet0
./build/testnet0_node # 該命令將啟動你剛剛構建的 testnet0-specific 節點


程序更新

如果你之前運行過我們的測試網,你可能保存了一些與最新版本測試網不兼容的緩存。你可能還有一些舊版代碼,現在需要將他們與我們的 master 分支同步並且重新構建測試網節點。構建過程與 「從頭開始」 的步驟類似:

cd nimbus
make update # 更新依賴
cd vendor/nim-beacon-chain
make clean-testnet0 testnet0 # 清除緩存並重新構建可執行文件
./build/testnet0_node # 該命令將啟動你剛剛構建的 testnet0-specific 節點

恭喜你!你現在已經接入我們的測試網了——你的節點將開始同步我們的信標鏈的當前狀態。一旦你進入同步階段,你也將開始提出(「產生」)你自己的區塊並提供證明——很令人激動,不是麼!那麼現在你就是 以太坊 2.0 Nimus 的先驅者了!

那麼 make testnet0 是做什麼的呢?


後臺過程

在運行 make testnet0 命令時,將通過執行一個特殊的 Shell 腳本,構建一個預先配置好的自定義信標鏈節點,並制定好特定的測試網編號,該 Shell 腳本內容如下:

#!/bin/bash
[ -z "$1" ] && { echo "Usage: `basename $0` testnetX"; exit 1; }
set -eu
cd $(dirname "$0")
NETWORK_NAME="$1"
source "$NETWORK_NAME.env"
cd ..
NIM_FLAGS="-d:release --lineTrace:on -d:chronicles_log_level=DEBUG -d:SECONDS_PER_SLOT=$SECONDS_PER_SLOT -d:SHARD_COUNT=$SHARD_COUNT -d:SLOTS_PER_EPOCH=$SLOTS_PER_EPOCH -d:DEFAULT_NETWORK=$NETWORK_NAME --hints:off --verbosity:0"
BEACON_NODE_BIN="build/${NETWORK_NAME}_node"
CMD="nim c $NIM_FLAGS -o:$BEACON_NODE_BIN beacon_chain/beacon_node"
echo "$CMD"
$CMD
if [ ! -d ~/.cache/nimbus/BeaconNode/${NETWORK_NAME}/validators ]; then
$BEACON_NODE_BIN --network=$NETWORK_NAME importValidator
fi
echo
echo "A binary for connecting to $NETWORK_NAME was placed in '$BEACON_NODE_BIN'"
echo "To sync with the network, launch it with default parameters"
echo

第一條命令(即,「testnet0」)加載了 testnet0.env 的內容,其中包括我們將要啟動的信標鏈節點所需的環境變量。該 Shell 腳本之後設置了一些 Nim 標誌變量以優化編譯過程,其他變量將傳遞到節點內部以使其兼容測試網規則——特別是,每個周期(epoch)的 slot 數與分片數。我們需要特殊的規則,因為我們現在正運行一個與 eth-spec2.0 實現顯著不同的小型測試網。

如果這是你第一次加入測試網,信標節點將使用 importValidator 命令行連接到我們的測試網的引導節點上,並且下載一個隨機私鑰給你——我們已經準備好了一些預生成的私鑰。有了這個私鑰,系統將認為你已經存儲了 32 ETH,並認可你是一個驗證者。如果出於某種原因你的節點宕機了或者你需要重新加入測試網,將重用相同的驗證者私鑰。請注意,你不能在信標節點中使用自己生成的私鑰,因為你的私鑰並沒有在我們預先設置的 「已存儲 32 ETH」 的列表中,你的節點就不能成為驗證者節點了。.

最後,在 build 目錄中生成 beacon_node 可執行文件,該文件名稱將包含測試網標識 build/testnet0_node 。當信標節點啟動後,它將進行以下步驟:

我們通過這樣的形式運行信標節點是為了密切關注一些事情——我們掃描了 Grafana 與 Kibana 的情況,但是如果你更願意使用自己的測試網,請參考下面的內容。

當你加入測試網後會發生什麼

首先,你的節點將依據下載下來的元數據文件連接到指定的引導節點。所有其他節點也通過該文件建立連接。然後,你的信標節點將獲取到目前為止生成的所有區塊。

一旦它擁有了所有這些數據,它便將這些數據存儲到狀態機中——將數據寫入它本地的資料庫,並構建區塊鏈。因此,它首先獲取原始數據,通過驗證後將原始數據轉換為區塊鏈。

一旦它存儲完所有內容之後,它將進行下一輪獲取數據的過程——因為上一部分區塊歷史已經下載完了。接下來將進行幾輪這樣的操作,直到節點同步為止。

此時,信標鏈將連接到本地驗證器 (當你加入測試網址時自動下載的驗證器),將它發送到負責對給定分片進行驗證和提議的委員會中,並定期檢查是否輪到它工作。

然後,信標節點將等待驗證器執行某些操作,同時不斷地從其他節點請求數據,並保持區塊鏈狀態處於最新狀態。當輪到你的信標節點成為驗證者時,節點將調用驗證器,生成一個證書並將其發送到網絡中,或是將提議一個區塊,亦或是同時做這兩件事。與此同時,信標節點也將調整和封裝區塊。.

當退出節點並稍後重啟時,你已經有的數據將重用:驗證者私鑰以及資料庫中的內容。若想清楚所有數據從頭開始,請運行 make clean-testnet0。

創建一個 Nimbus 測試網


為了啟動測試網,我們的信標節點目前有一個 createTestnet 命令。這可以幫它為其他參與節點生成初始快照、元數據文件、埠和網路信息等。

在我們開始之前,請注意,所有加入你自定義的測試網的信標節點 必須 使用相同的信標鏈常量進行編譯 - 即,如果一個節點編譯時設置為每個時期 8 個時隙,一個設置為每個時期 16 個時隙,那麼它們之間將不兼容。考慮到這一點,讓我們從 vender/nim-beacon-chain 中構建基本的信標節點可執行文件,並構建能夠生成驗證者私鑰的工具。

export NIMFLAGS="-d:release -d:SECONDS_PER_SLOT=30 -d:SHARD_COUNT=8 -d:SLOTS_PER_EPOCH=8" \
&& make beacon_node validator_keygen

以上命令將在當前文件夾(vendor/nim-beacon-chain)中生成信標節點(beacon_node)可執行文件以及驗證者私鑰生成工具(validator_keygen)。.

讓我們創建一個節點存儲數據的文件夾,然後在其中生成一些驗證者私鑰。我設置驗證者個數為 500。

mkdir -p $HOME/testnets/custom-network/data
./build/validator_keygen --totalValidators=500 --outputDir="$HOME/testnets/custom-network""

運行以上命令,我們將在特定文件夾($HOME/testnets/custom-network)中擁有 500 個私鑰文件以及 500 個對應公鑰文件。.

接下來,讓信標節點為我們生成一個測試網,其中包含所有可能其他人需要連接到我們的附加功能。

export NETWORK_DIR=$HOME/testnets/custom-network && ./build/beacon_node
--dataDir=$NETWORK_DIR/data \
createTestnet \
--networkId=666 \
--validatorsDir=$NETWORK_DIR \
--totalValidators=500 \
--outputGenesis=$NETWORK_DIR/genesis.json \
--outputNetwork=$NETWORK_DIR/custom-network.json \
--bootstrapAddress=$(curl -s ifconfig.me) \
--bootstrapPort=34000 \
--genesisOffset=6000

以上命令設置了自定義網絡的主文件夾(home folder),並將其傳遞給所需的參數,並讓它生成創世文件(genesis file)以及元數據文件供其他節點加入我們的測試網使用。bootstrap 地址部分是由 ifconfig.me 服務自動生成的 - 如果你知道你的公網 IP,或者 ifconfig.me 服務沒有檢測到它(可以在命令行輸入 curl -s ifconfig.me 測試),你可以手動輸入 bootstrap 地址。bootstrap 埠是可選的,但建議你在意外連接到默認埠上其他節點時儘量避免跨鏈噪聲。

genesisOffset 標誌變量將創世區塊的時間設置為未來某個時間——在本例中為 10 分鐘後。我們這樣做的目的是為了給每個想要加入的人足夠的時間在創世區塊生效前加入,因為如果它們在創世區塊生效後加入,並且它們剛好是加入前某時刻鏈期望的驗證者節點,它們將被視為離線,並受到懲罰,最終被剔除信標鏈。.

運行以上命令將產生兩個新文件。本例子中為 $HOME/testnets/custom-network/genesis.json和 $HOME/testnets/custom-network/custom-network.json。

現在,我們已經準備好連接,並與那些準備連接到我們的人共享以上文件。請注意,為了允許其他人與你建立連接,在 Nimbus 實現 UPnP之前,你需要在你的路由器和防火牆上手動打開你選擇的埠。如果你在類似 DigitalOcean 或 AWS 的平臺上運行你的 bootnode,那麼會遇到非常嚴重的防火牆控制問題。對於你自己的本地計算機,請參考路由手冊完成該修改。

genesis.json 是起始狀態,即你的測試網信標鏈的 「區塊0」。它包含了驗證者列表、初始分組以及為了讓連接到本測試網的所有客戶端能夠構建相同狀態的系統所需的所有信息。custom-network.json 是你的測試網的 「元數據」 文件 - 它已經標識了你的節點,即與此文件一同生成的節點(bootnode,引導節點),其中,bootstrapNodes 下包含了該 bootnode 的節點地址、其他所需數據以及創世根。你可以把這個文件放到某個地方的伺服器上,讓其他人可以獲取創世文件。之後,如果他們運行以下命令就可以連接到你的測試網了。

./build/beacon_node --network=$HOME/testnets/custom-network/custom-network.json --stateSnapshot=$HOME/testnets/custom-network/genesis.json --tcpPort=34001 --udpPort=340011


可視化

為了更好地展示當前成果,我們正在構建一個基本的可視化工具,它將在屏幕上以圖形的形式展示節點、時隙、區塊、時期和證明。希望這能幫助那些不熟悉信標鏈的人更好地理解,並幫助我們直觀地發現一些異常。

這裡的視頻地址為:https://imgur.com/a/yTnEDlX。

這是一個早期預覽,所以事情看起來會有很大不同。原始碼即將發布。

原文連結: https://our.status.im/the-nimbus-mvp-testnet-is-here/
作者: Bruno Škvorc@Status
翻譯&校對: stormpang & 阿劍

本文由作者授權 EthFans 翻譯及再出版。

相關焦點

  • 指南:如何成為以太坊 2.0 的驗證者
    我們曾在 8 月幫助人們在 Medalla 測試網上進行設置,你仍然可以訪問測試網質押指南[6]進行練習。這是是真實的質押,實打實在以太坊 2.0 主網上啟動驗證器節點。如何在 Ubuntu 上用 Prysm 參與以太坊 2.0 質押 (Medalla 測試網)[48]如何在 Ubuntu 上用 Lighthouse 參與以太坊 2.0 質押 (Medalla 測試網)[49]如何在 Ubuntu 上使用 Teku 參與以太坊 2.0 質押 (Medalla 測試網)[50]如何在 Ubuntu 上用 Nimbus 參與以太坊 2.0 質押
  • Nimbus 新手教程
    [Nimbus](https://nimbus.status.im/) 是下一代以太坊的全新客戶端。
  • 教程 | 以太坊2.0驗證者操作指南
    將在今年第四季度上線的以太坊2.0主網,無疑牽動著很多人的心,而對於想要成為驗證者的參與者來說,掌握運行節點的操作流程是非常重要的,對此,我們為用戶提供了一個全面的指南。2.0多客戶端測試網,它為驗證者提供了不同的客戶端選擇。
  • 教程 | 使用 Nethermind 和 Lighthouse 運行以太坊 2.0 測試網的驗證者
    Staking 是指鎖定一定數量(目前是 32 個)的以太幣來獲得 「驗證者」 的身份,進而能參與確定哪些區塊能連結在鏈上。當前有許多模擬 Eth 2.0 架構的測試網供大家實驗,其中 staking 功能往往是藉助 Goerli (Eth1.0)測試網實現的 。此前大多數 Eth 2.0 節點搭建的教程都是基於 Geth 客戶端在 Goerli 上完成 staking。
  • 以太坊都這麼堵了,Eth 2.0 在幹嘛呢?
    數據顯示,以太坊網絡上的平均燃料價格自 5 月初以來上漲了三倍多,在過去幾天平均上漲了 30 Gwei。EthGasStation 表示,這樣導致的結果是發送一筆簡單的 ETH 交易平均要收取 0.16 美元的費用,這還是儘可能少用燃料方式下的價格,ERC-20 令牌傳輸和智能合約呼叫的成本可能是這個數字的好幾倍。
  • 引介 | 市集開發模式與以太坊 2.0 開發進程
    以太坊 2.0 項目已經很大程度上採用了開放式的市集型開發模式。然而,我們在 Raymond 的願景上更進了一步:在以太坊 2.0 中,我們不僅僅是開發軟體;而是要用完全開放的方式來設計整個協議。我不確定之前有沒有人這麼做過。這並不是說要搞無政府主義。
  • 通告 | 每周以太坊,2020-09-13
    因此,IPFS/Swarm 以及 Kovan 測試網及其它非以太坊區塊鏈的組件,都回退到 v2.5 的代碼版本<https://medium.com/openethereum/vision-for-openethereum-ex-parity-client-eb7b11f6eef8>最新的 Turbogeth 客戶端:RPC Daemon 升級,支持新的 RPC<https
  • 以太坊2.0進展更新_截至2020/5/15
    Prysm 的客戶端測試網 Topaz 一直在運行中,接下來將可以由 Etherscan[22]、BeaconChain.in[23] 和 Eth2Stats[24] 進行追蹤。Topaz 已經取得了一些令人印象深刻的裡程碑[25]:Topaz 確實有著一個很棒的前端[30],如果你不想要瞎折騰的話,Topaz 是一個不錯的選擇。階段0規範自上次更新以來沒有規範更新。
  • 通往以太坊2.0之路
    因此,在以太坊2.0的早期階段,ETH 的發行率將會更高,但最終會隨著時間的推移而趨向0-1%範圍。也就是說,在以太坊2.0的階段2 實現之後,當前的以太坊1.0鏈將被棄用,以太坊網絡的 ETH 發行率將計劃大幅下降至低於1%。
  • 以太坊2.0主網質押教學 (Ubuntu/Teku)
    來源 | someresat.medium.com作者 | Somer Esat本文基於ConsenSys的Teku客戶端,詳細講解如何參與以太坊2.0主網質押。本教程介紹了如何安全地將你的ETH存入存款合約。請牢記不要將ETH發送給任何人。本教程參考了網上的各種資料,感謝這些提供資料的貢獻者!感謝EthStaker管理團隊和提供教程的社區成員、Eth2 客戶端團隊、以及質押社區的幫助和校對。特別感謝Eth2 客戶端團隊和以太坊基金會的研究員。
  • 【以太坊Swarm測試挖礦超細化教程】
    wget https://github.com/ethersphere/bee/releases/download/v0.5.2/bee_0.5.2_amd64.rpm領取成功的話就可以運行了,但有時會領取不成功第二種:https://faucet.goerli.mudit.blog/以太坊測試幣領取地址
  • Reddit加入以太坊基金會開發擴容工具
    其目標是幫助加快擴展和開發在以太坊上推出大規模應用(例如社區積分)所需的技術。作者:Nikhilesh De   |   編譯者:Maya   |   來源:CoinDeskReddit正在擴大其在以太坊生態系統中的作用,目標是為區塊鏈網絡開發出擴容工具。這家社交媒體平臺周三宣布,它正在擴大與以太坊基金會的合作,為擴容工具提供開發資源。
  • 2個關鍵點讀懂從以太坊1.0到2.0的大遷徙
    自Vitalik在2019年12月提出一個早期以太坊1.0和以太坊2.0合併替代方案之後,研究人員一直在進行積極討論。以太坊1.0到以太坊2.0鏈遷移時候,有兩個重要的因素需要考慮。首先,現有ETH代幣遷移,其次;鏈狀態遷移。
  • 以太坊DeFi怎麼玩?以太坊DeFi挖礦攻略教程
    在以太坊的區塊鏈上,有很多成功的DAPP,像MakerDAO/DAI、Compound等,這些項目都是一些DeFi項目。有很多投資者還不知道以太坊DeFi怎麼玩?下面就讓濤叔為大家帶來以太坊DeFi挖礦攻略教程。
  • 以太坊開發乾貨拿走不謝|區塊鏈課堂
    在這裡「輕便」是指一個私人以太坊網絡能快速地創建塊的間隔。前提是要有一個準備好的,只用於做快速實驗和測試的私人測試床。簡單來說,就是一個完全由你掌控,並且能夠快速挖礦的私人以太坊網絡。當然了,交易上來說,以太坊私網不受保護且不能保證安全。但是因為這個網絡沒有投入真實的錢(除了實驗和測試的結果),所以不用擔心。當然了,它應該在正確配置的防火牆下運行。
  • 以太坊2.0上線eth2驗證器launchpad測試版
    前言:1、以太坊基金會宣布為以太坊2.0升級提供「驗證器launchpad」(測試版本)。2、用戶可以使用第三方服務成為驗證者,但這通常涉及費用,並且需要將您的加密內容委託給其他人。3、啟動板確保您了解成為驗證器需要什麼,然後它允許您在線上傳公鑰並成為驗證器。
  • 以太坊開發指南 #1
    在以太坊中,原生貨幣被稱為ether(以太幣),它是以太坊區塊鏈包含了帳戶餘額的唯一官方記錄。新的開發工具鏈新的去中心化技術棧催生了新的開發者工具。這些工具存在於許多程式語言中,但本文將從 Python 的角度來看。(重申一下:即使 Python 不是你的首選語言,跟上文章也不會有太大的問題。)
  • 以太坊 2.0 驗證者懶人包
    關於Eth2 信標鏈的創世信息,可以閱讀Ben Edgington 的文章《一文詳解信標鏈的創世》。此前Eth2存款合約發布之時,ECN已經整理了與Eth2 Staking相關的資料,匯總成文章:《以太坊2.0驗證者寶典》。
  • 以太坊2.0時代的大幕升起
    如果不出意外,以太坊向2.0時代進發的步伐將於北京時間2020年12月1日20:00:23正式開始。過去數月,DeFi的興起為以太坊生態提供了足夠堅實的應用價值支撐,但也讓以太坊的「天然缺陷」再次顯現:網絡過於擁堵、交易Gas費太高,很多普通用戶都在感嘆已經無法參與其中。可拓展性和交易效率等問題一直是當前的以太坊網絡被人詬病的地方。
  • 以太坊2.0? 親歷3天的Devcon我看到了這樣一個以太坊 | 見聞錄
    以太坊 2.0:沒有時間表的計劃以太坊的下一個上線版本叫君士坦丁堡,再下一個叫做寧靜,也就是大家常說的以太坊 2.0。註:從某種意義上講,區塊鏈軟體是永遠不會有 2.0 的。區塊鏈軟體必須在任何時候都能處理從第一個創世塊到現在的所有塊,不能有與 1.0 不兼容的 2.0 軟體。但是,以太坊的寧靜版有很大的改變,是對目前以太坊的硬分叉,所以也叫以太坊 2.0。