From 82a1ccb2a474f520af69b255dabf288c4ec6fff4 Mon Sep 17 00:00:00 2001 From: Josh Stevens Date: Fri, 26 Jul 2024 13:22:34 +0100 Subject: [PATCH] fix: some regressions --- cli/src/commands/add.rs | 16 ++++++------- cli/src/commands/phantom.rs | 23 ++++++++++++++----- cli/src/rindexer_yaml.rs | 3 +-- core/src/manifest/yaml.rs | 18 +++++++++++++++ core/src/phantom/dyrpc.rs | 5 ++-- .../pages/docs/start-building/phantom.mdx | 3 ++- examples/rindexer_demo_cli/rindexer.yaml | 4 ++-- 7 files changed, 50 insertions(+), 22 deletions(-) diff --git a/cli/src/commands/add.rs b/cli/src/commands/add.rs index 3a4ae218..a300f352 100644 --- a/cli/src/commands/add.rs +++ b/cli/src/commands/add.rs @@ -8,9 +8,9 @@ use ethers_etherscan::Client; use rindexer::{ manifest::{ contract::{Contract, ContractDetails}, - yaml::{read_manifest, write_manifest, YAML_CONFIG_NAME}, + yaml::{read_manifest_raw, write_manifest, YAML_CONFIG_NAME}, }, - write_file, + public_read_env_value, write_file, }; use crate::{ @@ -28,7 +28,7 @@ pub async fn handle_add_contract_command( let rindexer_yaml_path = project_path.join(YAML_CONFIG_NAME); - let mut manifest = read_manifest(&rindexer_yaml_path).inspect_err(|e| { + let mut manifest = read_manifest_raw(&rindexer_yaml_path).inspect_err(|e| { print_error_message(&format!("Could not read the rindexer.yaml file: {}", e)) })?; @@ -66,11 +66,11 @@ pub async fn handle_add_contract_command( let contract_address = prompt_for_input(&format!("Enter {} Contract Address", network), None, None, None); - let etherscan_api_key = manifest - .global - .as_ref() - .and_then(|global| global.etherscan_api_key.as_ref()) - .map_or(BACKUP_ETHERSCAN_API_KEY, String::as_str); + let etherscan_api_key = + manifest.global.as_ref().and_then(|global| global.etherscan_api_key.as_ref()).map_or_else( + || BACKUP_ETHERSCAN_API_KEY.to_string(), + |key| public_read_env_value(key).unwrap_or_else(|_| key.to_string()), + ); let client = Client::builder() .with_api_key(etherscan_api_key) diff --git a/cli/src/commands/phantom.rs b/cli/src/commands/phantom.rs index 6727fdf4..0dc80609 100644 --- a/cli/src/commands/phantom.rs +++ b/cli/src/commands/phantom.rs @@ -13,14 +13,14 @@ use rindexer::{ manifest::{ network::Network, phantom::{Phantom, PhantomDyrpc, PhantomShadow}, - yaml::{read_manifest, write_manifest, YAML_CONFIG_NAME}, + yaml::{read_manifest, read_manifest_raw, write_manifest, YAML_CONFIG_NAME}, }, phantom::{ common::{read_compiled_contract, read_contract_clone_metadata}, create_dyrpc_api_key, deploy_dyrpc_contract, shadow::deploy_shadow_contract, }, - write_file, + public_read_env_value, write_file, }; use crate::{ @@ -97,7 +97,7 @@ async fn handle_phantom_init(project_path: &Path) -> Result<(), Box> let env_file = project_path.join(".env"); let rindexer_yaml_path = project_path.join(YAML_CONFIG_NAME); - let mut manifest = read_manifest(&rindexer_yaml_path).inspect_err(|e| { + let mut manifest = read_manifest_raw(&rindexer_yaml_path).inspect_err(|e| { print_error_message(&format!("Could not read the rindexer.yaml file: {}", e)) })?; @@ -197,6 +197,7 @@ fn forge_clone_contract( network: &Network, address: &Address, contract_name: &str, + etherscan_api_key: &str, ) -> Result<(), Box> { print_success_message(&format!( "Cloning contract {} on network {} at address {:?} this may take a little moment...", @@ -208,7 +209,7 @@ fn forge_clone_contract( .arg(format!("{:?}", address)) //.arg(format!("--chain {}", network.chain_id)) .arg("--etherscan-api-key") - .arg(BACKUP_ETHERSCAN_API_KEY) + .arg(etherscan_api_key) .arg(contract_name) .current_dir(clone_in) .output()?; @@ -284,11 +285,21 @@ fn handle_phantom_clone(project_path: &Path, args: &PhantomBaseArgs) -> Result<( fs::create_dir(&clone_in)?; } + let etherscan_api_key = manifest + .global + .as_ref() + .and_then(|global| global.etherscan_api_key.as_ref()) + .map_or_else( + || BACKUP_ETHERSCAN_API_KEY.to_string(), + |key| public_read_env_value(key).unwrap_or_else(|_| key.to_string()), + ); + forge_clone_contract( &clone_in, network.unwrap(), address, contract.name.as_str(), + ðerscan_api_key, ) .map_err(|e| format!("Failed to clone contract: {}", e))?; @@ -436,7 +447,7 @@ async fn handle_phantom_deploy( ) -> Result<(), Box> { let rindexer_yaml_path = project_path.join(YAML_CONFIG_NAME); - let mut manifest = read_manifest(&rindexer_yaml_path).inspect_err(|e| { + let mut manifest = read_manifest_raw(&rindexer_yaml_path).inspect_err(|e| { print_error_message(&format!("Could not read the rindexer.yaml file: {}", e)) })?; @@ -532,7 +543,7 @@ async fn handle_phantom_deploy( rpc: rpc_url.to_string(), compute_units_per_second: None, max_block_range: if phantom.dyrpc_enabled() { - Some(U64::from(100_000)) + Some(U64::from(20_000)) } else { Some(U64::from(2_000)) }, diff --git a/cli/src/rindexer_yaml.rs b/cli/src/rindexer_yaml.rs index 040bcc32..2ee2a2d8 100644 --- a/cli/src/rindexer_yaml.rs +++ b/cli/src/rindexer_yaml.rs @@ -1,5 +1,4 @@ -use std::fs; -use std::path::Path; +use std::{fs, path::Path}; use rindexer::manifest::yaml::YAML_CONFIG_NAME; diff --git a/core/src/manifest/yaml.rs b/core/src/manifest/yaml.rs index 8555d549..0e9ccefb 100644 --- a/core/src/manifest/yaml.rs +++ b/core/src/manifest/yaml.rs @@ -170,6 +170,24 @@ pub enum ReadManifestError { NoProjectPathFoundUsingParentOfManifestPath, } +pub fn read_manifest_raw(file_path: &PathBuf) -> Result { + let mut file = File::open(file_path)?; + let mut contents = String::new(); + + file.read_to_string(&mut contents)?; + + let manifest: Manifest = serde_yaml::from_str(&contents)?; + + let project_path = file_path.parent(); + match project_path { + None => Err(ReadManifestError::NoProjectPathFoundUsingParentOfManifestPath), + Some(project_path) => { + validate_manifest(project_path, &manifest)?; + Ok(manifest) + } + } +} + pub fn read_manifest(file_path: &PathBuf) -> Result { let mut file = File::open(file_path)?; let mut contents = String::new(); diff --git a/core/src/phantom/dyrpc.rs b/core/src/phantom/dyrpc.rs index d9fdfbaa..1e5333a9 100644 --- a/core/src/phantom/dyrpc.rs +++ b/core/src/phantom/dyrpc.rs @@ -29,7 +29,6 @@ pub struct DeployDyrpcContractResponse { // pub overlay_hash: String, // // pub addresses: Vec, - #[serde(rename = "overlayRpcUrl")] pub rpc_url: String, } @@ -80,9 +79,9 @@ pub async fn deploy_dyrpc_contract( let re = Regex::new(r"/eth/([a-fA-F0-9]{64})/").unwrap(); let rpc_url = re - .replace(&result.rpc_url, "/eth/{RINDEXER_PHANTOM_API_ENV_KEY}/") + .replace(&result.rpc_url, "/eth/{RINDEXER_PHANTOM_API_KEY}/") .to_string() - .replace("{RINDEXER_PHANTOM_API_ENV_KEY}", "${RINDEXER_PHANTOM_API_ENV_KEY}"); + .replace("{RINDEXER_PHANTOM_API_KEY}", "${RINDEXER_PHANTOM_API_KEY}"); Ok(rpc_url) } diff --git a/documentation/docs/pages/docs/start-building/phantom.mdx b/documentation/docs/pages/docs/start-building/phantom.mdx index caf6a08e..e2b74539 100644 --- a/documentation/docs/pages/docs/start-building/phantom.mdx +++ b/documentation/docs/pages/docs/start-building/phantom.mdx @@ -81,7 +81,8 @@ rindexer phantom init - API key (generate on the dyRPC portal or use "new" to generate a new one) You will be asked to pick your provider and add your API key. It will save the API key -int the `.env` file in your project directory. It will also add your phantom provider to the `rindexer.yaml` file. +int the `.env` file under `RINDEXER_PHANTOM_API_KEY` in your project directory. +It will also add your phantom provider to the `rindexer.yaml` file. ## Clone diff --git a/examples/rindexer_demo_cli/rindexer.yaml b/examples/rindexer_demo_cli/rindexer.yaml index cf52f7e1..30c13d69 100644 --- a/examples/rindexer_demo_cli/rindexer.yaml +++ b/examples/rindexer_demo_cli/rindexer.yaml @@ -14,9 +14,9 @@ contracts: - name: RocketPoolETH details: - network: ethereum - address: "0xae78736cd615f374d3085123a210448e74fc6393" + address: 0xae78736cd615f374d3085123a210448e74fc6393 start_block: '18600000' end_block: '18718056' - abi: ./abis/RocketTokenRETH.abi.json + abi: ./abis/phantom_ethereum_RocketPoolETH.abi.json include_events: - Transfer