Skip to content
Draft
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
3 changes: 2 additions & 1 deletion crates/dojo/core/src/event/event.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ pub struct EventDef {
}

pub trait EventDefinition<E> {
const NAME_HASH: felt252;
fn name() -> ByteArray;
}

Expand Down Expand Up @@ -47,6 +48,6 @@ pub impl EventImpl<E, +ModelParser<E>, +EventDefinition<E>, +Serde<E>, +Introspe
ModelParser::<E>::serialize_values(self)
}
fn selector(namespace_hash: felt252) -> felt252 {
dojo::utils::selector_from_namespace_and_name(namespace_hash, @Self::name())
dojo::utils::selector_from_hashes(namespace_hash, EventDefinition::<E>::NAME_HASH)
}
}
1 change: 1 addition & 0 deletions crates/dojo/core/src/model/definition.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ pub enum ModelIndex {
///
/// Definition of the model containing all the fields that makes up a model.
pub trait ModelDefinition<T> {
const NAME_HASH: felt252;
fn name() -> ByteArray;
fn layout() -> Layout;
fn use_legacy_storage() -> bool;
Expand Down
2 changes: 1 addition & 1 deletion crates/dojo/core/src/model/model.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ pub impl ModelImpl<M, +ModelParser<M>, +ModelDefinition<M>, +Serde<M>, +Drop<M>>
}

fn selector(namespace_hash: felt252) -> felt252 {
dojo::utils::selector_from_namespace_and_name(namespace_hash, @Self::name())
dojo::utils::selector_from_hashes(namespace_hash, ModelDefinition::<M>::NAME_HASH)
}

fn layout() -> Layout {
Expand Down
2 changes: 1 addition & 1 deletion crates/dojo/core/src/model/model_value.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,6 @@ pub impl ModelValueImpl<V, +Serde<V>, +ModelDefinition<V>, +ModelValueParser<V>>
}

fn selector(namespace_hash: felt252) -> felt252 {
dojo::utils::selector_from_namespace_and_name(namespace_hash, @Self::name())
dojo::utils::selector_from_hashes(namespace_hash, ModelDefinition::<V>::NAME_HASH)
}
}
8 changes: 8 additions & 0 deletions crates/dojo/macros/src/attributes/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use cairo_lang_macro::{quote, Diagnostic, ProcMacroResult, TokenStream};
use cairo_lang_parser::utils::SimpleParserDatabase;
use cairo_lang_syntax::node::helpers::QueryAttrs;
use cairo_lang_syntax::node::{ast, TypedSyntaxNode};
use dojo_types::naming;

use crate::constants::{DOJO_INTROSPECT_DERIVE, DOJO_PACKED_DERIVE, EXPECTED_DERIVE_ATTR_NAMES};
use crate::helpers::{
Expand All @@ -12,6 +13,7 @@ use crate::helpers::{
pub struct DojoEvent {
diagnostics: Vec<Diagnostic>,
event_name: String,
name_hash: String,
members_values: Vec<String>,
serialized_keys: Vec<String>,
serialized_values: Vec<String>,
Expand All @@ -24,6 +26,7 @@ impl DojoEvent {
Self {
diagnostics: vec![],
event_name: String::default(),
name_hash: String::default(),
members_values: vec![],
serialized_keys: vec![],
serialized_values: vec![],
Expand All @@ -46,6 +49,7 @@ impl DojoEvent {
let mut event = DojoEvent::new();

event.event_name = struct_ast.name(db).as_syntax_node().get_text(db).trim().to_string();
event.name_hash = naming::compute_bytearray_hash(&event.event_name).to_hex_string();

if let Some(failure) = DojoChecker::is_name_valid("event", &event.event_name) {
return failure;
Expand Down Expand Up @@ -157,13 +161,15 @@ impl DojoEvent {
fn generate_event_code(&self) -> TokenStream {
let (
type_name,
name_hash,
members_values,
serialized_keys,
serialized_values,
event_value_derive_attr_names,
unique_hash,
) = (
&self.event_name,
&self.name_hash,
self.members_values.join("\n"),
self.serialized_keys.join("\n"),
self.serialized_values.join("\n"),
Expand All @@ -182,6 +188,8 @@ pub struct {type_name}Value {{
}}

pub impl {type_name}Definition of dojo::event::EventDefinition<{type_name}> {{
const NAME_HASH: felt252 = {name_hash};

#[inline(always)]
fn name() -> ByteArray {{
\"{type_name}\"
Expand Down
9 changes: 9 additions & 0 deletions crates/dojo/macros/src/attributes/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use cairo_lang_macro::{quote, Diagnostic, ProcMacroResult, TokenStream};
use cairo_lang_parser::utils::SimpleParserDatabase;
use cairo_lang_syntax::node::helpers::QueryAttrs;
use cairo_lang_syntax::node::{ast, TypedSyntaxNode};
use dojo_types::naming;

use crate::constants::{
DOJO_INTROSPECT_DERIVE, DOJO_LEGACY_STORAGE_DERIVE, DOJO_PACKED_DERIVE,
Expand All @@ -17,6 +18,8 @@ use crate::helpers::{
#[derive(Debug)]
pub struct DojoModel {
diagnostics: Vec<Diagnostic>,
name_hash: String,

model_type: String,
model_value_derive_attr_names: Vec<String>,
members_values: Vec<String>,
Expand All @@ -37,6 +40,7 @@ impl DojoModel {
Self {
diagnostics: vec![],
model_type: String::default(),
name_hash: String::default(),
model_value_derive_attr_names: vec![],
members_values: vec![],
key_type: String::default(),
Expand Down Expand Up @@ -65,6 +69,7 @@ impl DojoModel {
let mut model = DojoModel::new();

model.model_type = struct_ast.name(db).as_syntax_node().get_text(db).trim().to_string();
model.name_hash = naming::compute_bytearray_hash(&model.model_type).to_hex_string();

if let Some(failure) = DojoChecker::is_name_valid("model", &model.model_type) {
return failure;
Expand Down Expand Up @@ -255,6 +260,7 @@ impl DojoModel {
fn generate_model_code(&self) -> TokenStream {
let (
model_type,
name_hash,
model_value_derive_attr_names,
members_values,
key_type,
Expand All @@ -269,6 +275,7 @@ impl DojoModel {
deserialized_modelvalue,
) = (
&self.model_type,
&self.name_hash,
format!("#[derive({})]", self.model_value_derive_attr_names.join(", ")),
self.members_values.join(""),
&self.key_type,
Expand Down Expand Up @@ -307,6 +314,8 @@ impl {model_type}ModelValueKey of dojo::model::model_value::ModelValueKey<{model
pub mod m_{model_type}_definition {{
use super::{model_type};
pub impl {model_type}DefinitionImpl<T> of dojo::model::ModelDefinition<T>{{
const NAME_HASH: felt252 = {name_hash};

#[inline(always)]
fn name() -> ByteArray {{
\"{model_type}\"
Expand Down
6 changes: 3 additions & 3 deletions examples/benchmark/Scarb.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ version = 1

[[package]]
name = "dojo"
version = "1.6.0-alpha.0"
version = "1.6.0-alpha.1"
dependencies = [
"dojo_macros",
]
Expand All @@ -19,11 +19,11 @@ dependencies = [

[[package]]
name = "dojo_cairo_test"
version = "1.6.0"
version = "1.6.0-alpha.1"
dependencies = [
"dojo",
]

[[package]]
name = "dojo_macros"
version = "1.6.0"
version = "1.6.0-alpha.1"
1 change: 0 additions & 1 deletion examples/benchmark/src/model.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,6 @@ fn read_sextuple_schema_large() {
fn read_sextuple_member_large() {
let mut world = spawn_foo_world();
world.write_model(@LARGE);

let v0: felt252 = world.read_member(LARGE.ptr(), selector!("v0"));
let v1: felt252 = world.read_member(LARGE.ptr(), selector!("v1"));
let v2: felt252 = world.read_member(LARGE.ptr(), selector!("v2"));
Expand Down
Binary file modified spawn-and-move-db.tar.gz
Binary file not shown.
Loading