Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,937 changes: 998 additions & 939 deletions Cargo.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ resolver = "2"
rindexer = { path = "../core" }

# external dependencies
alloy = { version = "1.0.30", features = ["full"] }
alloy = { version = "1.0.37", features = ["full"] }
alloy-chains = "0.2.8"# pegged to version in "foundry-block-explorers"
foundry-block-explorers = "0.17.0"
clap = { version = "4.5.46", features = ["derive"] }
Expand Down
4 changes: 2 additions & 2 deletions cli/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ start_all:
start_graphql:
RUSTFLAGS='-C target-cpu=native' RUST_BACKTRACE='full' cargo run --release --features jemalloc -- start --path $(CURDIR)/../examples/rindexer_demo_cli graphql
playground_codegen_typings:
RUSTFLAGS='-C target-cpu=native' cargo run --release --features jemalloc -- codegen --path $(CURDIR)/../rindexer_rust_playground typings
RUSTFLAGS='-C target-cpu=native' cargo run --release --features jemalloc -- codegen --path $(CURDIR)/../examples/rindexer_rust_playground typings
playground_codegen_indexer:
RUSTFLAGS='-C target-cpu=native' cargo run --release --features jemalloc -- codegen --path $(CURDIR)/../rindexer_rust_playground indexer
RUSTFLAGS='-C target-cpu=native' cargo run --release --features jemalloc -- codegen --path $(CURDIR)/../examples/rindexer_rust_playground indexer
codegen_graphql:
RUSTFLAGS='-C target-cpu=native' cargo run --release --features jemalloc -- codegen --path $(CURDIR)/../examples/rindexer_demo_cli graphql --endpoint http://0.0.0.0:5005/graphql
add_contract:
Expand Down
9 changes: 4 additions & 5 deletions cli/src/commands/add.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,10 @@ pub async fn handle_add_contract_command(
let contract_address =
prompt_for_input(&format!("Enter {network} Contract Address"), None, None, None);

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 etherscan_api_key = manifest.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)
Expand Down
3 changes: 2 additions & 1 deletion cli/src/commands/new.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ use alloy::{
};
use rindexer::manifest::config::Config;
use rindexer::manifest::contract::ContractEvent;
use rindexer::manifest::global::Global;
#[cfg(feature = "reth")]
use rindexer::manifest::reth::RethConfig;
use rindexer::{
Expand Down Expand Up @@ -250,7 +251,7 @@ pub fn handle_new_command(
}],
native_transfers: NativeTransfers::default(),
phantom: None,
global: None,
global: Global::default(),
storage: Storage {
postgres: if postgres_enabled {
Some(PostgresDetails {
Expand Down
12 changes: 4 additions & 8 deletions cli/src/commands/phantom.rs
Original file line number Diff line number Diff line change
Expand Up @@ -286,14 +286,10 @@ 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()),
);
let etherscan_api_key = manifest.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,
Expand Down
6 changes: 1 addition & 5 deletions cli/src/commands/start.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ use rindexer::{
yaml::{read_manifest, YAML_CONFIG_NAME},
},
rindexer_error, rindexer_info, setup_info_logger, start_rindexer_no_code,
GraphqlOverrideSettings, HealthOverrideSettings, IndexerNoCodeDetails, PostgresClient,
StartNoCodeDetails,
GraphqlOverrideSettings, IndexerNoCodeDetails, PostgresClient, StartNoCodeDetails,
};

use crate::{
Expand Down Expand Up @@ -183,7 +182,6 @@ pub async fn start(
enabled: false,
override_port: None,
},
health_details: HealthOverrideSettings { override_port: None },
};

start_rindexer_no_code(details).await.map_err(|e| {
Expand All @@ -199,7 +197,6 @@ pub async fn start(
enabled: true,
override_port: port.as_ref().and_then(|port| port.parse().ok()),
},
health_details: HealthOverrideSettings { override_port: None },
};

start_rindexer_no_code(details).await.map_err(|e| {
Expand All @@ -215,7 +212,6 @@ pub async fn start(
enabled: true,
override_port: port.as_ref().and_then(|port| port.parse().ok()),
},
health_details: HealthOverrideSettings { override_port: None },
};

let _ = start_rindexer_no_code(details).await.map_err(|e| {
Expand Down
18 changes: 9 additions & 9 deletions core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ mockito = "1.7.0"

[dependencies]
# TODO: Trim down alloy features needed later, for now opt in to all.
alloy = { version = "1.0.30", features = ["full", "json-rpc"] }
alloy = { version = "1.0.37", features = ["full", "json-rpc"] }
async-trait = "0.1.89"
aws-config = "1.8.5"
aws-sdk-sns = "1.82.0"
Expand Down Expand Up @@ -62,7 +62,7 @@ tokio-postgres = { version = "0.7", features = [
] }
tokio-stream = "0.1.17"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = [
tracing-subscriber = { version = "=0.3.19", features = [
"env-filter",
"fmt",
"time",
Expand All @@ -83,15 +83,15 @@ axum = "0.7"
# build
jemallocator = { version = "0.6.0", package = "tikv-jemallocator", optional = true }
jemalloc-ctl = { version = "0.6.0", package = "tikv-jemalloc-ctl", optional = true }
foundry-compilers = "0.19.2"
alloy-chains = "0.2.8"
foundry-compilers = "0.19.4"
alloy-chains = "0.2.14"

# reth
reth = { git = "https://github.com/paradigmxyz/reth", tag = "v1.5.0", optional = true }
reth-exex = { git = "https://github.com/paradigmxyz/reth", tag = "v1.5.0", features = ["serde"], optional = true }
reth-node-api = { git = "https://github.com/paradigmxyz/reth", tag = "v1.5.0", optional = true }
reth-node-ethereum = { git = "https://github.com/paradigmxyz/reth", tag = "v1.5.0", optional = true }
reth-tracing = { git = "https://github.com/paradigmxyz/reth", tag = "v1.5.0", optional = true }
reth = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2", optional = true }
reth-exex = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2", features = ["serde"], optional = true }
reth-node-api = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2", optional = true }
reth-node-ethereum = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2", optional = true }
reth-tracing = { git = "https://github.com/paradigmxyz/reth", tag = "v1.8.2", optional = true }

[target.'cfg(not(windows))'.dependencies]
rdkafka = { version = "0.37.0", features = ["tokio"] }
Expand Down
14 changes: 6 additions & 8 deletions core/src/generator/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ use super::{
},
networks_bindings::generate_networks_code,
};
use crate::manifest::contract::Contract;
use crate::{
generator::{
database_bindings::generate_database_code,
Expand All @@ -30,7 +31,6 @@ use crate::{
manifest::{
contract::ParseAbiError,
core::Manifest,
global::Global,
network::Network,
storage::Storage,
yaml::{read_manifest, ReadManifestError, YAML_CONFIG_NAME},
Expand Down Expand Up @@ -68,15 +68,15 @@ pub enum WriteGlobalError {

fn write_global(
output: &Path,
global: &Global,
global_contracts: &[Contract],
networks: &[Network],
) -> Result<(), WriteGlobalError> {
let global_contract_file_path = generate_file_location(output, "global_contracts");
if global_contract_file_path.exists() {
fs::remove_file(&global_contract_file_path)?;
}

let context_code = generate_context_code(&global.contracts, networks);
let context_code = generate_context_code(global_contracts, networks);
write_file(&global_contract_file_path, context_code.as_str())?;

Ok(())
Expand Down Expand Up @@ -138,7 +138,6 @@ fn write_indexer_events(
use alloy::sol;

sol!(
#[derive(Debug)]
#[sol(rpc, all_derives)]
{contract_name},
r#"{contract_path}"#
Expand Down Expand Up @@ -188,7 +187,6 @@ fn write_indexer_events(
use alloy::sol;

sol!(
#[derive(Debug)]
#[sol(rpc, all_derives)]
{abigen_contract_name},
r#"{abi_string}"#
Expand Down Expand Up @@ -247,8 +245,8 @@ pub fn generate_rindexer_typings(

write_networks(&output, &manifest.networks)?;

if let Some(global) = &manifest.global {
write_global(&output, global, &manifest.networks)?;
if let Some(global_contracts) = &manifest.global.contracts {
write_global(&output, global_contracts, &manifest.networks)?;
}

if manifest.storage.postgres_enabled() {
Expand Down Expand Up @@ -497,7 +495,7 @@ edition = "2021"
[dependencies]
rindexer = {{ git = "https://github.com/joshstevens19/rindexer", branch = "master" {reth_dep}}}
tokio = {{ version = "1", features = ["full"] }}
alloy = {{ version = "1.0.30", features = ["full"] }}
alloy = {{ version = "1.0.37", features = ["full"] }}
serde = {{ version = "1.0", features = ["derive"] }}
"#,
project_name = manifest.name,
Expand Down
12 changes: 3 additions & 9 deletions core/src/generator/context_bindings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ fn generate_contract_code(
let code = format!(
r#"
sol!(
#[derive(Debug)]
#[sol(rpc, all_derives)]
{contract_name}{network_suffix},
"{contract_path}"
Expand Down Expand Up @@ -52,7 +51,6 @@ fn generate_contract_code(
let code = format!(
r#"
sol!(
#[derive(Debug)]
#[sol(rpc, all_derives)]
{contract_name}{network_suffix},
"{contract_path}"
Expand Down Expand Up @@ -84,7 +82,7 @@ fn generate_contracts_code(contracts: &[Contract], networks: &[Network]) -> Code
///
/// This file was auto generated by rindexer - https://github.com/joshstevens19/rindexer.
/// Any manual changes to this file will be overwritten.

use super::networks::{{{}}};
use std::sync::Arc;
use alloy::network::AnyNetwork;
Expand Down Expand Up @@ -119,10 +117,6 @@ fn generate_contracts_code(contracts: &[Contract], networks: &[Network]) -> Code
output
}

pub fn generate_context_code(contracts: &Option<Vec<Contract>>, networks: &[Network]) -> Code {
if let Some(contracts) = contracts {
generate_contracts_code(contracts, networks)
} else {
Code::blank()
}
pub fn generate_context_code(contracts: &[Contract], networks: &[Network]) -> Code {
generate_contracts_code(contracts, networks)
}
83 changes: 11 additions & 72 deletions core/src/indexer/dependency.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,84 +230,23 @@ impl DependencyStatus {
impl ContractEventDependencies {
pub fn parse(manifest: &Manifest) -> Vec<ContractEventDependencies> {
let mut dependencies: Vec<ContractEventDependencies> = vec![];
for contract in &manifest.contracts {
for contract in &manifest.all_contracts() {
let contract_dependencies_tree = contract
.dependency_events
.clone()
.map(|dependency| contract.convert_dependency_event_tree_yaml(dependency));

let factories =
contract.details.iter().filter_map(|d| d.factory.clone()).collect::<Vec<_>>();
let factory_dependency = factories.first().cloned();

match factory_dependency {
// When factory filter is set we rewrite dependency settings to put factory event first
Some(factory) => {
if !factories.iter().all(|f| {
f.name == factory.name
&& f.event_name == factory.event_name
&& f.input_name == factory.input_name
}) {
panic!("Contract using factory filter must use same factory across all networks. Please raise issue in github if you need different factories across networks");
}
if let Some(dependency_event_tree) = contract_dependencies_tree {
let dependency_tree =
EventsDependencyTree::from_dependency_event_tree(&dependency_event_tree);

let dependency_event_tree = contract_dependencies_tree.unwrap_or_else(|| {
let events = contract
.include_events
.as_ref()
.expect("Contract using factory filter must specify `include_events`.");

let dependency_event_tree = DependencyEventTree {
contract_events: events
.iter()
.map(|event| ContractEventMapping {
contract_name: contract.name.clone(),
event_name: event.name.clone(),
})
.collect(),
then: None,
};

dependency_event_tree
});

let factory_dependency_event_tree = DependencyEventTree {
contract_events: vec![ContractEventMapping {
contract_name: factory.name,
event_name: factory.event_name,
}],
then: Some(Box::from(dependency_event_tree)),
};

let factory_dependency_tree = EventsDependencyTree::from_dependency_event_tree(
&factory_dependency_event_tree,
);

dependencies.push(ContractEventDependencies {
contract_name: contract.name.clone(),
event_dependencies: EventDependencies {
tree: Arc::new(factory_dependency_tree),
dependency_events: factory_dependency_event_tree
.collect_dependency_events(),
},
});
}
None => {
if let Some(dependency_event_tree) = contract_dependencies_tree {
let dependency_tree = EventsDependencyTree::from_dependency_event_tree(
&dependency_event_tree,
);

dependencies.push(ContractEventDependencies {
contract_name: contract.name.clone(),
event_dependencies: EventDependencies {
tree: Arc::new(dependency_tree),
dependency_events: dependency_event_tree
.collect_dependency_events(),
},
});
}
}
dependencies.push(ContractEventDependencies {
contract_name: contract.name.clone(),
event_dependencies: EventDependencies {
tree: Arc::new(dependency_tree),
dependency_events: dependency_event_tree.collect_dependency_events(),
},
});
}
}

Expand Down
10 changes: 6 additions & 4 deletions core/src/indexer/fetch_logs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -488,17 +488,19 @@ async fn live_indexing_stream(
let from_block = current_filter.from_block();
if from_block > safe_block_number {
if reorg_safe_distance.is_zero() {
info!(
"{}::{} - RPC has gone back on latest block: rpc returned {}, last seen: {}",
error!(
"{}::{} - {} - LIVE INDEXING STEAM - RPC has gone back on latest block: rpc returned {}, last seen: {}",
info_log_name,
network,
IndexingEventProgressStatus::Live.log(),
latest_block_number,
from_block
);
} else {
info!(
"{} - {} - not in safe reorg block range yet block: {} > range: {}",
"{}::{} - {} - LIVE INDEXING STEAM - not in safe reorg block range yet block: {} > range: {}",
info_log_name,
network,
IndexingEventProgressStatus::Live.log(),
from_block,
safe_block_number
Expand Down Expand Up @@ -698,7 +700,7 @@ async fn live_indexing_stream(
}
Err(e) => {
error!(
"Error getting latest block, will try again in 1 seconds - err: {}",
"Error getting latest block, will try again in 1 second - err: {}",
e.to_string()
);
tokio::time::sleep(Duration::from_secs(1)).await;
Expand Down
2 changes: 0 additions & 2 deletions core/src/indexer/no_code.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,6 @@ pub async fn setup_no_code(
manifest_path: details.manifest_path,
indexing_details: None,
graphql_details: details.graphql_details,
health_details: details.health_details,
});
}

Expand Down Expand Up @@ -152,7 +151,6 @@ pub async fn setup_no_code(
manifest_path: details.manifest_path,
indexing_details: Some(IndexingDetails { registry, trace_registry }),
graphql_details: details.graphql_details,
health_details: details.health_details,
})
}
None => Err(SetupNoCodeError::NoProjectPathFoundUsingParentOfManifestPath),
Expand Down
Loading