Skip to content

Commit

Permalink
refactor(katana): abstract compiled class thru the provider level (#2709
Browse files Browse the repository at this point in the history
)
  • Loading branch information
kariy authored Nov 21, 2024
1 parent 043554c commit f6f0ffd
Show file tree
Hide file tree
Showing 50 changed files with 692 additions and 756 deletions.
12 changes: 8 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ members = [
"crates/dojo/utils",
"crates/dojo/world",
"crates/dojo/world/abigen",
"crates/katana/cli",
"crates/katana/controller",
"crates/katana/core",
"crates/katana/executor",
Expand All @@ -37,17 +38,16 @@ members = [
"crates/katana/storage/provider",
"crates/katana/tasks",
"crates/katana/trie",
"crates/katana/cli",
"crates/metrics",
"crates/saya/core",
"crates/saya/provider",
"crates/sozo/scarbext",
"crates/sozo/signers",
"crates/sozo/walnut",
"crates/torii/cli",
"crates/torii/client",
"crates/torii/server",
"crates/torii/types-test",
"crates/torii/cli",
"examples/spawn-and-move",
"scripts/verify_db_balances",
"xtask/generate-test-db",
Expand All @@ -66,6 +66,10 @@ incremental = false
inherits = "release"
lto = "fat"

[profile.profiling]
debug = true
inherits = "release"

[workspace.dependencies]
cainome = { git = "https://github.com/cartridge-gg/cainome", rev = "5c2616c273faca7700d2ba565503fcefb5b9d720", features = [ "abigen-rs" ] }
cainome-cairo-serde = { git = "https://github.com/cartridge-gg/cainome", rev = "5c2616c273faca7700d2ba565503fcefb5b9d720" }
Expand All @@ -87,6 +91,7 @@ topological-sort = "0.2"

# katana
katana-cairo = { path = "crates/katana/cairo" }
katana-cli = { path = "crates/katana/cli" }
katana-codecs = { path = "crates/katana/storage/codecs" }
katana-codecs-derive = { path = "crates/katana/storage/codecs/derive" }
katana-core = { path = "crates/katana/core", default-features = false }
Expand All @@ -106,16 +111,15 @@ katana-runner = { path = "crates/katana/runner" }
katana-slot-controller = { path = "crates/katana/controller" }
katana-tasks = { path = "crates/katana/tasks" }
katana-trie = { path = "crates/katana/trie" }
katana-cli = { path = "crates/katana/cli" }

# torii
torii-cli = { path = "crates/torii/cli" }
torii-client = { path = "crates/torii/client" }
torii-core = { path = "crates/torii/core" }
torii-graphql = { path = "crates/torii/graphql" }
torii-grpc = { path = "crates/torii/grpc" }
torii-relay = { path = "crates/torii/libp2p" }
torii-server = { path = "crates/torii/server" }
torii-cli = { path = "crates/torii/cli" }

# saya
saya-core = { path = "crates/saya/core" }
Expand Down
4 changes: 2 additions & 2 deletions crates/katana/core/src/backend/contract.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use katana_primitives::class::DeprecatedCompiledClass;
use katana_primitives::class::LegacyContractClass;
use starknet::core::types::FlattenedSierraClass;

#[derive(Debug)]
pub enum StarknetContract {
Legacy(DeprecatedCompiledClass),
Legacy(LegacyContractClass),
Sierra(FlattenedSierraClass),
}
20 changes: 10 additions & 10 deletions crates/katana/core/src/backend/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use katana_primitives::block::{
};
use katana_primitives::chain_spec::ChainSpec;
use katana_primitives::da::L1DataAvailabilityMode;
use katana_primitives::state::StateUpdatesWithDeclaredClasses;
use katana_primitives::state::StateUpdatesWithClasses;
use katana_primitives::version::ProtocolVersion;
use katana_provider::providers::db::DbProvider;
use katana_provider::providers::fork::ForkedProvider;
Expand Down Expand Up @@ -213,7 +213,7 @@ impl Blockchain {
fn new_with_genesis_block_and_state(
provider: impl Database,
block: SealedBlockWithStatus,
states: StateUpdatesWithDeclaredClasses,
states: StateUpdatesWithClasses,
) -> Result<Self> {
BlockWriter::insert_block_with_states_and_receipts(
&provider,
Expand All @@ -234,11 +234,11 @@ mod tests {
use katana_primitives::da::L1DataAvailabilityMode;
use katana_primitives::fee::{PriceUnit, TxFeeInfo};
use katana_primitives::genesis::constant::{
DEFAULT_ETH_FEE_TOKEN_ADDRESS, DEFAULT_LEGACY_ERC20_CASM, DEFAULT_LEGACY_ERC20_CLASS_HASH,
DEFAULT_LEGACY_UDC_CASM, DEFAULT_LEGACY_UDC_CLASS_HASH, DEFAULT_UDC_ADDRESS,
DEFAULT_ETH_FEE_TOKEN_ADDRESS, DEFAULT_LEGACY_ERC20_CLASS, DEFAULT_LEGACY_ERC20_CLASS_HASH,
DEFAULT_LEGACY_UDC_CLASS, DEFAULT_LEGACY_UDC_CLASS_HASH, DEFAULT_UDC_ADDRESS,
};
use katana_primitives::receipt::{InvokeTxReceipt, Receipt};
use katana_primitives::state::StateUpdatesWithDeclaredClasses;
use katana_primitives::state::StateUpdatesWithClasses;
use katana_primitives::trace::TxExecInfo;
use katana_primitives::transaction::{InvokeTx, Tx, TxWithHash};
use katana_primitives::{chain_spec, Felt};
Expand Down Expand Up @@ -305,7 +305,7 @@ mod tests {
.provider()
.insert_block_with_states_and_receipts(
dummy_block.clone(),
StateUpdatesWithDeclaredClasses::default(),
StateUpdatesWithClasses::default(),
vec![Receipt::Invoke(InvokeTxReceipt {
revert_error: None,
events: Vec::new(),
Expand Down Expand Up @@ -335,10 +335,10 @@ mod tests {
let actual_fee_token_class = state.class(actual_fee_token_class_hash).unwrap().unwrap();

assert_eq!(actual_udc_class_hash, DEFAULT_LEGACY_UDC_CLASS_HASH);
assert_eq!(actual_udc_class, DEFAULT_LEGACY_UDC_CASM.clone());
assert_eq!(actual_udc_class, DEFAULT_LEGACY_UDC_CLASS.clone());

assert_eq!(actual_fee_token_class_hash, DEFAULT_LEGACY_ERC20_CLASS_HASH);
assert_eq!(actual_fee_token_class, DEFAULT_LEGACY_ERC20_CASM.clone());
assert_eq!(actual_fee_token_class, DEFAULT_LEGACY_ERC20_CLASS.clone());
}

// re open the db and assert the state is the same and not overwritten
Expand All @@ -361,10 +361,10 @@ mod tests {
let actual_fee_token_class = state.class(actual_fee_token_class_hash).unwrap().unwrap();

assert_eq!(actual_udc_class_hash, DEFAULT_LEGACY_UDC_CLASS_HASH);
assert_eq!(actual_udc_class, DEFAULT_LEGACY_UDC_CASM.clone());
assert_eq!(actual_udc_class, DEFAULT_LEGACY_UDC_CLASS.clone());

assert_eq!(actual_fee_token_class_hash, DEFAULT_LEGACY_ERC20_CLASS_HASH);
assert_eq!(actual_fee_token_class, DEFAULT_LEGACY_ERC20_CASM.clone());
assert_eq!(actual_fee_token_class, DEFAULT_LEGACY_ERC20_CLASS.clone());

let block_number = blockchain.provider().latest_number().unwrap();
let block_hash = blockchain.provider().latest_hash().unwrap();
Expand Down
16 changes: 8 additions & 8 deletions crates/katana/executor/src/abstraction/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ mod executor;

pub use error::*;
pub use executor::*;
use katana_primitives::class::{ClassHash, CompiledClass, CompiledClassHash, FlattenedSierraClass};
use katana_primitives::class::{ClassHash, CompiledClass, CompiledClassHash, ContractClass};
use katana_primitives::contract::{ContractAddress, Nonce, StorageKey, StorageValue};
use katana_primitives::receipt::Receipt;
use katana_primitives::state::{StateUpdates, StateUpdatesWithDeclaredClasses};
use katana_primitives::state::{StateUpdates, StateUpdatesWithClasses};
use katana_primitives::trace::TxExecInfo;
use katana_primitives::transaction::TxWithHash;
use katana_primitives::Felt;
Expand Down Expand Up @@ -90,7 +90,7 @@ pub struct ExecutionOutput {
/// Statistics throughout the executions process.
pub stats: ExecutionStats,
/// The state updates produced by the executions.
pub states: StateUpdatesWithDeclaredClasses,
pub states: StateUpdatesWithClasses,
/// The transactions that have been executed.
pub transactions: Vec<(TxWithHash, ExecutionResult)>,
}
Expand Down Expand Up @@ -168,20 +168,20 @@ impl<'a> StateProviderDb<'a> {
}

impl<'a> ContractClassProvider for StateProviderDb<'a> {
fn class(&self, hash: ClassHash) -> ProviderResult<Option<CompiledClass>> {
fn class(&self, hash: ClassHash) -> ProviderResult<Option<ContractClass>> {
self.0.class(hash)
}

fn compiled_class(&self, hash: ClassHash) -> ProviderResult<Option<CompiledClass>> {
self.0.compiled_class(hash)
}

fn compiled_class_hash_of_class_hash(
&self,
hash: ClassHash,
) -> ProviderResult<Option<CompiledClassHash>> {
self.0.compiled_class_hash_of_class_hash(hash)
}

fn sierra_class(&self, hash: ClassHash) -> ProviderResult<Option<FlattenedSierraClass>> {
self.0.sierra_class(hash)
}
}

impl<'a> StateProvider for StateProviderDb<'a> {
Expand Down
6 changes: 3 additions & 3 deletions crates/katana/executor/src/implementation/blockifier/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ impl<'a> BlockExecutor<'a> for StarknetVMProcessor<'a> {
// Collect class artifacts if its a declare tx
let class_decl_artifacts = if let ExecutableTx::Declare(tx) = exec_tx.as_ref() {
let class_hash = tx.class_hash();
Some((class_hash, tx.compiled_class.clone(), tx.sierra_class.clone()))
Some((class_hash, tx.class.clone()))
} else {
None
};
Expand All @@ -194,8 +194,8 @@ impl<'a> BlockExecutor<'a> for StarknetVMProcessor<'a> {
info!(target: LOG_TARGET, hash = format!("{hash:#x}"), %reason, "Transaction reverted.");
}

if let Some((class_hash, compiled, sierra)) = class_decl_artifacts {
state.declared_classes.insert(class_hash, (compiled, sierra));
if let Some((class_hash, class)) = class_decl_artifacts {
state.declared_classes.insert(class_hash, class.as_ref().clone());
}

crate::utils::log_resources(&trace.actual_resources);
Expand Down
Loading

0 comments on commit f6f0ffd

Please sign in to comment.