diff --git a/Cargo.lock b/Cargo.lock index 2d58efdd..b84f4e40 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13322,6 +13322,7 @@ dependencies = [ "thiserror 1.0.63", "tokio", "tokio-util", + "torii-processors", "torii-sqlite", "tracing", ] @@ -13406,6 +13407,27 @@ dependencies = [ "torii-sqlite", ] +[[package]] +name = "torii-processors" +version = "1.2.3" +dependencies = [ + "anyhow", + "async-trait", + "base64 0.21.7", + "cainome", + "cainome-cairo-serde", + "dojo-types 1.4.1", + "dojo-world 1.4.1", + "futures-util", + "lazy_static", + "serde_json", + "starknet 0.12.0", + "starknet-crypto 0.7.4", + "tokio", + "torii-sqlite", + "tracing", +] + [[package]] name = "torii-proto" version = "1.2.3" diff --git a/Cargo.toml b/Cargo.toml index 644be62f..a179c50d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,6 +55,7 @@ torii-sqlite = { path = "crates/sqlite/sqlite" } torii-sqlite-types = { path = "crates/sqlite/types" } torii-typed-data = { path = "crates/typed-data" } torii-mcp = { path = "crates/mcp" } +torii-processors = { path = "crates/processors" } torii-grpc-client = { path = "crates/grpc/client" } torii-grpc-server = { path = "crates/grpc/server" } torii-adigraphmap = { path = "crates/adigraphmap" } diff --git a/crates/indexer/Cargo.toml b/crates/indexer/Cargo.toml index 671f6e90..0e4c20f7 100644 --- a/crates/indexer/Cargo.toml +++ b/crates/indexer/Cargo.toml @@ -41,6 +41,7 @@ tokio-util.workspace = true tracing.workspace = true torii-sqlite.workspace = true lazy_static.workspace = true +torii-processors.workspace = true [dev-dependencies] dojo-test-utils.workspace = true diff --git a/crates/indexer/src/engine.rs b/crates/indexer/src/engine.rs index a3f9b2e7..f976c0b4 100644 --- a/crates/indexer/src/engine.rs +++ b/crates/indexer/src/engine.rs @@ -17,141 +17,20 @@ use starknet::core::types::{ MaybePendingBlockWithReceipts, MaybePendingBlockWithTxHashes, PendingBlockWithReceipts, ResultPageRequest, Transaction, TransactionReceipt, TransactionWithReceipt, }; -use starknet::core::utils::get_selector_from_name; use starknet::providers::{Provider, ProviderRequestData, ProviderResponseData}; use starknet_crypto::Felt; use tokio::sync::broadcast::Sender; use tokio::time::{sleep, Instant}; +use torii_processors::processors::Processors; +use torii_processors::EventProcessorConfig; use torii_sqlite::cache::ContractClassCache; use torii_sqlite::types::{Contract, ContractType}; use torii_sqlite::{Cursors, Sql}; use tracing::{debug, error, info, trace, warn}; use crate::constants::LOG_TARGET; -use crate::processors::controller::ControllerProcessor; -use crate::processors::erc1155_transfer_batch::Erc1155TransferBatchProcessor; -use crate::processors::erc1155_transfer_single::Erc1155TransferSingleProcessor; -use crate::processors::erc20_legacy_transfer::Erc20LegacyTransferProcessor; -use crate::processors::erc20_transfer::Erc20TransferProcessor; -use crate::processors::erc4906_batch_metadata_update::Erc4906BatchMetadataUpdateProcessor; -use crate::processors::erc4906_metadata_update::Erc4906MetadataUpdateProcessor; -use crate::processors::erc721_legacy_transfer::Erc721LegacyTransferProcessor; -use crate::processors::erc721_transfer::Erc721TransferProcessor; -use crate::processors::event_message::EventMessageProcessor; -use crate::processors::metadata_update::MetadataUpdateProcessor; -use crate::processors::raw_event::RawEventProcessor; -use crate::processors::register_event::RegisterEventProcessor; -use crate::processors::register_model::RegisterModelProcessor; -use crate::processors::store_del_record::StoreDelRecordProcessor; -use crate::processors::store_set_record::StoreSetRecordProcessor; -use crate::processors::store_transaction::StoreTransactionProcessor; -use crate::processors::store_update_member::StoreUpdateMemberProcessor; -use crate::processors::store_update_record::StoreUpdateRecordProcessor; -use crate::processors::upgrade_event::UpgradeEventProcessor; -use crate::processors::upgrade_model::UpgradeModelProcessor; -use crate::processors::{ - BlockProcessor, EventProcessor, EventProcessorConfig, TransactionProcessor, -}; -use crate::task_manager::{self, ParallelizedEvent, TaskManager}; - -type EventProcessorMap
= HashMap {
- fn default() -> Self {
- Self {
- block: vec![],
- transaction: vec![Box::new(StoreTransactionProcessor)],
- // We shouldn't have a catch all for now since the world doesn't forward raw events
- // anymore.
- catch_all_event: Box::new(RawEventProcessor) as Box {
- pub fn initialize_event_processors() -> HashMap {
let event_key = event.keys[0];
- let processors = self.processors.get_event_processor(contract_type);
+ let processors = self.processors.get_event_processors(contract_type);
let Some(processors) = processors.get(&event_key) else {
// if we dont have a processor for this event, we try the catch all processor
if self.processors.catch_all_event.validate(event) {
@@ -984,7 +863,7 @@ impl {
(processor.task_priority(), processor.task_identifier(event));
// if our event can be parallelized, we add it to the task manager
- if task_identifier != task_manager::TASK_ID_SEQUENTIAL {
+ if task_identifier != torii_processors::task_manager::TASK_ID_SEQUENTIAL {
self.task_manager.add_parallelized_event(
task_priority,
task_identifier,
diff --git a/crates/indexer/src/lib.rs b/crates/indexer/src/lib.rs
index dcb8787a..7939176d 100644
--- a/crates/indexer/src/lib.rs
+++ b/crates/indexer/src/lib.rs
@@ -5,7 +5,4 @@ mod constants;
mod test;
pub mod engine;
-pub mod processors;
-mod task_manager;
-
pub use engine::Engine;
diff --git a/crates/indexer/src/test.rs b/crates/indexer/src/test.rs
index 3f29baf8..310f1180 100644
--- a/crates/indexer/src/test.rs
+++ b/crates/indexer/src/test.rs
@@ -27,7 +27,8 @@ use torii_sqlite::types::{Contract, ContractType, Token};
use torii_sqlite::utils::u256_to_sql_string;
use torii_sqlite::Sql;
-use crate::engine::{Engine, EngineConfig, Processors};
+use crate::engine::{Engine, EngineConfig};
+use torii_processors::processors::Processors;
pub async fn bootstrap_engine (
world: WorldContractReader ,
diff --git a/crates/processors/Cargo.toml b/crates/processors/Cargo.toml
new file mode 100644
index 00000000..38af87d7
--- /dev/null
+++ b/crates/processors/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "torii-processors"
+edition.workspace = true
+license.workspace = true
+license-file.workspace = true
+repository.workspace = true
+version.workspace = true
+
+[dependencies]
+torii-sqlite.workspace = true
+dojo-world.workspace = true
+dojo-types.workspace = true
+starknet.workspace = true
+anyhow.workspace = true
+async-trait.workspace = true
+tokio.workspace = true
+tracing.workspace = true
+cainome.workspace = true
+futures-util.workspace = true
+starknet-crypto.workspace = true
+lazy_static.workspace = true
+base64.workspace = true
+serde_json.workspace = true
+cainome-cairo-serde.workspace = true
diff --git a/crates/indexer/src/processors/mod.rs b/crates/processors/src/lib.rs
similarity index 79%
rename from crates/indexer/src/processors/mod.rs
rename to crates/processors/src/lib.rs
index 6ebbb3f3..8cba095e 100644
--- a/crates/indexer/src/processors/mod.rs
+++ b/crates/processors/src/lib.rs
@@ -8,29 +8,10 @@ use starknet::providers::Provider;
use torii_sqlite::cache::ContractClassCache;
use torii_sqlite::Sql;
-use crate::task_manager::{TaskId, TaskPriority};
+pub mod task_manager;
+pub mod processors;
-pub mod controller;
-pub mod erc1155_transfer_batch;
-pub mod erc1155_transfer_single;
-pub mod erc20_legacy_transfer;
-pub mod erc20_transfer;
-pub mod erc4906_batch_metadata_update;
-pub mod erc4906_metadata_update;
-pub mod erc721_legacy_transfer;
-pub mod erc721_transfer;
-pub mod event_message;
-pub mod metadata_update;
-pub mod raw_event;
-pub mod register_event;
-pub mod register_model;
-pub mod store_del_record;
-pub mod store_set_record;
-pub mod store_transaction;
-pub mod store_update_member;
-pub mod store_update_record;
-pub mod upgrade_event;
-pub mod upgrade_model;
+use crate::task_manager::{TaskId, TaskPriority};
#[derive(Clone, Debug, Default)]
pub struct EventProcessorConfig {
@@ -105,3 +86,4 @@ pub trait TransactionProcessor ,
) -> Result<(), Error>;
}
+
diff --git a/crates/indexer/src/processors/controller.rs b/crates/processors/src/processors/controller.rs
similarity index 98%
rename from crates/indexer/src/processors/controller.rs
rename to crates/processors/src/processors/controller.rs
index a0f8e08b..6e9f05cd 100644
--- a/crates/indexer/src/processors/controller.rs
+++ b/crates/processors/src/processors/controller.rs
@@ -12,7 +12,7 @@ use starknet_crypto::Felt;
use torii_sqlite::Sql;
use tracing::info;
-use super::{EventProcessor, EventProcessorConfig};
+use crate::{EventProcessor, EventProcessorConfig};
use crate::task_manager::{TaskId, TaskPriority};
pub(crate) const LOG_TARGET: &str = "torii::indexer::processors::controller";
diff --git a/crates/indexer/src/processors/erc1155_transfer_batch.rs b/crates/processors/src/processors/erc1155_transfer_batch.rs
similarity index 98%
rename from crates/indexer/src/processors/erc1155_transfer_batch.rs
rename to crates/processors/src/processors/erc1155_transfer_batch.rs
index 70ff6324..a1200e47 100644
--- a/crates/indexer/src/processors/erc1155_transfer_batch.rs
+++ b/crates/processors/src/processors/erc1155_transfer_batch.rs
@@ -7,7 +7,7 @@ use starknet::providers::Provider;
use torii_sqlite::Sql;
use tracing::debug;
-use super::{EventProcessor, EventProcessorConfig};
+use crate::{EventProcessor, EventProcessorConfig};
use crate::task_manager::{self, TaskId, TaskPriority};
pub(crate) const LOG_TARGET: &str = "torii::indexer::processors::erc1155_transfer_batch";
diff --git a/crates/indexer/src/processors/erc1155_transfer_single.rs b/crates/processors/src/processors/erc1155_transfer_single.rs
similarity index 97%
rename from crates/indexer/src/processors/erc1155_transfer_single.rs
rename to crates/processors/src/processors/erc1155_transfer_single.rs
index ea9cc38b..a7c1e645 100644
--- a/crates/indexer/src/processors/erc1155_transfer_single.rs
+++ b/crates/processors/src/processors/erc1155_transfer_single.rs
@@ -7,7 +7,7 @@ use starknet::providers::Provider;
use torii_sqlite::Sql;
use tracing::debug;
-use super::{EventProcessor, EventProcessorConfig};
+use crate::{EventProcessor, EventProcessorConfig};
use crate::task_manager::{self, TaskId, TaskPriority};
pub(crate) const LOG_TARGET: &str = "torii::indexer::processors::erc1155_transfer_single";
diff --git a/crates/indexer/src/processors/erc20_legacy_transfer.rs b/crates/processors/src/processors/erc20_legacy_transfer.rs
similarity index 98%
rename from crates/indexer/src/processors/erc20_legacy_transfer.rs
rename to crates/processors/src/processors/erc20_legacy_transfer.rs
index 0fbf663f..3404769b 100644
--- a/crates/indexer/src/processors/erc20_legacy_transfer.rs
+++ b/crates/processors/src/processors/erc20_legacy_transfer.rs
@@ -9,7 +9,7 @@ use starknet::providers::Provider;
use torii_sqlite::Sql;
use tracing::debug;
-use super::{EventProcessor, EventProcessorConfig};
+use crate::{EventProcessor, EventProcessorConfig};
use crate::task_manager::{TaskId, TaskPriority};
pub(crate) const LOG_TARGET: &str = "torii::indexer::processors::erc20_legacy_transfer";
diff --git a/crates/indexer/src/processors/erc20_transfer.rs b/crates/processors/src/processors/erc20_transfer.rs
similarity index 98%
rename from crates/indexer/src/processors/erc20_transfer.rs
rename to crates/processors/src/processors/erc20_transfer.rs
index 301f70e3..1b637edd 100644
--- a/crates/indexer/src/processors/erc20_transfer.rs
+++ b/crates/processors/src/processors/erc20_transfer.rs
@@ -9,7 +9,7 @@ use starknet::providers::Provider;
use torii_sqlite::Sql;
use tracing::debug;
-use super::{EventProcessor, EventProcessorConfig};
+use crate::{EventProcessor, EventProcessorConfig};
use crate::task_manager::{TaskId, TaskPriority};
pub(crate) const LOG_TARGET: &str = "torii::indexer::processors::erc20_transfer";
diff --git a/crates/indexer/src/processors/erc4906_batch_metadata_update.rs b/crates/processors/src/processors/erc4906_batch_metadata_update.rs
similarity index 97%
rename from crates/indexer/src/processors/erc4906_batch_metadata_update.rs
rename to crates/processors/src/processors/erc4906_batch_metadata_update.rs
index 0a0a6425..1ac24516 100644
--- a/crates/indexer/src/processors/erc4906_batch_metadata_update.rs
+++ b/crates/processors/src/processors/erc4906_batch_metadata_update.rs
@@ -7,7 +7,7 @@ use starknet::providers::Provider;
use torii_sqlite::Sql;
use tracing::debug;
-use super::{EventProcessor, EventProcessorConfig};
+use crate::{EventProcessor, EventProcessorConfig};
use crate::task_manager::{self, TaskId, TaskPriority};
pub(crate) const LOG_TARGET: &str = "torii::indexer::processors::erc4906_metadata_update_batch";
diff --git a/crates/indexer/src/processors/erc4906_metadata_update.rs b/crates/processors/src/processors/erc4906_metadata_update.rs
similarity index 97%
rename from crates/indexer/src/processors/erc4906_metadata_update.rs
rename to crates/processors/src/processors/erc4906_metadata_update.rs
index 832f0e2c..f0fb808c 100644
--- a/crates/indexer/src/processors/erc4906_metadata_update.rs
+++ b/crates/processors/src/processors/erc4906_metadata_update.rs
@@ -7,7 +7,7 @@ use starknet::providers::Provider;
use torii_sqlite::Sql;
use tracing::debug;
-use super::{EventProcessor, EventProcessorConfig};
+use crate::{EventProcessor, EventProcessorConfig};
use crate::task_manager::{self, TaskId, TaskPriority};
pub(crate) const LOG_TARGET: &str = "torii::indexer::processors::erc4906_metadata_update";
diff --git a/crates/indexer/src/processors/erc721_legacy_transfer.rs b/crates/processors/src/processors/erc721_legacy_transfer.rs
similarity index 98%
rename from crates/indexer/src/processors/erc721_legacy_transfer.rs
rename to crates/processors/src/processors/erc721_legacy_transfer.rs
index f253a971..177057c4 100644
--- a/crates/indexer/src/processors/erc721_legacy_transfer.rs
+++ b/crates/processors/src/processors/erc721_legacy_transfer.rs
@@ -9,7 +9,7 @@ use starknet::providers::Provider;
use torii_sqlite::Sql;
use tracing::debug;
-use super::{EventProcessor, EventProcessorConfig};
+use crate::{EventProcessor, EventProcessorConfig};
use crate::task_manager::{TaskId, TaskPriority};
pub(crate) const LOG_TARGET: &str = "torii::indexer::processors::erc721_legacy_transfer";
diff --git a/crates/indexer/src/processors/erc721_transfer.rs b/crates/processors/src/processors/erc721_transfer.rs
similarity index 98%
rename from crates/indexer/src/processors/erc721_transfer.rs
rename to crates/processors/src/processors/erc721_transfer.rs
index 86259063..be09b146 100644
--- a/crates/indexer/src/processors/erc721_transfer.rs
+++ b/crates/processors/src/processors/erc721_transfer.rs
@@ -9,7 +9,7 @@ use starknet::providers::Provider;
use torii_sqlite::Sql;
use tracing::debug;
-use super::{EventProcessor, EventProcessorConfig};
+use crate::{EventProcessor, EventProcessorConfig};
use crate::task_manager::{TaskId, TaskPriority};
pub(crate) const LOG_TARGET: &str = "torii::indexer::processors::erc721_transfer";
diff --git a/crates/indexer/src/processors/event_message.rs b/crates/processors/src/processors/event_message.rs
similarity index 98%
rename from crates/indexer/src/processors/event_message.rs
rename to crates/processors/src/processors/event_message.rs
index 1d24d33d..81613ceb 100644
--- a/crates/indexer/src/processors/event_message.rs
+++ b/crates/processors/src/processors/event_message.rs
@@ -11,7 +11,7 @@ use starknet_crypto::poseidon_hash_many;
use torii_sqlite::Sql;
use tracing::info;
-use super::{EventProcessor, EventProcessorConfig};
+use crate::{EventProcessor, EventProcessorConfig};
use crate::task_manager::{TaskId, TaskPriority};
pub(crate) const LOG_TARGET: &str = "torii::indexer::processors::event_message";
diff --git a/crates/indexer/src/processors/metadata_update.rs b/crates/processors/src/processors/metadata_update.rs
similarity index 98%
rename from crates/indexer/src/processors/metadata_update.rs
rename to crates/processors/src/processors/metadata_update.rs
index a0186c1c..740155e9 100644
--- a/crates/indexer/src/processors/metadata_update.rs
+++ b/crates/processors/src/processors/metadata_update.rs
@@ -15,7 +15,7 @@ use torii_sqlite::utils::fetch_content_from_ipfs;
use torii_sqlite::Sql;
use tracing::{error, info};
-use super::{EventProcessor, EventProcessorConfig};
+use crate::{EventProcessor, EventProcessorConfig};
use crate::task_manager::{TaskId, TaskPriority};
pub(crate) const LOG_TARGET: &str = "torii::indexer::processors::metadata_update";
diff --git a/crates/processors/src/processors/mod.rs b/crates/processors/src/processors/mod.rs
new file mode 100644
index 00000000..fedfd6b1
--- /dev/null
+++ b/crates/processors/src/processors/mod.rs
@@ -0,0 +1,141 @@
+use std::collections::HashMap;
+
+use controller::ControllerProcessor;
+use erc1155_transfer_batch::Erc1155TransferBatchProcessor;
+use erc1155_transfer_single::Erc1155TransferSingleProcessor;
+use erc20_legacy_transfer::Erc20LegacyTransferProcessor;
+use erc20_transfer::Erc20TransferProcessor;
+use erc4906_batch_metadata_update::Erc4906BatchMetadataUpdateProcessor;
+use erc4906_metadata_update::Erc4906MetadataUpdateProcessor;
+use erc721_legacy_transfer::Erc721LegacyTransferProcessor;
+use erc721_transfer::Erc721TransferProcessor;
+use event_message::EventMessageProcessor;
+use metadata_update::MetadataUpdateProcessor;
+use raw_event::RawEventProcessor;
+use register_event::RegisterEventProcessor;
+use register_model::RegisterModelProcessor;
+use starknet::{core::utils::get_selector_from_name, providers::Provider};
+use starknet::core::types::Felt;
+use store_del_record::StoreDelRecordProcessor;
+use store_set_record::StoreSetRecordProcessor;
+use store_transaction::StoreTransactionProcessor;
+use store_update_member::StoreUpdateMemberProcessor;
+use store_update_record::StoreUpdateRecordProcessor;
+use torii_sqlite::types::ContractType;
+use upgrade_event::UpgradeEventProcessor;
+use upgrade_model::UpgradeModelProcessor;
+
+use crate::{BlockProcessor, EventProcessor, TransactionProcessor};
+
+mod controller;
+mod erc1155_transfer_batch;
+mod erc1155_transfer_single;
+mod erc20_legacy_transfer;
+mod erc20_transfer;
+mod erc4906_batch_metadata_update;
+mod erc4906_metadata_update;
+mod erc721_legacy_transfer;
+mod erc721_transfer;
+mod event_message;
+mod metadata_update;
+mod raw_event;
+mod register_event;
+mod register_model;
+mod store_del_record;
+mod store_set_record;
+mod store_transaction;
+mod store_update_member;
+mod store_update_record;
+mod upgrade_event;
+mod upgrade_model;
+
+type EventKey = Felt;
+type EventProcessorMap = HashMap {
+ fn default() -> Self {
+ Self {
+ block: vec![],
+ transaction: vec![Box::new(StoreTransactionProcessor)],
+ // We shouldn't have a catch all for now since the world doesn't forward raw events
+ // anymore.
+ catch_all_event: Box::new(RawEventProcessor) as Box {
+ pub fn initialize_event_processors() -> HashMap {
event_id,
} in events
{
- let contract_processors = processors.get_event_processor(contract_type);
+ let contract_processors = processors.get_event_processors(contract_type);
if let Some(processors) = contract_processors.get(&event.keys[0]) {
let processor = processors
.iter()