mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-08 01:05:47 +00:00
Update to use v0.9.2 version of deposit contract
This commit is contained in:
@@ -3,21 +3,23 @@
|
||||
//!
|
||||
//! These files are required for some `include_bytes` calls used in this crate.
|
||||
|
||||
use reqwest::Response;
|
||||
use serde_json::Value;
|
||||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::path::PathBuf;
|
||||
|
||||
const GITHUB_RAW: &str = "https://raw.githubusercontent.com";
|
||||
const SPEC_REPO: &str = "ethereum/eth2.0-specs";
|
||||
const SPEC_TAG: &str = "v0.8.3";
|
||||
const ABI_FILE: &str = "validator_registration.json";
|
||||
const BYTECODE_FILE: &str = "validator_registration.bytecode";
|
||||
const TAG: &str = "v0.9.2";
|
||||
|
||||
fn spec_url() -> String {
|
||||
format!("https://raw.githubusercontent.com/ethereum/eth2.0-specs/{}/deposit_contract/contracts/validator_registration.json", TAG)
|
||||
}
|
||||
fn testnet_url() -> String {
|
||||
format!("https://raw.githubusercontent.com/sigp/unsafe-eth2-deposit-contract/{}/unsafe_validator_registration.json", TAG)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
match init_deposit_contract_abi() {
|
||||
match get_all_contracts() {
|
||||
Ok(()) => (),
|
||||
Err(e) => panic!(e),
|
||||
}
|
||||
@@ -25,14 +27,33 @@ fn main() {
|
||||
|
||||
/// Attempts to download the deposit contract ABI from github if a local copy is not already
|
||||
/// present.
|
||||
pub fn init_deposit_contract_abi() -> Result<(), String> {
|
||||
let abi_file = abi_dir().join(format!("{}_{}", SPEC_TAG, ABI_FILE));
|
||||
let bytecode_file = abi_dir().join(format!("{}_{}", SPEC_TAG, BYTECODE_FILE));
|
||||
pub fn get_all_contracts() -> Result<(), String> {
|
||||
download_deposit_contract(
|
||||
&spec_url(),
|
||||
"validator_registration.json",
|
||||
"validator_registration.bytecode",
|
||||
)?;
|
||||
download_deposit_contract(
|
||||
&testnet_url(),
|
||||
"testnet_validator_registration.json",
|
||||
"testnet_validator_registration.bytecode",
|
||||
)
|
||||
}
|
||||
|
||||
/// Attempts to download the deposit contract ABI from github if a local copy is not already
|
||||
/// present.
|
||||
pub fn download_deposit_contract(
|
||||
url: &str,
|
||||
abi_file: &str,
|
||||
bytecode_file: &str,
|
||||
) -> Result<(), String> {
|
||||
let abi_file = abi_dir().join(format!("{}_{}", TAG, abi_file));
|
||||
let bytecode_file = abi_dir().join(format!("{}_{}", TAG, bytecode_file));
|
||||
|
||||
if abi_file.exists() {
|
||||
// Nothing to do.
|
||||
} else {
|
||||
match download_abi() {
|
||||
match reqwest::get(url) {
|
||||
Ok(mut response) => {
|
||||
let mut abi_file = File::create(abi_file)
|
||||
.map_err(|e| format!("Failed to create local abi file: {:?}", e))?;
|
||||
@@ -71,22 +92,13 @@ pub fn init_deposit_contract_abi() -> Result<(), String> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Attempts to download the deposit contract file from the Ethereum github.
|
||||
fn download_abi() -> Result<Response, String> {
|
||||
reqwest::get(&format!(
|
||||
"{}/{}/{}/deposit_contract/contracts/{}",
|
||||
GITHUB_RAW, SPEC_REPO, SPEC_TAG, ABI_FILE
|
||||
))
|
||||
.map_err(|e| format!("Failed to download deposit ABI from github: {:?}", e))
|
||||
}
|
||||
|
||||
/// Returns the directory that will be used to store the deposit contract ABI.
|
||||
fn abi_dir() -> PathBuf {
|
||||
let base = env::var("CARGO_MANIFEST_DIR")
|
||||
.expect("should know manifest dir")
|
||||
.parse::<PathBuf>()
|
||||
.expect("should parse manifest dir as path")
|
||||
.join("contract");
|
||||
.join("contracts");
|
||||
|
||||
std::fs::create_dir_all(base.clone())
|
||||
.expect("should be able to create abi directory in manifest");
|
||||
|
||||
Reference in New Issue
Block a user