mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-03 00:31:50 +00:00
Integrate Witti testnet (#1193)
* Update for latest master * Shift delay inside loop * Clean up genesis service * Tidy * Tidy logs * Address Michael's comments * Add pre-genesis logging * Remove est time till genesis * Fix time formatting * Tidy * Update docs for Witti * Update JS for Witti * Ensure deposit data is 0x-prefixed hex * Hard code witti testnet dir * Add --auto-register warning * Integrate local sigp testnet source * Reword warning
This commit is contained in:
1
common/eth2_testnet_config/.gitignore
vendored
1
common/eth2_testnet_config/.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
testnet*
|
||||
schlesi-*
|
||||
witti-*
|
||||
|
||||
@@ -6,7 +6,7 @@ use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::path::PathBuf;
|
||||
|
||||
const TESTNET_ID: &str = "schlesi-v0-11";
|
||||
const TESTNET_ID: &str = "witti-v0-11-3";
|
||||
|
||||
fn main() {
|
||||
if !base_dir().exists() {
|
||||
@@ -38,7 +38,7 @@ pub fn get_all_files() -> Result<(), String> {
|
||||
|
||||
pub fn get_file(filename: &str) -> Result<(), String> {
|
||||
let url = format!(
|
||||
"https://raw.githubusercontent.com/goerli/schlesi/839866fe29a1b4df3a87bfe2ff1257c8a58671c9/light/{}",
|
||||
"https://raw.githubusercontent.com/sigp/witti/6d079b0f10f6bed75cd003e5f0ea5ecbe2044455/lighthouse/{}",
|
||||
filename
|
||||
);
|
||||
|
||||
|
||||
@@ -20,14 +20,14 @@ pub const BOOT_ENR_FILE: &str = "boot_enr.yaml";
|
||||
pub const GENESIS_STATE_FILE: &str = "genesis.ssz";
|
||||
pub const YAML_CONFIG_FILE: &str = "config.yaml";
|
||||
|
||||
pub const HARDCODED_TESTNET: &str = "schlesi-v0-11";
|
||||
pub const HARDCODED_TESTNET: &str = "witti-v0-11-3";
|
||||
|
||||
pub const HARDCODED_YAML_CONFIG: &[u8] = include_bytes!("../schlesi-v0-11/config.yaml");
|
||||
pub const HARDCODED_DEPLOY_BLOCK: &[u8] = include_bytes!("../schlesi-v0-11/deploy_block.txt");
|
||||
pub const HARDCODED_YAML_CONFIG: &[u8] = include_bytes!("../witti-v0-11-3/config.yaml");
|
||||
pub const HARDCODED_DEPLOY_BLOCK: &[u8] = include_bytes!("../witti-v0-11-3/deploy_block.txt");
|
||||
pub const HARDCODED_DEPOSIT_CONTRACT: &[u8] =
|
||||
include_bytes!("../schlesi-v0-11/deposit_contract.txt");
|
||||
pub const HARDCODED_GENESIS_STATE: &[u8] = include_bytes!("../schlesi-v0-11/genesis.ssz");
|
||||
pub const HARDCODED_BOOT_ENR: &[u8] = include_bytes!("../schlesi-v0-11/boot_enr.yaml");
|
||||
include_bytes!("../witti-v0-11-3/deposit_contract.txt");
|
||||
pub const HARDCODED_GENESIS_STATE: &[u8] = include_bytes!("../witti-v0-11-3/genesis.ssz");
|
||||
pub const HARDCODED_BOOT_ENR: &[u8] = include_bytes!("../witti-v0-11-3/boot_enr.yaml");
|
||||
|
||||
/// Specifies an Eth2 testnet.
|
||||
///
|
||||
|
||||
@@ -19,6 +19,7 @@ rand = "0.7.2"
|
||||
deposit_contract = { path = "../deposit_contract" }
|
||||
rayon = "1.3.0"
|
||||
tree_hash = { path = "../../consensus/tree_hash" }
|
||||
hex = "0.4.2"
|
||||
|
||||
[dev-dependencies]
|
||||
tempfile = "3.1.0"
|
||||
|
||||
@@ -175,13 +175,14 @@ impl<'a> Builder<'a> {
|
||||
if path.exists() {
|
||||
return Err(Error::DepositDataAlreadyExists(path));
|
||||
} else {
|
||||
let hex = format!("0x{}", hex::encode(&deposit_data));
|
||||
OpenOptions::new()
|
||||
.write(true)
|
||||
.read(true)
|
||||
.create(true)
|
||||
.open(path.clone())
|
||||
.map_err(Error::UnableToSaveDepositData)?
|
||||
.write_all(&deposit_data)
|
||||
.write_all(hex.as_bytes())
|
||||
.map_err(Error::UnableToSaveDepositData)?
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,9 @@ pub enum Error {
|
||||
UnableToReadPassword(PathBuf),
|
||||
UnableToDecryptKeypair(KeystoreError),
|
||||
UnableToReadDepositData(io::Error),
|
||||
DepositDataMissing0xPrefix,
|
||||
DepositDataNotUtf8,
|
||||
DepositDataInvalidHex(hex::FromHexError),
|
||||
DepositAmountDoesNotExist(PathBuf),
|
||||
UnableToReadDepositAmount(io::Error),
|
||||
UnableToParseDepositAmount(std::num::ParseIntError),
|
||||
@@ -160,7 +163,16 @@ impl ValidatorDir {
|
||||
if !path.exists() {
|
||||
return Ok(None);
|
||||
}
|
||||
let deposit_data_rlp = read(path).map_err(Error::UnableToReadDepositData)?;
|
||||
let deposit_data_rlp = read(path)
|
||||
.map_err(Error::UnableToReadDepositData)
|
||||
.and_then(|hex_bytes| {
|
||||
let hex = std::str::from_utf8(&hex_bytes).map_err(|_| Error::DepositDataNotUtf8)?;
|
||||
if hex.starts_with("0x") {
|
||||
hex::decode(&hex[2..]).map_err(Error::DepositDataInvalidHex)
|
||||
} else {
|
||||
Err(Error::DepositDataMissing0xPrefix)
|
||||
}
|
||||
})?;
|
||||
|
||||
// Read and parse `ETH1_DEPOSIT_AMOUNT_FILE`.
|
||||
let path = self.dir.join(ETH1_DEPOSIT_AMOUNT_FILE);
|
||||
|
||||
@@ -6,7 +6,7 @@ use std::path::Path;
|
||||
use tempfile::{tempdir, TempDir};
|
||||
use types::{test_utils::generate_deterministic_keypair, EthSpec, Keypair, MainnetEthSpec};
|
||||
use validator_dir::{
|
||||
Builder, ValidatorDir, ETH1_DEPOSIT_TX_HASH_FILE, VOTING_KEYSTORE_FILE,
|
||||
Builder, ValidatorDir, ETH1_DEPOSIT_DATA_FILE, ETH1_DEPOSIT_TX_HASH_FILE, VOTING_KEYSTORE_FILE,
|
||||
WITHDRAWAL_KEYSTORE_FILE,
|
||||
};
|
||||
|
||||
@@ -145,6 +145,13 @@ impl Harness {
|
||||
|
||||
// Ensure the amount is consistent.
|
||||
assert_eq!(data.deposit_data.amount, amount);
|
||||
|
||||
// Check that the eth1 deposit data file is a valid format.
|
||||
let hex =
|
||||
String::from_utf8(fs::read(validator.dir().join(ETH1_DEPOSIT_DATA_FILE)).unwrap())
|
||||
.unwrap();
|
||||
assert!(hex.starts_with("0x"), "deposit data should have 0x prefix");
|
||||
hex::decode(&hex[2..]).unwrap();
|
||||
} else {
|
||||
// If there was no deposit then we should return `Ok(None)`.
|
||||
assert!(validator.eth1_deposit_data().unwrap().is_none());
|
||||
|
||||
Reference in New Issue
Block a user