Skip to content

refactor(katana): abstract compiled class thru the provider level #2709

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Nov 21, 2024
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
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
Loading