diff --git a/bin/sozo/src/commands/events.rs b/bin/sozo/src/commands/events.rs index 3e584d1edd..5c9661a2d4 100644 --- a/bin/sozo/src/commands/events.rs +++ b/bin/sozo/src/commands/events.rs @@ -365,6 +365,27 @@ async fn match_event( ), ) } + WorldEvent::StoreUpdateMembers(e) => { + let tag = get_tag(e.selector, &tags); + ( + format!("Store update member ({})", tag), + format!( + "Selector: {:#066x}\nEntity ID: {:#066x}\nMember selectors: {}\nValues: {}", + e.selector, + e.entity_id, + e.member_selectors + .iter() + .map(|v| format!("{:#066x}", v)) + .collect::>() + .join(", "), + e.values + .iter() + .map(|v| format!("{:#066x}", v)) + .collect::>() + .join(", "), + ), + ) + } WorldEvent::StoreDelRecord(e) => { let tag = get_tag(e.selector, &tags); ( diff --git a/crates/dojo/core-tests/src/tests/model/model.cairo b/crates/dojo/core-tests/src/tests/model/model.cairo index c06e324131..4bc7956a92 100644 --- a/crates/dojo/core-tests/src/tests/model/model.cairo +++ b/crates/dojo/core-tests/src/tests/model/model.cairo @@ -37,7 +37,7 @@ struct Foo3 { v2: u32, } -#[derive(Copy, Drop, Serde, Debug, Introspect)] +#[derive(Copy, Drop, Serde, Debug, Introspect, PartialEq)] struct AStruct { a: u8, b: u8, @@ -46,7 +46,7 @@ struct AStruct { } #[dojo::model] -#[derive(Copy, Drop, Serde, Debug)] +#[derive(Copy, Drop, Serde, Debug, PartialEq)] struct Foo4 { #[key] id: felt252, @@ -56,7 +56,7 @@ struct Foo4 { v3: AStruct, } -#[derive(Copy, Drop, Serde, Debug, Introspect)] +#[derive(Copy, Drop, Serde, Debug, Introspect, PartialEq)] struct FooSchema { v0: u256, v3: AStruct, @@ -390,6 +390,22 @@ fn test_write_members() { assert!(v2s_read == array![foo.v2, foo2.v2]); } + +#[test] +fn test_write_schema() { + let mut world = spawn_foo_world(); + let foo = Foo4 { id: 1, v0: 2, v1: 3, v2: 4, v3: AStruct { a: 5, b: 6, c: 7, d: 8 } }; + world.write_model(@foo); + let new_struct = AStruct { a: 10, b: 11, c: 12, d: 13 }; + let schema = FooSchema { v0: 42, v3: new_struct }; + let mut new_foo = foo; + new_foo.v0 = schema.v0; + new_foo.v3 = schema.v3; + world.write_schema(foo.ptr(), @schema); + let model: Foo4 = world.read_model(foo.id); + assert_eq!(model, new_foo); +} + #[test] fn test_ptr_from() { let foo = Foo { k1: 1, k2: 2, v1: 3, v2: 4 }; diff --git a/crates/dojo/core/src/lib.cairo b/crates/dojo/core/src/lib.cairo index 993ecc7a1d..aa673e7e3c 100644 --- a/crates/dojo/core/src/lib.cairo +++ b/crates/dojo/core/src/lib.cairo @@ -36,7 +36,7 @@ pub mod meta { pub use introspect::{Introspect, Ty, TyCompareTrait}; pub mod layout; - pub use layout::{FieldLayout, Layout, LayoutCompareTrait}; + pub use layout::{FieldLayout, FieldLayoutsTrait, Layout, LayoutTrait}; } pub mod model { diff --git a/crates/dojo/core/src/meta/layout.cairo b/crates/dojo/core/src/meta/layout.cairo index 6082b017b1..d3bfd3b148 100644 --- a/crates/dojo/core/src/meta/layout.cairo +++ b/crates/dojo/core/src/meta/layout.cairo @@ -24,7 +24,7 @@ pub enum Layout { } #[generate_trait] -pub impl LayoutCompareImpl of LayoutCompareTrait { +pub impl LayoutImpl of LayoutTrait { fn is_same_type_of(self: @Layout, old: @Layout) -> bool { match (self, old) { (Layout::Fixed(_), Layout::Fixed(_)) => true, @@ -37,6 +37,23 @@ pub impl LayoutCompareImpl of LayoutCompareTrait { _ => false, } } + fn struct_fields(self: @Layout) -> Span { + match self { + Layout::Struct(fields) => *fields, + _ => { panic!("Unexpected layout type for a Struct.") }, + } + } +} + +#[generate_trait] +pub impl FieldLayoutsImpl of FieldLayoutsTrait { + fn selectors(self: Span) -> Array { + let mut selectors: Array = Default::default(); + for field_layout in self { + selectors.append(*field_layout.selector); + }; + selectors + } } /// Compute the full size in bytes of a layout, when all the fields diff --git a/crates/dojo/core/src/model/definition.cairo b/crates/dojo/core/src/model/definition.cairo index 91b2a53fb4..998f20e73e 100644 --- a/crates/dojo/core/src/model/definition.cairo +++ b/crates/dojo/core/src/model/definition.cairo @@ -13,6 +13,7 @@ pub enum ModelIndex { Id: felt252, // (entity_id, member_id) MemberId: (felt252, felt252), + Schema: felt252, } /// The `ModelDefinition` trait. diff --git a/crates/dojo/core/src/model/model.cairo b/crates/dojo/core/src/model/model.cairo index 8cac8fe87a..82781488a4 100644 --- a/crates/dojo/core/src/model/model.cairo +++ b/crates/dojo/core/src/model/model.cairo @@ -21,6 +21,7 @@ pub struct ModelPtr { /// Converts the span of model pointers to a span of model indexes. pub trait ModelPtrsTrait { fn to_indexes(self: Span>) -> Span; + fn to_schemas(self: Span>) -> Span; fn to_member_indexes(self: Span>, field_selector: felt252) -> Span; } @@ -33,6 +34,14 @@ pub impl ModelPtrsImpl of ModelPtrsTrait { ids.span() } + fn to_schemas(self: Span>) -> Span { + let mut ids = ArrayTrait::::new(); + for ptr in self { + ids.append(ModelIndex::Schema(*ptr.id)); + }; + ids.span() + } + fn to_member_indexes(self: Span>, field_selector: felt252) -> Span { let mut ids = ArrayTrait::::new(); for ptr in self { diff --git a/crates/dojo/core/src/model/storage.cairo b/crates/dojo/core/src/model/storage.cairo index 5478e8a56e..106b90dd63 100644 --- a/crates/dojo/core/src/model/storage.cairo +++ b/crates/dojo/core/src/model/storage.cairo @@ -63,6 +63,14 @@ pub trait ModelStorage { self: @S, ptrs: Span>, ) -> Array; + /// Writes a subset of members in a model, matching a defined schema . + fn write_schema, +Introspect>(ref self: S, ptr: ModelPtr, schema: @T); + + /// Writes part of multiple models, matching a schema. + fn write_schemas, +Introspect>( + ref self: S, ptrs: Span>, schemas: Span<@T>, + ); + /// Returns the current namespace hash. fn namespace_hash(self: @S) -> felt252; } diff --git a/crates/dojo/core/src/world/errors.cairo b/crates/dojo/core/src/world/errors.cairo index dc4ff22794..9f7262f595 100644 --- a/crates/dojo/core/src/world/errors.cairo +++ b/crates/dojo/core/src/world/errors.cairo @@ -1,6 +1,7 @@ use starknet::ContractAddress; pub const DELETE_ENTITY_MEMBER: felt252 = 'Cannot delete entity member'; +pub const DELETE_ENTITY_SCHEMA: felt252 = 'Cannot delete entity schema'; pub fn lengths_mismatch(a: @ByteArray, b: @ByteArray, context: @ByteArray) -> ByteArray { format!("Length mismatch: `{a}` and `{b}` in `{context}`") diff --git a/crates/dojo/core/src/world/storage.cairo b/crates/dojo/core/src/world/storage.cairo index 22fc81f151..2190a88380 100644 --- a/crates/dojo/core/src/world/storage.cairo +++ b/crates/dojo/core/src/world/storage.cairo @@ -307,7 +307,7 @@ pub impl ModelStorageWorldStorageImpl, +Drop> of ModelStorage::selector(*self.namespace_hash), - ModelIndex::Id(ptr.id), + ModelIndex::Schema(ptr.id), Introspect::::layout(), ), ) @@ -321,7 +321,7 @@ pub impl ModelStorageWorldStorageImpl, +Drop> of ModelStorage::selector(*self.namespace_hash), - ptrs.to_indexes(), + ptrs.to_schemas(), Introspect::::layout(), ) { values.append(deserialize_unwrap(*entity)); @@ -329,6 +329,35 @@ pub impl ModelStorageWorldStorageImpl, +Drop> of ModelStorage, +Introspect>( + ref self: WorldStorage, ptr: ModelPtr, schema: @T, + ) { + IWorldDispatcherTrait::set_entity( + self.dispatcher, + Model::::selector(self.namespace_hash), + ModelIndex::Schema(ptr.id), + serialize_inline(schema), + Introspect::::layout(), + ); + } + + fn write_schemas, +Introspect>( + ref self: WorldStorage, ptrs: Span>, schemas: Span<@T>, + ) { + let mut serialized_schemas = ArrayTrait::>::new(); + for schema in schemas { + serialized_schemas.append(serialize_inline(*schema)); + }; + + IWorldDispatcherTrait::set_entities( + self.dispatcher, + Model::::selector(self.namespace_hash), + ptrs.to_schemas(), + serialized_schemas.span(), + Introspect::::layout(), + ); + } + fn namespace_hash(self: @WorldStorage) -> felt252 { *self.namespace_hash } diff --git a/crates/dojo/core/src/world/world_contract.cairo b/crates/dojo/core/src/world/world_contract.cairo index a4d5a6382d..74216688c5 100644 --- a/crates/dojo/core/src/world/world_contract.cairo +++ b/crates/dojo/core/src/world/world_contract.cairo @@ -30,9 +30,9 @@ pub mod world { IUpgradeableDispatcher, IUpgradeableDispatcherTrait, }; use dojo::meta::{ - IDeployedResourceDispatcher, IDeployedResourceDispatcherTrait, - IDeployedResourceLibraryDispatcher, IStoredResourceDispatcher, - IStoredResourceDispatcherTrait, Layout, LayoutCompareTrait, TyCompareTrait, + Layout, IStoredResourceDispatcher, IStoredResourceDispatcherTrait, + IDeployedResourceDispatcher, IDeployedResourceDispatcherTrait, FieldLayoutsTrait, + LayoutTrait, IDeployedResourceLibraryDispatcher, TyCompareTrait, }; use dojo::model::{Model, ModelIndex, ResourceMetadata, metadata}; use dojo::storage; @@ -76,6 +76,7 @@ pub mod world { StoreSetRecord: StoreSetRecord, StoreUpdateRecord: StoreUpdateRecord, StoreUpdateMember: StoreUpdateMember, + StoreUpdateMembers: StoreUpdateMembers, StoreDelRecord: StoreDelRecord, WriterUpdated: WriterUpdated, OwnerUpdated: OwnerUpdated, @@ -230,6 +231,16 @@ pub mod world { pub values: Span, } + #[derive(Drop, starknet::Event)] + pub struct StoreUpdateMembers { + #[key] + pub selector: felt252, + #[key] + pub entity_id: felt252, + pub member_selectors: Span, + pub values: Span, + } + #[derive(Drop, starknet::Event)] pub struct StoreDelRecord { #[key] @@ -1431,6 +1442,20 @@ pub mod world { }, ); }, + ModelIndex::Schema(entity_id) => { + let fields = layout.struct_fields(); + let mut offset = 0; + storage::layout::write_struct_layout( + model_selector, entity_id, values, ref offset, fields, + ); + let member_selectors = fields.selectors().span(); + self + .emit( + StoreUpdateMembers { + selector: model_selector, entity_id, member_selectors, values, + }, + ); + }, } } @@ -1455,6 +1480,7 @@ pub mod world { self.emit(StoreDelRecord { selector: model_selector, entity_id }); }, ModelIndex::MemberId(_) => { panic_with_felt252(errors::DELETE_ENTITY_MEMBER); }, + ModelIndex::Schema(_) => { panic_with_felt252(errors::DELETE_ENTITY_SCHEMA); }, } } @@ -1473,7 +1499,8 @@ pub mod world { let entity_id = entity_id_from_serialized_keys(keys); storage::entity_model::read_model_entity(model_selector, entity_id, layout) }, - ModelIndex::Id(entity_id) => { + ModelIndex::Id(entity_id) | + ModelIndex::Schema(entity_id) => { storage::entity_model::read_model_entity(model_selector, entity_id, layout) }, ModelIndex::MemberId(( diff --git a/crates/dojo/world/src/contracts/abigen/model.rs b/crates/dojo/world/src/contracts/abigen/model.rs index 0586367957..6139a03f9c 100644 --- a/crates/dojo/world/src/contracts/abigen/model.rs +++ b/crates/dojo/world/src/contracts/abigen/model.rs @@ -79,8 +79,12 @@ impl cainome::cairo_serde::CairoSerde for Enum { fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.name)); - __out.extend(Vec::::cairo_serialize(&__rust.attrs)); - __out.extend(Vec::<(starknet::core::types::Felt, Ty)>::cairo_serialize(&__rust.children)); + __out.extend(Vec::::cairo_serialize( + &__rust.attrs, + )); + __out.extend(Vec::<(starknet::core::types::Felt, Ty)>::cairo_serialize( + &__rust.children, + )); __out } fn cairo_deserialize( @@ -95,7 +99,11 @@ impl cainome::cairo_serde::CairoSerde for Enum { let children = Vec::<(starknet::core::types::Felt, Ty)>::cairo_deserialize(__felts, __offset)?; __offset += Vec::<(starknet::core::types::Felt, Ty)>::cairo_serialized_size(&children); - Ok(Enum { name, attrs, children }) + Ok(Enum { + name, + attrs, + children, + }) } } #[derive(Clone, serde::Serialize, serde::Deserialize, PartialEq, Debug)] @@ -115,7 +123,9 @@ impl cainome::cairo_serde::CairoSerde for FieldLayout { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.selector)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); __out.extend(Layout::cairo_serialize(&__rust.layout)); __out } @@ -151,7 +161,9 @@ impl cainome::cairo_serde::CairoSerde for Member { fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.name)); - __out.extend(Vec::::cairo_serialize(&__rust.attrs)); + __out.extend(Vec::::cairo_serialize( + &__rust.attrs, + )); __out.extend(Ty::cairo_serialize(&__rust.ty)); __out } @@ -192,7 +204,9 @@ impl cainome::cairo_serde::CairoSerde for ModelDef { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.name)); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.name, + )); __out.extend(Layout::cairo_serialize(&__rust.layout)); __out.extend(Struct::cairo_serialize(&__rust.schema)); __out.extend(Option::::cairo_serialize(&__rust.packed_size)); @@ -214,7 +228,13 @@ impl cainome::cairo_serde::CairoSerde for ModelDef { __offset += Option::::cairo_serialized_size(&packed_size); let unpacked_size = Option::::cairo_deserialize(__felts, __offset)?; __offset += Option::::cairo_serialized_size(&unpacked_size); - Ok(ModelDef { name, layout, schema, packed_size, unpacked_size }) + Ok(ModelDef { + name, + layout, + schema, + packed_size, + unpacked_size, + }) } } #[derive(Clone, serde::Serialize, serde::Deserialize, PartialEq, Debug)] @@ -236,9 +256,15 @@ impl cainome::cairo_serde::CairoSerde for ResourceMetadata { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.resource_id)); - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.metadata_uri)); - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.metadata_hash)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.resource_id, + )); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.metadata_uri, + )); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.metadata_hash, + )); __out } fn cairo_deserialize( @@ -252,7 +278,11 @@ impl cainome::cairo_serde::CairoSerde for ResourceMetadata { __offset += cainome::cairo_serde::ByteArray::cairo_serialized_size(&metadata_uri); let metadata_hash = starknet::core::types::Felt::cairo_deserialize(__felts, __offset)?; __offset += starknet::core::types::Felt::cairo_serialized_size(&metadata_hash); - Ok(ResourceMetadata { resource_id, metadata_uri, metadata_hash }) + Ok(ResourceMetadata { + resource_id, + metadata_uri, + metadata_hash, + }) } } #[derive(Clone, serde::Serialize, serde::Deserialize, PartialEq, Debug)] @@ -272,8 +302,12 @@ impl cainome::cairo_serde::CairoSerde for ResourceMetadataValue { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.metadata_uri)); - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.metadata_hash)); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.metadata_uri, + )); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.metadata_hash, + )); __out } fn cairo_deserialize( @@ -285,7 +319,10 @@ impl cainome::cairo_serde::CairoSerde for ResourceMetadataValue { __offset += cainome::cairo_serde::ByteArray::cairo_serialized_size(&metadata_uri); let metadata_hash = starknet::core::types::Felt::cairo_deserialize(__felts, __offset)?; __offset += starknet::core::types::Felt::cairo_serialized_size(&metadata_hash); - Ok(ResourceMetadataValue { metadata_uri, metadata_hash }) + Ok(ResourceMetadataValue { + metadata_uri, + metadata_hash, + }) } } #[derive(Clone, serde::Serialize, serde::Deserialize, PartialEq, Debug)] @@ -308,7 +345,9 @@ impl cainome::cairo_serde::CairoSerde for Struct { fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.name)); - __out.extend(Vec::::cairo_serialize(&__rust.attrs)); + __out.extend(Vec::::cairo_serialize( + &__rust.attrs, + )); __out.extend(Vec::::cairo_serialize(&__rust.children)); __out } @@ -323,7 +362,11 @@ impl cainome::cairo_serde::CairoSerde for Struct { __offset += Vec::::cairo_serialized_size(&attrs); let children = Vec::::cairo_deserialize(__felts, __offset)?; __offset += Vec::::cairo_serialized_size(&children); - Ok(Struct { name, attrs, children }) + Ok(Struct { + name, + attrs, + children, + }) } } #[derive(Clone, serde::Serialize, serde::Deserialize, PartialEq, Debug)] @@ -365,7 +408,10 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { if event.keys.is_empty() { return Err("Event has no key".to_string()); } - Err(format!("Could not match any event from keys {:?}", event.keys)) + Err(format!( + "Could not match any event from keys {:?}", + event.keys + )) } } impl TryFrom<&starknet::core::types::Event> for Event { @@ -375,7 +421,10 @@ impl TryFrom<&starknet::core::types::Event> for Event { if event.keys.is_empty() { return Err("Event has no key".to_string()); } - Err(format!("Could not match any event from keys {:?}", event.keys)) + Err(format!( + "Could not match any event from keys {:?}", + event.keys + )) } } #[derive(Clone, serde::Serialize, serde::Deserialize, PartialEq, Debug)] @@ -453,20 +502,31 @@ impl cainome::cairo_serde::CairoSerde for Layout { let __f = __felts[__offset]; let __index = u128::from_be_bytes(__f.to_bytes_be()[16..].try_into().unwrap()); match __index as usize { - 0usize => Ok(Layout::Fixed(Vec::::cairo_deserialize(__felts, __offset + 1)?)), - 1usize => { - Ok(Layout::Struct(Vec::::cairo_deserialize(__felts, __offset + 1)?)) - } - 2usize => Ok(Layout::Tuple(Vec::::cairo_deserialize(__felts, __offset + 1)?)), - 3usize => Ok(Layout::Array(Vec::::cairo_deserialize(__felts, __offset + 1)?)), + 0usize => Ok(Layout::Fixed(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), + 1usize => Ok(Layout::Struct(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), + 2usize => Ok(Layout::Tuple(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), + 3usize => Ok(Layout::Array(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), 4usize => Ok(Layout::FixedArray(Vec::<(Layout, u32)>::cairo_deserialize( __felts, __offset + 1, )?)), 5usize => Ok(Layout::ByteArray), - 6usize => { - Ok(Layout::Enum(Vec::::cairo_deserialize(__felts, __offset + 1)?)) - } + 6usize => Ok(Layout::Enum(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), _ => { return Err(cainome::cairo_serde::Error::Deserialize(format!( "Index not handle for enum {}", @@ -551,17 +611,26 @@ impl cainome::cairo_serde::CairoSerde for Ty { let __f = __felts[__offset]; let __index = u128::from_be_bytes(__f.to_bytes_be()[16..].try_into().unwrap()); match __index as usize { - 0usize => Ok(Ty::Primitive(starknet::core::types::Felt::cairo_deserialize( + 0usize => Ok(Ty::Primitive( + starknet::core::types::Felt::cairo_deserialize(__felts, __offset + 1)?, + )), + 1usize => Ok(Ty::Struct(Struct::cairo_deserialize( __felts, __offset + 1, )?)), - 1usize => Ok(Ty::Struct(Struct::cairo_deserialize(__felts, __offset + 1)?)), 2usize => Ok(Ty::Enum(Enum::cairo_deserialize(__felts, __offset + 1)?)), - 3usize => Ok(Ty::Tuple(Vec::::cairo_deserialize(__felts, __offset + 1)?)), - 4usize => Ok(Ty::Array(Vec::::cairo_deserialize(__felts, __offset + 1)?)), - 5usize => { - Ok(Ty::FixedArray(Vec::<(Ty, u32)>::cairo_deserialize(__felts, __offset + 1)?)) - } + 3usize => Ok(Ty::Tuple(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), + 4usize => Ok(Ty::Array(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), + 5usize => Ok(Ty::FixedArray(Vec::<(Ty, u32)>::cairo_deserialize( + __felts, + __offset + 1, + )?)), 6usize => Ok(Ty::ByteArray), _ => { return Err(cainome::cairo_serde::Error::Deserialize(format!( diff --git a/crates/dojo/world/src/contracts/abigen/world.rs b/crates/dojo/world/src/contracts/abigen/world.rs index 42a8dc5f0f..128796d5d9 100644 --- a/crates/dojo/world/src/contracts/abigen/world.rs +++ b/crates/dojo/world/src/contracts/abigen/world.rs @@ -76,8 +76,12 @@ impl cainome::cairo_serde::CairoSerde for ContractInitialized { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.selector)); - __out.extend(Vec::::cairo_serialize(&__rust.init_calldata)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); + __out.extend(Vec::::cairo_serialize( + &__rust.init_calldata, + )); __out } fn cairo_deserialize( @@ -90,7 +94,10 @@ impl cainome::cairo_serde::CairoSerde for ContractInitialized { let init_calldata = Vec::::cairo_deserialize(__felts, __offset)?; __offset += Vec::::cairo_serialized_size(&init_calldata); - Ok(ContractInitialized { selector, init_calldata }) + Ok(ContractInitialized { + selector, + init_calldata, + }) } } impl ContractInitialized { @@ -124,10 +131,18 @@ impl cainome::cairo_serde::CairoSerde for ContractRegistered { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.name)); - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.namespace)); - __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(&__rust.address)); - __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize(&__rust.class_hash)); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.name, + )); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.namespace, + )); + __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + &__rust.address, + )); + __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + &__rust.class_hash, + )); __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.salt)); __out } @@ -146,7 +161,13 @@ impl cainome::cairo_serde::CairoSerde for ContractRegistered { __offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); let salt = starknet::core::types::Felt::cairo_deserialize(__felts, __offset)?; __offset += starknet::core::types::Felt::cairo_serialized_size(&salt); - Ok(ContractRegistered { name, namespace, address, class_hash, salt }) + Ok(ContractRegistered { + name, + namespace, + address, + class_hash, + salt, + }) } } impl ContractRegistered { @@ -174,8 +195,12 @@ impl cainome::cairo_serde::CairoSerde for ContractUpgraded { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.selector)); - __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize(&__rust.class_hash)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); + __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + &__rust.class_hash, + )); __out } fn cairo_deserialize( @@ -187,7 +212,10 @@ impl cainome::cairo_serde::CairoSerde for ContractUpgraded { __offset += starknet::core::types::Felt::cairo_serialized_size(&selector); let class_hash = cainome::cairo_serde::ClassHash::cairo_deserialize(__felts, __offset)?; __offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); - Ok(ContractUpgraded { selector, class_hash }) + Ok(ContractUpgraded { + selector, + class_hash, + }) } } impl ContractUpgraded { @@ -220,11 +248,18 @@ impl cainome::cairo_serde::CairoSerde for EventEmitted { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.selector)); - __out - .extend(cainome::cairo_serde::ContractAddress::cairo_serialize(&__rust.system_address)); - __out.extend(Vec::::cairo_serialize(&__rust.keys)); - __out.extend(Vec::::cairo_serialize(&__rust.values)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); + __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + &__rust.system_address, + )); + __out.extend(Vec::::cairo_serialize( + &__rust.keys, + )); + __out.extend(Vec::::cairo_serialize( + &__rust.values, + )); __out } fn cairo_deserialize( @@ -241,7 +276,12 @@ impl cainome::cairo_serde::CairoSerde for EventEmitted { __offset += Vec::::cairo_serialized_size(&keys); let values = Vec::::cairo_deserialize(__felts, __offset)?; __offset += Vec::::cairo_serialized_size(&values); - Ok(EventEmitted { selector, system_address, keys, values }) + Ok(EventEmitted { + selector, + system_address, + keys, + values, + }) } } impl EventEmitted { @@ -273,10 +313,18 @@ impl cainome::cairo_serde::CairoSerde for EventRegistered { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.name)); - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.namespace)); - __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize(&__rust.class_hash)); - __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(&__rust.address)); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.name, + )); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.namespace, + )); + __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + &__rust.class_hash, + )); + __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + &__rust.address, + )); __out } fn cairo_deserialize( @@ -292,7 +340,12 @@ impl cainome::cairo_serde::CairoSerde for EventRegistered { __offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); let address = cainome::cairo_serde::ContractAddress::cairo_deserialize(__felts, __offset)?; __offset += cainome::cairo_serde::ContractAddress::cairo_serialized_size(&address); - Ok(EventRegistered { name, namespace, class_hash, address }) + Ok(EventRegistered { + name, + namespace, + class_hash, + address, + }) } } impl EventRegistered { @@ -325,10 +378,18 @@ impl cainome::cairo_serde::CairoSerde for EventUpgraded { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.selector)); - __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize(&__rust.class_hash)); - __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(&__rust.address)); - __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(&__rust.prev_address)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); + __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + &__rust.class_hash, + )); + __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + &__rust.address, + )); + __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + &__rust.prev_address, + )); __out } fn cairo_deserialize( @@ -345,7 +406,12 @@ impl cainome::cairo_serde::CairoSerde for EventUpgraded { let prev_address = cainome::cairo_serde::ContractAddress::cairo_deserialize(__felts, __offset)?; __offset += cainome::cairo_serde::ContractAddress::cairo_serialized_size(&prev_address); - Ok(EventUpgraded { selector, class_hash, address, prev_address }) + Ok(EventUpgraded { + selector, + class_hash, + address, + prev_address, + }) } } impl EventUpgraded { @@ -388,11 +454,21 @@ impl cainome::cairo_serde::CairoSerde for ExternalContractRegistered { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.namespace)); - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.contract_name)); - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.instance_name)); - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.contract_selector)); - __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize(&__rust.class_hash)); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.namespace, + )); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.contract_name, + )); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.instance_name, + )); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.contract_selector, + )); + __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + &__rust.class_hash, + )); __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( &__rust.contract_address, )); @@ -468,10 +544,18 @@ impl cainome::cairo_serde::CairoSerde for ExternalContractUpgraded { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.namespace)); - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.instance_name)); - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.contract_selector)); - __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize(&__rust.class_hash)); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.namespace, + )); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.instance_name, + )); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.contract_selector, + )); + __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + &__rust.class_hash, + )); __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( &__rust.contract_address, )); @@ -531,7 +615,9 @@ impl cainome::cairo_serde::CairoSerde for FieldLayout { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.selector)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); __out.extend(Layout::cairo_serialize(&__rust.layout)); __out } @@ -566,9 +652,15 @@ impl cainome::cairo_serde::CairoSerde for LibraryRegistered { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.name)); - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.namespace)); - __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize(&__rust.class_hash)); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.name, + )); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.namespace, + )); + __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + &__rust.class_hash, + )); __out } fn cairo_deserialize( @@ -582,7 +674,11 @@ impl cainome::cairo_serde::CairoSerde for LibraryRegistered { __offset += cainome::cairo_serde::ByteArray::cairo_serialized_size(&namespace); let class_hash = cainome::cairo_serde::ClassHash::cairo_deserialize(__felts, __offset)?; __offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); - Ok(LibraryRegistered { name, namespace, class_hash }) + Ok(LibraryRegistered { + name, + namespace, + class_hash, + }) } } impl LibraryRegistered { @@ -612,8 +708,12 @@ impl cainome::cairo_serde::CairoSerde for MetadataUpdate { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.resource)); - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.uri)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.resource, + )); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.uri, + )); __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.hash)); __out } @@ -628,7 +728,11 @@ impl cainome::cairo_serde::CairoSerde for MetadataUpdate { __offset += cainome::cairo_serde::ByteArray::cairo_serialized_size(&uri); let hash = starknet::core::types::Felt::cairo_deserialize(__felts, __offset)?; __offset += starknet::core::types::Felt::cairo_serialized_size(&hash); - Ok(MetadataUpdate { resource, uri, hash }) + Ok(MetadataUpdate { + resource, + uri, + hash, + }) } } impl MetadataUpdate { @@ -660,10 +764,18 @@ impl cainome::cairo_serde::CairoSerde for ModelRegistered { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.name)); - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.namespace)); - __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize(&__rust.class_hash)); - __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(&__rust.address)); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.name, + )); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.namespace, + )); + __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + &__rust.class_hash, + )); + __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + &__rust.address, + )); __out } fn cairo_deserialize( @@ -679,7 +791,12 @@ impl cainome::cairo_serde::CairoSerde for ModelRegistered { __offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); let address = cainome::cairo_serde::ContractAddress::cairo_deserialize(__felts, __offset)?; __offset += cainome::cairo_serde::ContractAddress::cairo_serialized_size(&address); - Ok(ModelRegistered { name, namespace, class_hash, address }) + Ok(ModelRegistered { + name, + namespace, + class_hash, + address, + }) } } impl ModelRegistered { @@ -712,10 +829,18 @@ impl cainome::cairo_serde::CairoSerde for ModelUpgraded { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.selector)); - __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize(&__rust.class_hash)); - __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(&__rust.address)); - __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(&__rust.prev_address)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); + __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + &__rust.class_hash, + )); + __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + &__rust.address, + )); + __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + &__rust.prev_address, + )); __out } fn cairo_deserialize( @@ -732,7 +857,12 @@ impl cainome::cairo_serde::CairoSerde for ModelUpgraded { let prev_address = cainome::cairo_serde::ContractAddress::cairo_deserialize(__felts, __offset)?; __offset += cainome::cairo_serde::ContractAddress::cairo_serialized_size(&prev_address); - Ok(ModelUpgraded { selector, class_hash, address, prev_address }) + Ok(ModelUpgraded { + selector, + class_hash, + address, + prev_address, + }) } } impl ModelUpgraded { @@ -760,7 +890,9 @@ impl cainome::cairo_serde::CairoSerde for NamespaceRegistered { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.namespace)); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.namespace, + )); __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.hash)); __out } @@ -803,8 +935,12 @@ impl cainome::cairo_serde::CairoSerde for OwnerUpdated { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.resource)); - __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(&__rust.contract)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.resource, + )); + __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + &__rust.contract, + )); __out.extend(bool::cairo_serialize(&__rust.value)); __out } @@ -819,7 +955,11 @@ impl cainome::cairo_serde::CairoSerde for OwnerUpdated { __offset += cainome::cairo_serde::ContractAddress::cairo_serialized_size(&contract); let value = bool::cairo_deserialize(__felts, __offset)?; __offset += bool::cairo_serialized_size(&value); - Ok(OwnerUpdated { resource, contract, value }) + Ok(OwnerUpdated { + resource, + contract, + value, + }) } } impl OwnerUpdated { @@ -849,9 +989,15 @@ impl cainome::cairo_serde::CairoSerde for ResourceMetadata { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.resource_id)); - __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize(&__rust.metadata_uri)); - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.metadata_hash)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.resource_id, + )); + __out.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + &__rust.metadata_uri, + )); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.metadata_hash, + )); __out } fn cairo_deserialize( @@ -865,7 +1011,11 @@ impl cainome::cairo_serde::CairoSerde for ResourceMetadata { __offset += cainome::cairo_serde::ByteArray::cairo_serialized_size(&metadata_uri); let metadata_hash = starknet::core::types::Felt::cairo_deserialize(__felts, __offset)?; __offset += starknet::core::types::Felt::cairo_serialized_size(&metadata_hash); - Ok(ResourceMetadata { resource_id, metadata_uri, metadata_hash }) + Ok(ResourceMetadata { + resource_id, + metadata_uri, + metadata_hash, + }) } } #[derive(Clone, serde::Serialize, serde::Deserialize, PartialEq, Debug)] @@ -885,8 +1035,12 @@ impl cainome::cairo_serde::CairoSerde for StoreDelRecord { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.selector)); - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.entity_id)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.entity_id, + )); __out } fn cairo_deserialize( @@ -898,7 +1052,10 @@ impl cainome::cairo_serde::CairoSerde for StoreDelRecord { __offset += starknet::core::types::Felt::cairo_serialized_size(&selector); let entity_id = starknet::core::types::Felt::cairo_deserialize(__felts, __offset)?; __offset += starknet::core::types::Felt::cairo_serialized_size(&entity_id); - Ok(StoreDelRecord { selector, entity_id }) + Ok(StoreDelRecord { + selector, + entity_id, + }) } } impl StoreDelRecord { @@ -930,10 +1087,18 @@ impl cainome::cairo_serde::CairoSerde for StoreSetRecord { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.selector)); - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.entity_id)); - __out.extend(Vec::::cairo_serialize(&__rust.keys)); - __out.extend(Vec::::cairo_serialize(&__rust.values)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.entity_id, + )); + __out.extend(Vec::::cairo_serialize( + &__rust.keys, + )); + __out.extend(Vec::::cairo_serialize( + &__rust.values, + )); __out } fn cairo_deserialize( @@ -949,7 +1114,12 @@ impl cainome::cairo_serde::CairoSerde for StoreSetRecord { __offset += Vec::::cairo_serialized_size(&keys); let values = Vec::::cairo_deserialize(__felts, __offset)?; __offset += Vec::::cairo_serialized_size(&values); - Ok(StoreSetRecord { selector, entity_id, keys, values }) + Ok(StoreSetRecord { + selector, + entity_id, + keys, + values, + }) } } impl StoreSetRecord { @@ -981,10 +1151,18 @@ impl cainome::cairo_serde::CairoSerde for StoreUpdateMember { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.selector)); - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.entity_id)); - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.member_selector)); - __out.extend(Vec::::cairo_serialize(&__rust.values)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.entity_id, + )); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.member_selector, + )); + __out.extend(Vec::::cairo_serialize( + &__rust.values, + )); __out } fn cairo_deserialize( @@ -1000,7 +1178,12 @@ impl cainome::cairo_serde::CairoSerde for StoreUpdateMember { __offset += starknet::core::types::Felt::cairo_serialized_size(&member_selector); let values = Vec::::cairo_deserialize(__felts, __offset)?; __offset += Vec::::cairo_serialized_size(&values); - Ok(StoreUpdateMember { selector, entity_id, member_selector, values }) + Ok(StoreUpdateMember { + selector, + entity_id, + member_selector, + values, + }) } } impl StoreUpdateMember { @@ -1012,6 +1195,72 @@ impl StoreUpdateMember { } } #[derive(Clone, serde::Serialize, serde::Deserialize, PartialEq, Debug)] +pub struct StoreUpdateMembers { + pub selector: starknet::core::types::Felt, + pub entity_id: starknet::core::types::Felt, + pub member_selectors: Vec, + pub values: Vec, +} +impl cainome::cairo_serde::CairoSerde for StoreUpdateMembers { + type RustType = Self; + const SERIALIZED_SIZE: std::option::Option = None; + #[inline] + fn cairo_serialized_size(__rust: &Self::RustType) -> usize { + let mut __size = 0; + __size += starknet::core::types::Felt::cairo_serialized_size(&__rust.selector); + __size += starknet::core::types::Felt::cairo_serialized_size(&__rust.entity_id); + __size += + Vec::::cairo_serialized_size(&__rust.member_selectors); + __size += Vec::::cairo_serialized_size(&__rust.values); + __size + } + fn cairo_serialize(__rust: &Self::RustType) -> Vec { + let mut __out: Vec = vec![]; + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.entity_id, + )); + __out.extend(Vec::::cairo_serialize( + &__rust.member_selectors, + )); + __out.extend(Vec::::cairo_serialize( + &__rust.values, + )); + __out + } + fn cairo_deserialize( + __felts: &[starknet::core::types::Felt], + __offset: usize, + ) -> cainome::cairo_serde::Result { + let mut __offset = __offset; + let selector = starknet::core::types::Felt::cairo_deserialize(__felts, __offset)?; + __offset += starknet::core::types::Felt::cairo_serialized_size(&selector); + let entity_id = starknet::core::types::Felt::cairo_deserialize(__felts, __offset)?; + __offset += starknet::core::types::Felt::cairo_serialized_size(&entity_id); + let member_selectors = + Vec::::cairo_deserialize(__felts, __offset)?; + __offset += Vec::::cairo_serialized_size(&member_selectors); + let values = Vec::::cairo_deserialize(__felts, __offset)?; + __offset += Vec::::cairo_serialized_size(&values); + Ok(StoreUpdateMembers { + selector, + entity_id, + member_selectors, + values, + }) + } +} +impl StoreUpdateMembers { + pub fn event_selector() -> starknet::core::types::Felt { + starknet::core::utils::get_selector_from_name("StoreUpdateMembers").unwrap() + } + pub fn event_name() -> &'static str { + "StoreUpdateMembers" + } +} +#[derive(Clone, serde::Serialize, serde::Deserialize, PartialEq, Debug)] pub struct StoreUpdateRecord { pub selector: starknet::core::types::Felt, pub entity_id: starknet::core::types::Felt, @@ -1030,9 +1279,15 @@ impl cainome::cairo_serde::CairoSerde for StoreUpdateRecord { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.selector)); - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.entity_id)); - __out.extend(Vec::::cairo_serialize(&__rust.values)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.selector, + )); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.entity_id, + )); + __out.extend(Vec::::cairo_serialize( + &__rust.values, + )); __out } fn cairo_deserialize( @@ -1046,7 +1301,11 @@ impl cainome::cairo_serde::CairoSerde for StoreUpdateRecord { __offset += starknet::core::types::Felt::cairo_serialized_size(&entity_id); let values = Vec::::cairo_deserialize(__felts, __offset)?; __offset += Vec::::cairo_serialized_size(&values); - Ok(StoreUpdateRecord { selector, entity_id, values }) + Ok(StoreUpdateRecord { + selector, + entity_id, + values, + }) } } impl StoreUpdateRecord { @@ -1074,8 +1333,12 @@ impl cainome::cairo_serde::CairoSerde for WorldSpawned { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(&__rust.creator)); - __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize(&__rust.class_hash)); + __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + &__rust.creator, + )); + __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + &__rust.class_hash, + )); __out } fn cairo_deserialize( @@ -1087,7 +1350,10 @@ impl cainome::cairo_serde::CairoSerde for WorldSpawned { __offset += cainome::cairo_serde::ContractAddress::cairo_serialized_size(&creator); let class_hash = cainome::cairo_serde::ClassHash::cairo_deserialize(__felts, __offset)?; __offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); - Ok(WorldSpawned { creator, class_hash }) + Ok(WorldSpawned { + creator, + class_hash, + }) } } impl WorldSpawned { @@ -1113,7 +1379,9 @@ impl cainome::cairo_serde::CairoSerde for WorldUpgraded { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize(&__rust.class_hash)); + __out.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + &__rust.class_hash, + )); __out } fn cairo_deserialize( @@ -1153,8 +1421,12 @@ impl cainome::cairo_serde::CairoSerde for WriterUpdated { } fn cairo_serialize(__rust: &Self::RustType) -> Vec { let mut __out: Vec = vec![]; - __out.extend(starknet::core::types::Felt::cairo_serialize(&__rust.resource)); - __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(&__rust.contract)); + __out.extend(starknet::core::types::Felt::cairo_serialize( + &__rust.resource, + )); + __out.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + &__rust.contract, + )); __out.extend(bool::cairo_serialize(&__rust.value)); __out } @@ -1169,7 +1441,11 @@ impl cainome::cairo_serde::CairoSerde for WriterUpdated { __offset += cainome::cairo_serde::ContractAddress::cairo_serialized_size(&contract); let value = bool::cairo_deserialize(__felts, __offset)?; __offset += bool::cairo_serialized_size(&value); - Ok(WriterUpdated { resource, contract, value }) + Ok(WriterUpdated { + resource, + contract, + value, + }) } } impl WriterUpdated { @@ -1200,6 +1476,7 @@ pub enum Event { StoreSetRecord(StoreSetRecord), StoreUpdateRecord(StoreUpdateRecord), StoreUpdateMember(StoreUpdateMember), + StoreUpdateMembers(StoreUpdateMembers), StoreDelRecord(StoreDelRecord), WriterUpdated(WriterUpdated), OwnerUpdated(OwnerUpdated), @@ -1232,6 +1509,7 @@ impl cainome::cairo_serde::CairoSerde for Event { Event::StoreSetRecord(val) => StoreSetRecord::cairo_serialized_size(val) + 1, Event::StoreUpdateRecord(val) => StoreUpdateRecord::cairo_serialized_size(val) + 1, Event::StoreUpdateMember(val) => StoreUpdateMember::cairo_serialized_size(val) + 1, + Event::StoreUpdateMembers(val) => StoreUpdateMembers::cairo_serialized_size(val) + 1, Event::StoreDelRecord(val) => StoreDelRecord::cairo_serialized_size(val) + 1, Event::WriterUpdated(val) => WriterUpdated::cairo_serialized_size(val) + 1, Event::OwnerUpdated(val) => OwnerUpdated::cairo_serialized_size(val) + 1, @@ -1348,21 +1626,27 @@ impl cainome::cairo_serde::CairoSerde for Event { temp.extend(StoreUpdateMember::cairo_serialize(val)); temp } - Event::StoreDelRecord(val) => { + Event::StoreUpdateMembers(val) => { let mut temp = vec![]; temp.extend(usize::cairo_serialize(&18usize)); + temp.extend(StoreUpdateMembers::cairo_serialize(val)); + temp + } + Event::StoreDelRecord(val) => { + let mut temp = vec![]; + temp.extend(usize::cairo_serialize(&19usize)); temp.extend(StoreDelRecord::cairo_serialize(val)); temp } Event::WriterUpdated(val) => { let mut temp = vec![]; - temp.extend(usize::cairo_serialize(&19usize)); + temp.extend(usize::cairo_serialize(&20usize)); temp.extend(WriterUpdated::cairo_serialize(val)); temp } Event::OwnerUpdated(val) => { let mut temp = vec![]; - temp.extend(usize::cairo_serialize(&20usize)); + temp.extend(usize::cairo_serialize(&21usize)); temp.extend(OwnerUpdated::cairo_serialize(val)); temp } @@ -1376,78 +1660,84 @@ impl cainome::cairo_serde::CairoSerde for Event { let __f = __felts[__offset]; let __index = u128::from_be_bytes(__f.to_bytes_be()[16..].try_into().unwrap()); match __index as usize { - 0usize => { - Ok(Event::WorldSpawned(WorldSpawned::cairo_deserialize(__felts, __offset + 1)?)) - } - 1usize => { - Ok(Event::WorldUpgraded(WorldUpgraded::cairo_deserialize(__felts, __offset + 1)?)) - } - 2usize => Ok(Event::NamespaceRegistered(NamespaceRegistered::cairo_deserialize( + 0usize => Ok(Event::WorldSpawned(WorldSpawned::cairo_deserialize( __felts, __offset + 1, )?)), - 3usize => Ok(Event::ModelRegistered(ModelRegistered::cairo_deserialize( + 1usize => Ok(Event::WorldUpgraded(WorldUpgraded::cairo_deserialize( __felts, __offset + 1, )?)), - 4usize => Ok(Event::EventRegistered(EventRegistered::cairo_deserialize( + 2usize => Ok(Event::NamespaceRegistered( + NamespaceRegistered::cairo_deserialize(__felts, __offset + 1)?, + )), + 3usize => Ok(Event::ModelRegistered(ModelRegistered::cairo_deserialize( __felts, __offset + 1, )?)), - 5usize => Ok(Event::ContractRegistered(ContractRegistered::cairo_deserialize( + 4usize => Ok(Event::EventRegistered(EventRegistered::cairo_deserialize( __felts, __offset + 1, )?)), + 5usize => Ok(Event::ContractRegistered( + ContractRegistered::cairo_deserialize(__felts, __offset + 1)?, + )), 6usize => Ok(Event::ExternalContractRegistered( ExternalContractRegistered::cairo_deserialize(__felts, __offset + 1)?, )), 7usize => Ok(Event::ExternalContractUpgraded( ExternalContractUpgraded::cairo_deserialize(__felts, __offset + 1)?, )), - 8usize => { - Ok(Event::ModelUpgraded(ModelUpgraded::cairo_deserialize(__felts, __offset + 1)?)) - } - 9usize => { - Ok(Event::EventUpgraded(EventUpgraded::cairo_deserialize(__felts, __offset + 1)?)) - } - 10usize => Ok(Event::ContractUpgraded(ContractUpgraded::cairo_deserialize( + 8usize => Ok(Event::ModelUpgraded(ModelUpgraded::cairo_deserialize( __felts, __offset + 1, )?)), - 11usize => Ok(Event::ContractInitialized(ContractInitialized::cairo_deserialize( + 9usize => Ok(Event::EventUpgraded(EventUpgraded::cairo_deserialize( __felts, __offset + 1, )?)), - 12usize => Ok(Event::LibraryRegistered(LibraryRegistered::cairo_deserialize( + 10usize => Ok(Event::ContractUpgraded( + ContractUpgraded::cairo_deserialize(__felts, __offset + 1)?, + )), + 11usize => Ok(Event::ContractInitialized( + ContractInitialized::cairo_deserialize(__felts, __offset + 1)?, + )), + 12usize => Ok(Event::LibraryRegistered( + LibraryRegistered::cairo_deserialize(__felts, __offset + 1)?, + )), + 13usize => Ok(Event::EventEmitted(EventEmitted::cairo_deserialize( __felts, __offset + 1, )?)), - 13usize => { - Ok(Event::EventEmitted(EventEmitted::cairo_deserialize(__felts, __offset + 1)?)) - } - 14usize => { - Ok(Event::MetadataUpdate(MetadataUpdate::cairo_deserialize(__felts, __offset + 1)?)) - } - 15usize => { - Ok(Event::StoreSetRecord(StoreSetRecord::cairo_deserialize(__felts, __offset + 1)?)) - } - 16usize => Ok(Event::StoreUpdateRecord(StoreUpdateRecord::cairo_deserialize( + 14usize => Ok(Event::MetadataUpdate(MetadataUpdate::cairo_deserialize( __felts, __offset + 1, )?)), - 17usize => Ok(Event::StoreUpdateMember(StoreUpdateMember::cairo_deserialize( + 15usize => Ok(Event::StoreSetRecord(StoreSetRecord::cairo_deserialize( + __felts, + __offset + 1, + )?)), + 16usize => Ok(Event::StoreUpdateRecord( + StoreUpdateRecord::cairo_deserialize(__felts, __offset + 1)?, + )), + 17usize => Ok(Event::StoreUpdateMember( + StoreUpdateMember::cairo_deserialize(__felts, __offset + 1)?, + )), + 18usize => Ok(Event::StoreUpdateMembers( + StoreUpdateMembers::cairo_deserialize(__felts, __offset + 1)?, + )), + 19usize => Ok(Event::StoreDelRecord(StoreDelRecord::cairo_deserialize( + __felts, + __offset + 1, + )?)), + 20usize => Ok(Event::WriterUpdated(WriterUpdated::cairo_deserialize( + __felts, + __offset + 1, + )?)), + 21usize => Ok(Event::OwnerUpdated(OwnerUpdated::cairo_deserialize( __felts, __offset + 1, )?)), - 18usize => { - Ok(Event::StoreDelRecord(StoreDelRecord::cairo_deserialize(__felts, __offset + 1)?)) - } - 19usize => { - Ok(Event::WriterUpdated(WriterUpdated::cairo_deserialize(__felts, __offset + 1)?)) - } - 20usize => { - Ok(Event::OwnerUpdated(OwnerUpdated::cairo_deserialize(__felts, __offset + 1)?)) - } _ => { return Err(cainome::cairo_serde::Error::Deserialize(format!( "Index not handle for enum {}", @@ -1497,7 +1787,10 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { } }; data_offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); - return Ok(Event::WorldSpawned(WorldSpawned { creator, class_hash })); + return Ok(Event::WorldSpawned(WorldSpawned { + creator, + class_hash, + })); } let selector = event.keys[0]; if selector @@ -1550,7 +1843,10 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { } }; data_offset += starknet::core::types::Felt::cairo_serialized_size(&hash); - return Ok(Event::NamespaceRegistered(NamespaceRegistered { namespace, hash })); + return Ok(Event::NamespaceRegistered(NamespaceRegistered { + namespace, + hash, + })); } let selector = event.keys[0]; if selector @@ -1838,15 +2134,17 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { } }; data_offset += u64::cairo_serialized_size(&block_number); - return Ok(Event::ExternalContractRegistered(ExternalContractRegistered { - namespace, - contract_name, - instance_name, - contract_selector, - class_hash, - contract_address, - block_number, - })); + return Ok(Event::ExternalContractRegistered( + ExternalContractRegistered { + namespace, + contract_name, + instance_name, + contract_selector, + class_hash, + contract_address, + block_number, + }, + )); } let selector = event.keys[0]; if selector @@ -2095,7 +2393,10 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { } }; data_offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); - return Ok(Event::ContractUpgraded(ContractUpgraded { selector, class_hash })); + return Ok(Event::ContractUpgraded(ContractUpgraded { + selector, + class_hash, + })); } let selector = event.keys[0]; if selector @@ -2129,7 +2430,10 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { }; data_offset += Vec::::cairo_serialized_size(&init_calldata); - return Ok(Event::ContractInitialized(ContractInitialized { selector, init_calldata })); + return Ok(Event::ContractInitialized(ContractInitialized { + selector, + init_calldata, + })); } let selector = event.keys[0]; if selector @@ -2173,7 +2477,11 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { } }; data_offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); - return Ok(Event::LibraryRegistered(LibraryRegistered { name, namespace, class_hash })); + return Ok(Event::LibraryRegistered(LibraryRegistered { + name, + namespace, + class_hash, + })); } let selector = event.keys[0]; if selector @@ -2282,7 +2590,11 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { } }; data_offset += starknet::core::types::Felt::cairo_serialized_size(&hash); - return Ok(Event::MetadataUpdate(MetadataUpdate { resource, uri, hash })); + return Ok(Event::MetadataUpdate(MetadataUpdate { + resource, + uri, + hash, + })); } let selector = event.keys[0]; if selector @@ -2339,7 +2651,12 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { } }; data_offset += Vec::::cairo_serialized_size(&values); - return Ok(Event::StoreSetRecord(StoreSetRecord { selector, entity_id, keys, values })); + return Ok(Event::StoreSetRecord(StoreSetRecord { + selector, + entity_id, + keys, + values, + })); } let selector = event.keys[0]; if selector @@ -2383,7 +2700,11 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { } }; data_offset += Vec::::cairo_serialized_size(&values); - return Ok(Event::StoreUpdateRecord(StoreUpdateRecord { selector, entity_id, values })); + return Ok(Event::StoreUpdateRecord(StoreUpdateRecord { + selector, + entity_id, + values, + })); } let selector = event.keys[0]; if selector @@ -2446,6 +2767,69 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { })); } let selector = event.keys[0]; + if selector + == starknet::core::utils::get_selector_from_name("StoreUpdateMembers") + .unwrap_or_else(|_| panic!("Invalid selector for {}", "StoreUpdateMembers")) + { + let mut key_offset = 0 + 1; + let mut data_offset = 0; + let selector = + match starknet::core::types::Felt::cairo_deserialize(&event.keys, key_offset) { + Ok(v) => v, + Err(e) => { + return Err(format!( + "Could not deserialize field {} for {}: {:?}", + "selector", "StoreUpdateMembers", e + )); + } + }; + key_offset += starknet::core::types::Felt::cairo_serialized_size(&selector); + let entity_id = + match starknet::core::types::Felt::cairo_deserialize(&event.keys, key_offset) { + Ok(v) => v, + Err(e) => { + return Err(format!( + "Could not deserialize field {} for {}: {:?}", + "entity_id", "StoreUpdateMembers", e + )); + } + }; + key_offset += starknet::core::types::Felt::cairo_serialized_size(&entity_id); + let member_selectors = match Vec::::cairo_deserialize( + &event.data, + data_offset, + ) { + Ok(v) => v, + Err(e) => { + return Err(format!( + "Could not deserialize field {} for {}: {:?}", + "member_selectors", "StoreUpdateMembers", e + )); + } + }; + data_offset += + Vec::::cairo_serialized_size(&member_selectors); + let values = match Vec::::cairo_deserialize( + &event.data, + data_offset, + ) { + Ok(v) => v, + Err(e) => { + return Err(format!( + "Could not deserialize field {} for {}: {:?}", + "values", "StoreUpdateMembers", e + )); + } + }; + data_offset += Vec::::cairo_serialized_size(&values); + return Ok(Event::StoreUpdateMembers(StoreUpdateMembers { + selector, + entity_id, + member_selectors, + values, + })); + } + let selector = event.keys[0]; if selector == starknet::core::utils::get_selector_from_name("StoreDelRecord") .unwrap_or_else(|_| panic!("Invalid selector for {}", "StoreDelRecord")) @@ -2474,7 +2858,10 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { } }; key_offset += starknet::core::types::Felt::cairo_serialized_size(&entity_id); - return Ok(Event::StoreDelRecord(StoreDelRecord { selector, entity_id })); + return Ok(Event::StoreDelRecord(StoreDelRecord { + selector, + entity_id, + })); } let selector = event.keys[0]; if selector @@ -2517,7 +2904,11 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { } }; data_offset += bool::cairo_serialized_size(&value); - return Ok(Event::WriterUpdated(WriterUpdated { resource, contract, value })); + return Ok(Event::WriterUpdated(WriterUpdated { + resource, + contract, + value, + })); } let selector = event.keys[0]; if selector @@ -2560,9 +2951,16 @@ impl TryFrom<&starknet::core::types::EmittedEvent> for Event { } }; data_offset += bool::cairo_serialized_size(&value); - return Ok(Event::OwnerUpdated(OwnerUpdated { resource, contract, value })); + return Ok(Event::OwnerUpdated(OwnerUpdated { + resource, + contract, + value, + })); } - Err(format!("Could not match any event from keys {:?}", event.keys)) + Err(format!( + "Could not match any event from keys {:?}", + event.keys + )) } } impl TryFrom<&starknet::core::types::Event> for Event { @@ -2605,7 +3003,10 @@ impl TryFrom<&starknet::core::types::Event> for Event { } }; data_offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); - return Ok(Event::WorldSpawned(WorldSpawned { creator, class_hash })); + return Ok(Event::WorldSpawned(WorldSpawned { + creator, + class_hash, + })); } let selector = event.keys[0]; if selector @@ -2658,7 +3059,10 @@ impl TryFrom<&starknet::core::types::Event> for Event { } }; data_offset += starknet::core::types::Felt::cairo_serialized_size(&hash); - return Ok(Event::NamespaceRegistered(NamespaceRegistered { namespace, hash })); + return Ok(Event::NamespaceRegistered(NamespaceRegistered { + namespace, + hash, + })); } let selector = event.keys[0]; if selector @@ -2946,15 +3350,17 @@ impl TryFrom<&starknet::core::types::Event> for Event { } }; data_offset += u64::cairo_serialized_size(&block_number); - return Ok(Event::ExternalContractRegistered(ExternalContractRegistered { - namespace, - contract_name, - instance_name, - contract_selector, - class_hash, - contract_address, - block_number, - })); + return Ok(Event::ExternalContractRegistered( + ExternalContractRegistered { + namespace, + contract_name, + instance_name, + contract_selector, + class_hash, + contract_address, + block_number, + }, + )); } let selector = event.keys[0]; if selector @@ -3203,7 +3609,10 @@ impl TryFrom<&starknet::core::types::Event> for Event { } }; data_offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); - return Ok(Event::ContractUpgraded(ContractUpgraded { selector, class_hash })); + return Ok(Event::ContractUpgraded(ContractUpgraded { + selector, + class_hash, + })); } let selector = event.keys[0]; if selector @@ -3237,7 +3646,10 @@ impl TryFrom<&starknet::core::types::Event> for Event { }; data_offset += Vec::::cairo_serialized_size(&init_calldata); - return Ok(Event::ContractInitialized(ContractInitialized { selector, init_calldata })); + return Ok(Event::ContractInitialized(ContractInitialized { + selector, + init_calldata, + })); } let selector = event.keys[0]; if selector @@ -3281,7 +3693,11 @@ impl TryFrom<&starknet::core::types::Event> for Event { } }; data_offset += cainome::cairo_serde::ClassHash::cairo_serialized_size(&class_hash); - return Ok(Event::LibraryRegistered(LibraryRegistered { name, namespace, class_hash })); + return Ok(Event::LibraryRegistered(LibraryRegistered { + name, + namespace, + class_hash, + })); } let selector = event.keys[0]; if selector @@ -3390,7 +3806,11 @@ impl TryFrom<&starknet::core::types::Event> for Event { } }; data_offset += starknet::core::types::Felt::cairo_serialized_size(&hash); - return Ok(Event::MetadataUpdate(MetadataUpdate { resource, uri, hash })); + return Ok(Event::MetadataUpdate(MetadataUpdate { + resource, + uri, + hash, + })); } let selector = event.keys[0]; if selector @@ -3447,7 +3867,12 @@ impl TryFrom<&starknet::core::types::Event> for Event { } }; data_offset += Vec::::cairo_serialized_size(&values); - return Ok(Event::StoreSetRecord(StoreSetRecord { selector, entity_id, keys, values })); + return Ok(Event::StoreSetRecord(StoreSetRecord { + selector, + entity_id, + keys, + values, + })); } let selector = event.keys[0]; if selector @@ -3491,7 +3916,11 @@ impl TryFrom<&starknet::core::types::Event> for Event { } }; data_offset += Vec::::cairo_serialized_size(&values); - return Ok(Event::StoreUpdateRecord(StoreUpdateRecord { selector, entity_id, values })); + return Ok(Event::StoreUpdateRecord(StoreUpdateRecord { + selector, + entity_id, + values, + })); } let selector = event.keys[0]; if selector @@ -3554,6 +3983,69 @@ impl TryFrom<&starknet::core::types::Event> for Event { })); } let selector = event.keys[0]; + if selector + == starknet::core::utils::get_selector_from_name("StoreUpdateMembers") + .unwrap_or_else(|_| panic!("Invalid selector for {}", "StoreUpdateMembers")) + { + let mut key_offset = 0 + 1; + let mut data_offset = 0; + let selector = + match starknet::core::types::Felt::cairo_deserialize(&event.keys, key_offset) { + Ok(v) => v, + Err(e) => { + return Err(format!( + "Could not deserialize field {} for {}: {:?}", + "selector", "StoreUpdateMembers", e + )); + } + }; + key_offset += starknet::core::types::Felt::cairo_serialized_size(&selector); + let entity_id = + match starknet::core::types::Felt::cairo_deserialize(&event.keys, key_offset) { + Ok(v) => v, + Err(e) => { + return Err(format!( + "Could not deserialize field {} for {}: {:?}", + "entity_id", "StoreUpdateMembers", e + )); + } + }; + key_offset += starknet::core::types::Felt::cairo_serialized_size(&entity_id); + let member_selectors = match Vec::::cairo_deserialize( + &event.data, + data_offset, + ) { + Ok(v) => v, + Err(e) => { + return Err(format!( + "Could not deserialize field {} for {}: {:?}", + "member_selectors", "StoreUpdateMembers", e + )); + } + }; + data_offset += + Vec::::cairo_serialized_size(&member_selectors); + let values = match Vec::::cairo_deserialize( + &event.data, + data_offset, + ) { + Ok(v) => v, + Err(e) => { + return Err(format!( + "Could not deserialize field {} for {}: {:?}", + "values", "StoreUpdateMembers", e + )); + } + }; + data_offset += Vec::::cairo_serialized_size(&values); + return Ok(Event::StoreUpdateMembers(StoreUpdateMembers { + selector, + entity_id, + member_selectors, + values, + })); + } + let selector = event.keys[0]; if selector == starknet::core::utils::get_selector_from_name("StoreDelRecord") .unwrap_or_else(|_| panic!("Invalid selector for {}", "StoreDelRecord")) @@ -3582,7 +4074,10 @@ impl TryFrom<&starknet::core::types::Event> for Event { } }; key_offset += starknet::core::types::Felt::cairo_serialized_size(&entity_id); - return Ok(Event::StoreDelRecord(StoreDelRecord { selector, entity_id })); + return Ok(Event::StoreDelRecord(StoreDelRecord { + selector, + entity_id, + })); } let selector = event.keys[0]; if selector @@ -3625,7 +4120,11 @@ impl TryFrom<&starknet::core::types::Event> for Event { } }; data_offset += bool::cairo_serialized_size(&value); - return Ok(Event::WriterUpdated(WriterUpdated { resource, contract, value })); + return Ok(Event::WriterUpdated(WriterUpdated { + resource, + contract, + value, + })); } let selector = event.keys[0]; if selector @@ -3668,9 +4167,16 @@ impl TryFrom<&starknet::core::types::Event> for Event { } }; data_offset += bool::cairo_serialized_size(&value); - return Ok(Event::OwnerUpdated(OwnerUpdated { resource, contract, value })); + return Ok(Event::OwnerUpdated(OwnerUpdated { + resource, + contract, + value, + })); } - Err(format!("Could not match any event from keys {:?}", event.keys)) + Err(format!( + "Could not match any event from keys {:?}", + event.keys + )) } } #[derive(Clone, serde::Serialize, serde::Deserialize, PartialEq, Debug)] @@ -3748,20 +4254,31 @@ impl cainome::cairo_serde::CairoSerde for Layout { let __f = __felts[__offset]; let __index = u128::from_be_bytes(__f.to_bytes_be()[16..].try_into().unwrap()); match __index as usize { - 0usize => Ok(Layout::Fixed(Vec::::cairo_deserialize(__felts, __offset + 1)?)), - 1usize => { - Ok(Layout::Struct(Vec::::cairo_deserialize(__felts, __offset + 1)?)) - } - 2usize => Ok(Layout::Tuple(Vec::::cairo_deserialize(__felts, __offset + 1)?)), - 3usize => Ok(Layout::Array(Vec::::cairo_deserialize(__felts, __offset + 1)?)), + 0usize => Ok(Layout::Fixed(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), + 1usize => Ok(Layout::Struct(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), + 2usize => Ok(Layout::Tuple(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), + 3usize => Ok(Layout::Array(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), 4usize => Ok(Layout::FixedArray(Vec::<(Layout, u32)>::cairo_deserialize( __felts, __offset + 1, )?)), 5usize => Ok(Layout::ByteArray), - 6usize => { - Ok(Layout::Enum(Vec::::cairo_deserialize(__felts, __offset + 1)?)) - } + 6usize => Ok(Layout::Enum(Vec::::cairo_deserialize( + __felts, + __offset + 1, + )?)), _ => { return Err(cainome::cairo_serde::Error::Deserialize(format!( "Index not handle for enum {}", @@ -3776,6 +4293,7 @@ pub enum ModelIndex { Keys(Vec), Id(starknet::core::types::Felt), MemberId((starknet::core::types::Felt, starknet::core::types::Felt)), + Schema(starknet::core::types::Felt), } impl cainome::cairo_serde::CairoSerde for ModelIndex { type RustType = Self; @@ -3792,6 +4310,7 @@ impl cainome::cairo_serde::CairoSerde for ModelIndex { val, ) + 1 } + ModelIndex::Schema(val) => starknet::core::types::Felt::cairo_serialized_size(val) + 1, _ => 0, } } @@ -3819,6 +4338,12 @@ impl cainome::cairo_serde::CairoSerde for ModelIndex { ); temp } + ModelIndex::Schema(val) => { + let mut temp = vec![]; + temp.extend(usize::cairo_serialize(&3usize)); + temp.extend(starknet::core::types::Felt::cairo_serialize(val)); + temp + } _ => vec![], } } @@ -3829,20 +4354,21 @@ impl cainome::cairo_serde::CairoSerde for ModelIndex { let __f = __felts[__offset]; let __index = u128::from_be_bytes(__f.to_bytes_be()[16..].try_into().unwrap()); match __index as usize { - 0usize => Ok(ModelIndex::Keys(Vec::::cairo_deserialize( - __felts, - __offset + 1, - )?)), - 1usize => Ok(ModelIndex::Id(starknet::core::types::Felt::cairo_deserialize( - __felts, - __offset + 1, - )?)), + 0usize => Ok(ModelIndex::Keys( + Vec::::cairo_deserialize(__felts, __offset + 1)?, + )), + 1usize => Ok(ModelIndex::Id( + starknet::core::types::Felt::cairo_deserialize(__felts, __offset + 1)?, + )), 2usize => Ok(ModelIndex::MemberId(<( starknet::core::types::Felt, starknet::core::types::Felt, )>::cairo_deserialize( __felts, __offset + 1 )?)), + 3usize => Ok(ModelIndex::Schema( + starknet::core::types::Felt::cairo_deserialize(__felts, __offset + 1)?, + )), _ => { return Err(cainome::cairo_serde::Error::Deserialize(format!( "Index not handle for enum {}", @@ -3854,14 +4380,34 @@ impl cainome::cairo_serde::CairoSerde for ModelIndex { } #[derive(Clone, serde::Serialize, serde::Deserialize, PartialEq, Debug)] pub enum Resource { - Model((cainome::cairo_serde::ContractAddress, starknet::core::types::Felt)), - Event((cainome::cairo_serde::ContractAddress, starknet::core::types::Felt)), - Contract((cainome::cairo_serde::ContractAddress, starknet::core::types::Felt)), + Model( + ( + cainome::cairo_serde::ContractAddress, + starknet::core::types::Felt, + ), + ), + Event( + ( + cainome::cairo_serde::ContractAddress, + starknet::core::types::Felt, + ), + ), + Contract( + ( + cainome::cairo_serde::ContractAddress, + starknet::core::types::Felt, + ), + ), Namespace(cainome::cairo_serde::ByteArray), World, Unregistered, Library((cainome::cairo_serde::ClassHash, starknet::core::types::Felt)), - ExternalContract((cainome::cairo_serde::ContractAddress, starknet::core::types::Felt)), + ExternalContract( + ( + cainome::cairo_serde::ContractAddress, + starknet::core::types::Felt, + ), + ), } impl cainome::cairo_serde::CairoSerde for Resource { type RustType = Self; @@ -3869,21 +4415,27 @@ impl cainome::cairo_serde::CairoSerde for Resource { #[inline] fn cairo_serialized_size(__rust: &Self::RustType) -> usize { match __rust { - Resource::Model(val) => <( - cainome::cairo_serde::ContractAddress, - starknet::core::types::Felt, - )>::cairo_serialized_size(val) - + 1, - Resource::Event(val) => <( - cainome::cairo_serde::ContractAddress, - starknet::core::types::Felt, - )>::cairo_serialized_size(val) - + 1, - Resource::Contract(val) => <( - cainome::cairo_serde::ContractAddress, - starknet::core::types::Felt, - )>::cairo_serialized_size(val) - + 1, + Resource::Model(val) => { + <( + cainome::cairo_serde::ContractAddress, + starknet::core::types::Felt, + )>::cairo_serialized_size(val) + + 1 + } + Resource::Event(val) => { + <( + cainome::cairo_serde::ContractAddress, + starknet::core::types::Felt, + )>::cairo_serialized_size(val) + + 1 + } + Resource::Contract(val) => { + <( + cainome::cairo_serde::ContractAddress, + starknet::core::types::Felt, + )>::cairo_serialized_size(val) + + 1 + } Resource::Namespace(val) => { cainome::cairo_serde::ByteArray::cairo_serialized_size(val) + 1 } @@ -3894,11 +4446,13 @@ impl cainome::cairo_serde::CairoSerde for Resource { starknet::core::types::Felt, )>::cairo_serialized_size(val) + 1, - Resource::ExternalContract(val) => <( - cainome::cairo_serde::ContractAddress, - starknet::core::types::Felt, - )>::cairo_serialized_size(val) - + 1, + Resource::ExternalContract(val) => { + <( + cainome::cairo_serde::ContractAddress, + starknet::core::types::Felt, + )>::cairo_serialized_size(val) + + 1 + } _ => 0, } } @@ -3970,29 +4524,32 @@ impl cainome::cairo_serde::CairoSerde for Resource { 0usize => Ok(Resource::Model(<( cainome::cairo_serde::ContractAddress, starknet::core::types::Felt, - )>::cairo_deserialize(__felts, __offset + 1)?)), + )>::cairo_deserialize( + __felts, __offset + 1 + )?)), 1usize => Ok(Resource::Event(<( cainome::cairo_serde::ContractAddress, starknet::core::types::Felt, - )>::cairo_deserialize(__felts, __offset + 1)?)), - 2usize => { - Ok(Resource::Contract(<( - cainome::cairo_serde::ContractAddress, - starknet::core::types::Felt, - )>::cairo_deserialize(__felts, __offset + 1)?)) - } - 3usize => Ok(Resource::Namespace(cainome::cairo_serde::ByteArray::cairo_deserialize( - __felts, - __offset + 1, + )>::cairo_deserialize( + __felts, __offset + 1 )?)), + 2usize => Ok(Resource::Contract(<( + cainome::cairo_serde::ContractAddress, + starknet::core::types::Felt, + )>::cairo_deserialize( + __felts, __offset + 1 + )?)), + 3usize => Ok(Resource::Namespace( + cainome::cairo_serde::ByteArray::cairo_deserialize(__felts, __offset + 1)?, + )), 4usize => Ok(Resource::World), 5usize => Ok(Resource::Unregistered), - 6usize => { - Ok(Resource::Library(<( - cainome::cairo_serde::ClassHash, - starknet::core::types::Felt, - )>::cairo_deserialize(__felts, __offset + 1)?)) - } + 6usize => Ok(Resource::Library(<( + cainome::cairo_serde::ClassHash, + starknet::core::types::Felt, + )>::cairo_deserialize( + __felts, __offset + 1 + )?)), 7usize => Ok(Resource::ExternalContract(<( cainome::cairo_serde::ContractAddress, starknet::core::types::Felt, @@ -4059,7 +4616,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(address)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + address, + )); let __call = starknet::core::types::FunctionCall { contract_address: self.address, entry_point_selector: starknet::macros::selector!("is_owner"), @@ -4077,7 +4636,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(contract)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + contract, + )); let __call = starknet::core::types::FunctionCall { contract_address: self.address, entry_point_selector: starknet::macros::selector!("is_writer"), @@ -4093,7 +4654,9 @@ impl WorldContract { ) -> cainome::cairo_serde::call::FCall { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; - __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource_selector)); + __calldata.extend(starknet::core::types::Felt::cairo_serialize( + resource_selector, + )); let __call = starknet::core::types::FunctionCall { contract_address: self.address, entry_point_selector: starknet::macros::selector!("metadata"), @@ -4261,8 +4824,12 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(event_selector)); - __calldata.extend(Vec::>::cairo_serialize(keys)); - __calldata.extend(Vec::>::cairo_serialize(values)); + __calldata.extend(Vec::>::cairo_serialize( + keys, + )); + __calldata.extend(Vec::>::cairo_serialize( + values, + )); starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("emit_events"), @@ -4280,8 +4847,12 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(event_selector)); - __calldata.extend(Vec::>::cairo_serialize(keys)); - __calldata.extend(Vec::>::cairo_serialize(values)); + __calldata.extend(Vec::>::cairo_serialize( + keys, + )); + __calldata.extend(Vec::>::cairo_serialize( + values, + )); let __call = starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("emit_events"), @@ -4299,7 +4870,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(address)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + address, + )); starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("grant_owner"), @@ -4316,7 +4889,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(address)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + address, + )); let __call = starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("grant_owner"), @@ -4334,7 +4909,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(contract)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + contract, + )); starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("grant_writer"), @@ -4351,7 +4928,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(contract)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + contract, + )); let __call = starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("grant_writer"), @@ -4369,7 +4948,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(selector)); - __calldata.extend(Vec::::cairo_serialize(init_calldata)); + __calldata.extend(Vec::::cairo_serialize( + init_calldata, + )); starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("init_contract"), @@ -4386,7 +4967,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(selector)); - __calldata.extend(Vec::::cairo_serialize(init_calldata)); + __calldata.extend(Vec::::cairo_serialize( + init_calldata, + )); let __call = starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("init_contract"), @@ -4481,9 +5064,15 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize(namespace)); - __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize(contract_name)); - __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize(instance_name)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(contract_address)); + __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + contract_name, + )); + __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + instance_name, + )); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + contract_address, + )); __calldata.extend(u64::cairo_serialize(block_number)); starknet::core::types::Call { to: self.address, @@ -4504,9 +5093,15 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize(namespace)); - __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize(contract_name)); - __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize(instance_name)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(contract_address)); + __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + contract_name, + )); + __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + instance_name, + )); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + contract_address, + )); __calldata.extend(u64::cairo_serialize(block_number)); let __call = starknet::core::types::Call { to: self.address, @@ -4634,7 +5229,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(address)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + address, + )); starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("revoke_owner"), @@ -4651,7 +5248,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(address)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + address, + )); let __call = starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("revoke_owner"), @@ -4669,7 +5268,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(contract)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + contract, + )); starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("revoke_writer"), @@ -4686,7 +5287,9 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(contract)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + contract, + )); let __call = starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("revoke_writer"), @@ -4707,7 +5310,9 @@ impl WorldContract { let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(model_selector)); __calldata.extend(Vec::::cairo_serialize(indexes)); - __calldata.extend(Vec::>::cairo_serialize(values)); + __calldata.extend(Vec::>::cairo_serialize( + values, + )); __calldata.extend(Layout::cairo_serialize(layout)); starknet::core::types::Call { to: self.address, @@ -4728,7 +5333,9 @@ impl WorldContract { let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(model_selector)); __calldata.extend(Vec::::cairo_serialize(indexes)); - __calldata.extend(Vec::>::cairo_serialize(values)); + __calldata.extend(Vec::>::cairo_serialize( + values, + )); __calldata.extend(Layout::cairo_serialize(layout)); let __call = starknet::core::types::Call { to: self.address, @@ -4813,7 +5420,9 @@ impl WorldContract { ) -> starknet::core::types::Call { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; - __calldata.extend(cainome::cairo_serde::ClassHash::cairo_serialize(new_class_hash)); + __calldata.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + new_class_hash, + )); starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("upgrade"), @@ -4828,7 +5437,9 @@ impl WorldContract { ) -> starknet::accounts::ExecutionV3 { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; - __calldata.extend(cainome::cairo_serde::ClassHash::cairo_serialize(new_class_hash)); + __calldata.extend(cainome::cairo_serde::ClassHash::cairo_serialize( + new_class_hash, + )); let __call = starknet::core::types::Call { to: self.address, selector: starknet::macros::selector!("upgrade"), @@ -4918,8 +5529,12 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize(namespace)); - __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize(instance_name)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(contract_address)); + __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + instance_name, + )); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + contract_address, + )); __calldata.extend(u64::cairo_serialize(block_number)); starknet::core::types::Call { to: self.address, @@ -4939,8 +5554,12 @@ impl WorldContract { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize(namespace)); - __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize(instance_name)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(contract_address)); + __calldata.extend(cainome::cairo_serde::ByteArray::cairo_serialize( + instance_name, + )); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + contract_address, + )); __calldata.extend(u64::cairo_serialize(block_number)); let __call = starknet::core::types::Call { to: self.address, @@ -5059,7 +5678,9 @@ impl WorldContractReader

{ use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(address)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + address, + )); let __call = starknet::core::types::FunctionCall { contract_address: self.address, entry_point_selector: starknet::macros::selector!("is_owner"), @@ -5077,7 +5698,9 @@ impl WorldContractReader

{ use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource)); - __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize(contract)); + __calldata.extend(cainome::cairo_serde::ContractAddress::cairo_serialize( + contract, + )); let __call = starknet::core::types::FunctionCall { contract_address: self.address, entry_point_selector: starknet::macros::selector!("is_writer"), @@ -5093,7 +5716,9 @@ impl WorldContractReader

{ ) -> cainome::cairo_serde::call::FCall { use cainome::cairo_serde::CairoSerde; let mut __calldata = vec![]; - __calldata.extend(starknet::core::types::Felt::cairo_serialize(resource_selector)); + __calldata.extend(starknet::core::types::Felt::cairo_serialize( + resource_selector, + )); let __call = starknet::core::types::FunctionCall { contract_address: self.address, entry_point_selector: starknet::macros::selector!("metadata"), diff --git a/examples/benchmark/Scarb.lock b/examples/benchmark/Scarb.lock index 8d5a212b90..a4d8dc178d 100644 --- a/examples/benchmark/Scarb.lock +++ b/examples/benchmark/Scarb.lock @@ -3,7 +3,7 @@ version = 1 [[package]] name = "dojo" -version = "1.6.0-alpha.0" +version = "1.6.0-alpha.1" dependencies = [ "dojo_macros", ] @@ -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" diff --git a/examples/benchmark/src/model.cairo b/examples/benchmark/src/model.cairo index 11db1eb549..105d59edcc 100644 --- a/examples/benchmark/src/model.cairo +++ b/examples/benchmark/src/model.cairo @@ -2,7 +2,7 @@ use dojo::model::{Model, ModelStorage, ModelValueStorage}; use dojo::world::WorldStorage; use dojo_cairo_test::{NamespaceDef, TestResource, spawn_test_world}; -#[derive(Copy, Drop, Serde)] +#[derive(Copy, Drop, Serde, PartialEq)] #[dojo::model] struct Single { #[key] @@ -10,7 +10,7 @@ struct Single { v0: felt252, } -#[derive(Copy, Drop, Serde)] +#[derive(Copy, Drop, Serde, PartialEq)] #[dojo::model] struct Large { #[key] @@ -25,9 +25,6 @@ struct Large { v5: felt252, } -const SINGLE: Single = Single { k0: 1, v0: 2 }; -const LARGE: Large = Large { k0: 1, k1: 2, v0: 3, v1: 4, v2: 5, v3: 6, v4: 7, v5: 8 }; - #[derive(Copy, Drop, Serde, Introspect)] struct SingleSchema { v0: felt252, @@ -44,6 +41,15 @@ struct LargeDoubleSchema { v5: felt252, } +#[derive(Copy, Drop, Serde, Introspect)] +struct LargeQuintupleSchema { + v0: felt252, + v1: felt252, + v3: felt252, + v4: felt252, + v5: felt252, +} + #[derive(Copy, Drop, Serde, Introspect)] struct LargeSextupleSchema { v0: felt252, @@ -54,6 +60,29 @@ struct LargeSextupleSchema { v5: felt252, } +const SINGLE: Single = Single { k0: 1, v0: 2 }; +const SINGLE_VALUE: SingleValue = SingleValue { v0: 2 }; +const SINGLE_SCHEMA: SingleSchema = SingleSchema { v0: 2 }; + +const LARGE: Large = Large { k0: 1, k1: 2, v0: 3, v1: 4, v2: 5, v3: 6, v4: 7, v5: 8 }; +const LARGE_VALUE: LargeValue = LargeValue { v0: 3, v1: 4, v2: 5, v3: 6, v4: 7, v5: 8 }; +const LARGE_SCHEMA: LargeSextupleSchema = LargeSextupleSchema { + v0: 3, v1: 4, v2: 5, v3: 6, v4: 7, v5: 8, +}; + +const LARGE_SINGLE: Large = Large { k0: 1, k1: 2, v0: 0, v1: 0, v2: 0, v3: 0, v4: 0, v5: 8 }; +const LARGE_SINGLE_VALUE: LargeValue = LargeValue { v0: 0, v1: 0, v2: 0, v3: 0, v4: 0, v5: 8 }; +const LARGE_SINGLE_SCHEMA: LargeSingleSchema = LargeSingleSchema { v5: 8 }; + +const LARGE_DOUBLE: Large = Large { k0: 1, k1: 2, v0: 3, v1: 0, v2: 0, v3: 0, v4: 0, v5: 8 }; +const LARGE_DOUBLE_VALUE: LargeValue = LargeValue { v0: 3, v1: 0, v2: 0, v3: 0, v4: 0, v5: 8 }; +const LARGE_DOUBLE_SCHEMA: LargeDoubleSchema = LargeDoubleSchema { v0: 3, v5: 8 }; + +const LARGE_QUINTUPLE: Large = Large { k0: 1, k1: 2, v0: 3, v1: 4, v2: 0, v3: 6, v4: 7, v5: 8 }; +const LARGE_QUINTUPLE_VALUE: LargeValue = LargeValue { v0: 3, v1: 4, v2: 0, v3: 6, v4: 7, v5: 8 }; +const LARGE_QUINTUPLE_SCHEMA: LargeQuintupleSchema = LargeQuintupleSchema { + v0: 3, v1: 4, v3: 6, v4: 7, v5: 8, +}; fn namespace_def() -> NamespaceDef { NamespaceDef { @@ -70,6 +99,22 @@ fn spawn_foo_world() -> WorldStorage { spawn_test_world([namespace_def()].span()) } +#[test] +fn read_simple_comparison() { + let mut world = spawn_foo_world(); + world.write_model(@SINGLE); + + assert!(SINGLE.v0 == SINGLE.v0); +} + +#[test] +fn read_large_comparison() { + let mut world = spawn_foo_world(); + world.write_model(@LARGE); + + assert!(LARGE.v0 == LARGE.v0 && LARGE.v5 == LARGE.v5); +} + #[test] fn read_model_simple() { let mut world = spawn_foo_world(); @@ -182,6 +227,64 @@ fn read_double_member_large() { assert!(v0 == LARGE.v0 && v5 == LARGE.v5); } +#[test] +fn read_quintuple_model_large() { + let mut world = spawn_foo_world(); + world.write_model(@LARGE); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!( + model.v0 == LARGE.v0 + && model.v1 == LARGE.v1 + && model.v3 == LARGE.v3 + && model.v4 == LARGE.v4 + && model.v5 == LARGE.v5, + ); +} + +#[test] +fn read_quintuple_value_large() { + let mut world = spawn_foo_world(); + world.write_model(@LARGE); + + let value: LargeValue = world.read_value((LARGE.k0, LARGE.k1)); + assert!( + value.v0 == LARGE.v0 + && value.v1 == LARGE.v1 + && value.v3 == LARGE.v3 + && value.v4 == LARGE.v4 + && value.v5 == LARGE.v5, + ); +} + +#[test] +fn read_quintuple_schema_large() { + let mut world = spawn_foo_world(); + world.write_model(@LARGE); + + let schema: LargeQuintupleSchema = world.read_schema(LARGE.ptr()); + assert!( + schema.v0 == LARGE.v0 + && schema.v1 == LARGE.v1 + && schema.v3 == LARGE.v3 + && schema.v4 == LARGE.v4 + && schema.v5 == LARGE.v5, + ); +} + +#[test] +fn read_quintuple_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 v3: felt252 = world.read_member(LARGE.ptr(), selector!("v3")); + let v4: felt252 = world.read_member(LARGE.ptr(), selector!("v4")); + let v5: felt252 = world.read_member(LARGE.ptr(), selector!("v5")); + assert!(v0 == LARGE.v0 && v1 == LARGE.v1 && v3 == LARGE.v3 && v4 == LARGE.v4 && v5 == LARGE.v5); +} + #[test] fn read_sextuple_model_large() { let mut world = spawn_foo_world(); @@ -250,3 +353,215 @@ fn read_sextuple_member_large() { && v5 == LARGE.v5, ); } + +#[test] +fn write_simple_comparison() { + let mut world = spawn_foo_world(); + + let model: Single = world.read_model(SINGLE.k0); + assert!(model == model); +} + +#[test] +fn write_large_comparison() { + let mut world = spawn_foo_world(); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == model); +} + +#[test] +fn write_model_simple() { + let mut world = spawn_foo_world(); + world.write_model(@SINGLE); + + let model: Single = world.read_model(SINGLE.k0); + assert!(model == SINGLE); +} + +#[test] +fn write_value_simple() { + let mut world = spawn_foo_world(); + world.write_value(SINGLE.k0, @SINGLE_VALUE); + + let model: Single = world.read_model(SINGLE.k0); + assert!(model == SINGLE); +} + +#[test] +fn write_schema_simple() { + let mut world = spawn_foo_world(); + world.write_schema(SINGLE.ptr(), @SINGLE_SCHEMA); + + let model: Single = world.read_model(SINGLE.k0); + assert!(model == SINGLE); +} + +#[test] +fn write_member_simple() { + let mut world = spawn_foo_world(); + world.write_member(SINGLE.ptr(), selector!("v0"), SINGLE.v0); + + let model: Single = world.read_model(SINGLE.k0); + assert!(model == SINGLE); +} + +#[test] +fn write_single_model_large() { + let mut world = spawn_foo_world(); + + world.write_model(@LARGE_SINGLE); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_SINGLE); +} + +#[test] +fn write_single_value_large() { + let mut world = spawn_foo_world(); + + world.write_value((LARGE.k0, LARGE.k1), @LARGE_SINGLE_VALUE); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_SINGLE); +} + +#[test] +fn write_single_schema_large() { + let mut world = spawn_foo_world(); + + world.write_schema(LARGE.ptr(), @LARGE_SINGLE_SCHEMA); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_SINGLE); +} + +#[test] +fn write_single_member_large() { + let mut world = spawn_foo_world(); + + world.write_member(LARGE.ptr(), selector!("v5"), LARGE.v5); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_SINGLE); +} + +#[test] +fn write_double_model_large() { + let mut world = spawn_foo_world(); + + world.write_model(@LARGE_DOUBLE); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_DOUBLE); +} +#[test] +fn write_double_value_large() { + let mut world = spawn_foo_world(); + + world.write_value((LARGE.k0, LARGE.k1), @LARGE_DOUBLE_VALUE); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_DOUBLE); +} +#[test] +fn write_double_schema_large() { + let mut world = spawn_foo_world(); + + world.write_schema(LARGE.ptr(), @LARGE_DOUBLE_SCHEMA); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_DOUBLE); +} +#[test] +fn write_double_member_large() { + let mut world = spawn_foo_world(); + + world.write_member(LARGE.ptr(), selector!("v0"), LARGE.v0); + world.write_member(LARGE.ptr(), selector!("v5"), LARGE.v5); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_DOUBLE); +} +#[test] +fn write_quintuple_model_large() { + let mut world = spawn_foo_world(); + + world.write_model(@LARGE_QUINTUPLE); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_QUINTUPLE); +} +#[test] +fn write_quintuple_value_large() { + let mut world = spawn_foo_world(); + + world.write_value((LARGE.k0, LARGE.k1), @LARGE_QUINTUPLE_VALUE); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_QUINTUPLE); +} +#[test] +fn write_quintuple_schema_large() { + let mut world = spawn_foo_world(); + + world.write_schema(LARGE.ptr(), @LARGE_QUINTUPLE_SCHEMA); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_QUINTUPLE); +} +#[test] +fn write_quintuple_member_large() { + let mut world = spawn_foo_world(); + + world.write_member(LARGE.ptr(), selector!("v0"), LARGE.v0); + world.write_member(LARGE.ptr(), selector!("v1"), LARGE.v1); + world.write_member(LARGE.ptr(), selector!("v3"), LARGE.v3); + world.write_member(LARGE.ptr(), selector!("v4"), LARGE.v4); + world.write_member(LARGE.ptr(), selector!("v5"), LARGE.v5); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE_QUINTUPLE); +} +#[test] +fn write_sextuple_model_large() { + let mut world = spawn_foo_world(); + + world.write_model(@LARGE); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE); +} +#[test] +fn write_sextuple_value_large() { + let mut world = spawn_foo_world(); + + world.write_value((LARGE.k0, LARGE.k1), @LARGE_VALUE); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE); +} +#[test] +fn write_sextuple_schema_large() { + let mut world = spawn_foo_world(); + + world.write_schema(LARGE.ptr(), @LARGE_SCHEMA); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE); +} +#[test] +fn write_sextuple_member_large() { + let mut world = spawn_foo_world(); + + world.write_member(LARGE.ptr(), selector!("v0"), LARGE.v0); + world.write_member(LARGE.ptr(), selector!("v1"), LARGE.v1); + world.write_member(LARGE.ptr(), selector!("v2"), LARGE.v2); + world.write_member(LARGE.ptr(), selector!("v3"), LARGE.v3); + world.write_member(LARGE.ptr(), selector!("v4"), LARGE.v4); + world.write_member(LARGE.ptr(), selector!("v5"), LARGE.v5); + + let model: Large = world.read_model((LARGE.k0, LARGE.k1)); + assert!(model == LARGE); +} + diff --git a/examples/spawn-and-move/dojo_dev.toml b/examples/spawn-and-move/dojo_dev.toml index 7f228ec351..f0734be005 100644 --- a/examples/spawn-and-move/dojo_dev.toml +++ b/examples/spawn-and-move/dojo_dev.toml @@ -69,7 +69,7 @@ rpc_url = "http://localhost:5050/" # Default account for katana with seed = 0 account_address = "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" private_key = "0x1800000000300000180000000000030000000000003006001800006600" -world_address = "0x24c2f8075163bbdcc44670869f15a282019d0e9b602bbb95b365d8350fc8a41" +world_address = "0x10fee24e68f2d79dca48e2d1dca4c26269b7d5e8c14bb266c3d30bb169b68e" ipfs_config.url = "https://ipfs.infura.io:5001" ipfs_config.username = "2EBrzr7ZASQZKH32sl2xWauXPSA" ipfs_config.password = "12290b883db9138a8ae3363b6739d220" diff --git a/examples/spawn-and-move/manifest_dev.json b/examples/spawn-and-move/manifest_dev.json index 9ab3d037dc..c100e91600 100644 --- a/examples/spawn-and-move/manifest_dev.json +++ b/examples/spawn-and-move/manifest_dev.json @@ -1,7 +1,7 @@ { "world": { - "class_hash": "0x1d0991eab5221c28225755937ec958aa073617c9b1d4f5e3c82b9f27cf85ea4", - "address": "0x24c2f8075163bbdcc44670869f15a282019d0e9b602bbb95b365d8350fc8a41", + "class_hash": "0x7cff2f89a1171f82492b948638215592b953fb8441a740004598d0cc7cbcc02", + "address": "0x27bc5b6c346f69691b09e46e2cee996963ab2455858a0e1d985586e69dc81ae", "seed": "dojo_examples", "name": "example", "entrypoints": [ @@ -11,13 +11,11 @@ "register_event", "register_model", "register_contract", - "register_external_contract", "register_library", "init_contract", "upgrade_event", "upgrade_model", "upgrade_contract", - "upgrade_external_contract", "emit_event", "emit_events", "set_entity", @@ -85,10 +83,6 @@ { "name": "Library", "type": "(core::starknet::class_hash::ClassHash, core::felt252)" - }, - { - "name": "ExternalContract", - "type": "(core::starknet::contract_address::ContractAddress, core::felt252)" } ] }, @@ -145,6 +139,10 @@ { "name": "MemberId", "type": "(core::felt252, core::felt252)" + }, + { + "name": "Schema", + "type": "core::felt252" } ] }, @@ -192,16 +190,6 @@ } ] }, - { - "type": "struct", - "name": "core::array::Span::<(dojo::meta::layout::Layout, core::integer::u32)>", - "members": [ - { - "name": "snapshot", - "type": "@core::array::Array::<(dojo::meta::layout::Layout, core::integer::u32)>" - } - ] - }, { "type": "enum", "name": "dojo::meta::layout::Layout", @@ -222,10 +210,6 @@ "name": "Array", "type": "core::array::Span::" }, - { - "name": "FixedArray", - "type": "core::array::Span::<(dojo::meta::layout::Layout, core::integer::u32)>" - }, { "name": "ByteArray", "type": "()" @@ -387,34 +371,6 @@ ], "state_mutability": "external" }, - { - "type": "function", - "name": "register_external_contract", - "inputs": [ - { - "name": "namespace", - "type": "core::byte_array::ByteArray" - }, - { - "name": "contract_name", - "type": "core::byte_array::ByteArray" - }, - { - "name": "instance_name", - "type": "core::byte_array::ByteArray" - }, - { - "name": "contract_address", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "block_number", - "type": "core::integer::u64" - } - ], - "outputs": [], - "state_mutability": "external" - }, { "type": "function", "name": "register_library", @@ -511,30 +467,6 @@ ], "state_mutability": "external" }, - { - "type": "function", - "name": "upgrade_external_contract", - "inputs": [ - { - "name": "namespace", - "type": "core::byte_array::ByteArray" - }, - { - "name": "instance_name", - "type": "core::byte_array::ByteArray" - }, - { - "name": "contract_address", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "block_number", - "type": "core::integer::u64" - } - ], - "outputs": [], - "state_mutability": "external" - }, { "type": "function", "name": "emit_event", @@ -998,85 +930,6 @@ } ] }, - { - "type": "event", - "name": "dojo::world::world_contract::world::ExternalContractRegistered", - "kind": "struct", - "members": [ - { - "name": "namespace", - "type": "core::byte_array::ByteArray", - "kind": "key" - }, - { - "name": "contract_name", - "type": "core::byte_array::ByteArray", - "kind": "key" - }, - { - "name": "instance_name", - "type": "core::byte_array::ByteArray", - "kind": "key" - }, - { - "name": "contract_selector", - "type": "core::felt252", - "kind": "key" - }, - { - "name": "class_hash", - "type": "core::starknet::class_hash::ClassHash", - "kind": "data" - }, - { - "name": "contract_address", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "data" - }, - { - "name": "block_number", - "type": "core::integer::u64", - "kind": "data" - } - ] - }, - { - "type": "event", - "name": "dojo::world::world_contract::world::ExternalContractUpgraded", - "kind": "struct", - "members": [ - { - "name": "namespace", - "type": "core::byte_array::ByteArray", - "kind": "key" - }, - { - "name": "instance_name", - "type": "core::byte_array::ByteArray", - "kind": "key" - }, - { - "name": "contract_selector", - "type": "core::felt252", - "kind": "key" - }, - { - "name": "class_hash", - "type": "core::starknet::class_hash::ClassHash", - "kind": "data" - }, - { - "name": "contract_address", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "data" - }, - { - "name": "block_number", - "type": "core::integer::u64", - "kind": "data" - } - ] - }, { "type": "event", "name": "dojo::world::world_contract::world::ModelUpgraded", @@ -1312,6 +1165,33 @@ } ] }, + { + "type": "event", + "name": "dojo::world::world_contract::world::StoreUpdateMembers", + "kind": "struct", + "members": [ + { + "name": "selector", + "type": "core::felt252", + "kind": "key" + }, + { + "name": "entity_id", + "type": "core::felt252", + "kind": "key" + }, + { + "name": "member_selectors", + "type": "core::array::Span::", + "kind": "data" + }, + { + "name": "values", + "type": "core::array::Span::", + "kind": "data" + } + ] + }, { "type": "event", "name": "dojo::world::world_contract::world::StoreDelRecord", @@ -1408,16 +1288,6 @@ "type": "dojo::world::world_contract::world::ContractRegistered", "kind": "nested" }, - { - "name": "ExternalContractRegistered", - "type": "dojo::world::world_contract::world::ExternalContractRegistered", - "kind": "nested" - }, - { - "name": "ExternalContractUpgraded", - "type": "dojo::world::world_contract::world::ExternalContractUpgraded", - "kind": "nested" - }, { "name": "ModelUpgraded", "type": "dojo::world::world_contract::world::ModelUpgraded", @@ -1468,6 +1338,11 @@ "type": "dojo::world::world_contract::world::StoreUpdateMember", "kind": "nested" }, + { + "name": "StoreUpdateMembers", + "type": "dojo::world::world_contract::world::StoreUpdateMembers", + "kind": "nested" + }, { "name": "StoreDelRecord", "type": "dojo::world::world_contract::world::StoreDelRecord", @@ -1489,8 +1364,8 @@ }, "contracts": [ { - "address": "0x208170ef32e88fc4872316c85624dc90c21232327a17eccb5b0f55d07a5d72c", - "class_hash": "0x5730d8d9fffa4679ddd6262e9c975859c9f3eb44d7a73f5d67c90aaf6685c64", + "address": "0x690aa26c8ab0df63ed7b45616015084a02ff959ebfb49e0cd253bf323f734bc", + "class_hash": "0x5128a5331e9d78688affdf6fae7ff05fdcfd7ae68bebb0caffdd038caa51870", "abi": [ { "type": "impl", @@ -1504,7 +1379,7 @@ }, { "type": "impl", - "name": "DojoDeployedContractImpl", + "name": "actions__DeployedContractImpl", "interface_name": "dojo::meta::interface::IDeployedResource" }, { @@ -1636,6 +1511,13 @@ "outputs": [], "state_mutability": "external" }, + { + "type": "function", + "name": "update_player_config_items", + "inputs": [], + "outputs": [], + "state_mutability": "external" + }, { "type": "function", "name": "update_player_config_name", @@ -1709,22 +1591,6 @@ ], "outputs": [], "state_mutability": "external" - }, - { - "type": "function", - "name": "say_hello", - "inputs": [ - { - "name": "name", - "type": "core::byte_array::ByteArray" - } - ], - "outputs": [ - { - "type": "core::byte_array::ByteArray" - } - ], - "state_mutability": "view" } ] }, @@ -1850,6 +1716,7 @@ "spawn", "move", "set_player_config", + "update_player_config_items", "update_player_config_name", "reset_player_config", "set_player_server_profile", @@ -1859,8 +1726,8 @@ ] }, { - "address": "0x70a8affc84f3579965260068ab7fbc398d55e679ea82f1a13a05f4be114e78b", - "class_hash": "0x1372814d45ad33782ac108850c646b503a7984d47fe72c0bfb7b98b4801941e", + "address": "0x17727955a80783ea728cd9fff61148758aa48d07538b349572a1fd77aa3cc7d", + "class_hash": "0x216b7f3b4d4d8f37e280a310881bdf11edb8c2f665d116388a3e0f6055929d2", "abi": [ { "type": "impl", @@ -1874,7 +1741,7 @@ }, { "type": "impl", - "name": "DojoDeployedContractImpl", + "name": "dungeon__DeployedContractImpl", "interface_name": "dojo::meta::interface::IDeployedResource" }, { @@ -2053,8 +1920,8 @@ ] }, { - "address": "0x3ef577d87507fab1ca1dbb63fe0f23439912dacf6112045590ca8a8ce16f162", - "class_hash": "0x57209c73bbd617a4fae6d7ff18875b6f3d0a763f4d1ecad753bc1edfd563902", + "address": "0x34ba450472c3112a4fe154b06b925b238bc36c1373d43615a2f2c76e04fb150", + "class_hash": "0x6f8120a9adbe5b42764ef71dcb261eca97bbe19ff8ad2d43271cb751f35d226", "abi": [ { "type": "impl", @@ -2068,7 +1935,7 @@ }, { "type": "impl", - "name": "DojoDeployedContractImpl", + "name": "mock_token__DeployedContractImpl", "interface_name": "dojo::meta::interface::IDeployedResource" }, { @@ -2229,8 +2096,8 @@ ] }, { - "address": "0x3580240e1c114feed8f52ce3a270bf1760ed4ffd1547c94c1afa9c372034812", - "class_hash": "0x454cf67b6232c82737744be5aa4727a6542848d19c2eb00692e144a52acaaf5", + "address": "0x31c6b805f1574e3d826b04a7cb4068ad750cee901dc5eca4434fedb48798855", + "class_hash": "0x2171f2464ca252e6a717084210b5636b2788aa09a2b7fa53d67773262287a49", "abi": [ { "type": "impl", @@ -2244,7 +2111,7 @@ }, { "type": "impl", - "name": "DojoDeployedContractImpl", + "name": "others__DeployedContractImpl", "interface_name": "dojo::meta::interface::IDeployedResource" }, { @@ -2410,24 +2277,25 @@ "systems": [ "upgrade" ] - }, + } + ], + "libraries": [ { - "address": "0x347c49458f9dca2ae0a67cbd0b0afabb52bc726755ad2c425f94f3645d21e7c", - "class_hash": "0x5730d8d9fffa4679ddd6262e9c975859c9f3eb44d7a73f5d67c90aaf6685c64", + "class_hash": "0x4f9e8d8b86626a2c78b494eab81b59a9675116b449c054ab1eb75d309df0533", "abi": [ { "type": "impl", - "name": "actions__ContractImpl", - "interface_name": "dojo::contract::interface::IContract" + "name": "simple_math__LibraryImpl", + "interface_name": "dojo::contract::interface::ILibrary" }, { "type": "interface", - "name": "dojo::contract::interface::IContract", + "name": "dojo::contract::interface::ILibrary", "items": [] }, { "type": "impl", - "name": "DojoDeployedContractImpl", + "name": "simple_math__DeployedLibraryImpl", "interface_name": "dojo::meta::interface::IDeployedResource" }, { @@ -2467,1547 +2335,230 @@ }, { "type": "impl", - "name": "ActionsImpl", - "interface_name": "dojo_examples::actions::IActions" + "name": "SimpleMathImpl", + "interface_name": "dojo_examples::lib_math::SimpleMath" }, { - "type": "enum", - "name": "dojo_examples::models::Direction", - "variants": [ - { - "name": "None", - "type": "()" - }, - { - "name": "Left", - "type": "()" - }, - { - "name": "Right", - "type": "()" - }, - { - "name": "Up", - "type": "()" - }, + "type": "interface", + "name": "dojo_examples::lib_math::SimpleMath", + "items": [ { - "name": "Down", - "type": "()" + "type": "function", + "name": "decrement_saturating", + "inputs": [ + { + "name": "value", + "type": "core::integer::u8" + } + ], + "outputs": [ + { + "type": "core::integer::u8" + } + ], + "state_mutability": "view" } ] }, { - "type": "struct", - "name": "dojo_examples::models::Vec2", - "members": [ - { - "name": "x", - "type": "core::integer::u32" - }, - { - "name": "y", - "type": "core::integer::u32" - } - ] + "type": "impl", + "name": "WorldProviderImpl", + "interface_name": "dojo::contract::components::world_provider::IWorldProvider" }, { "type": "struct", - "name": "dojo_examples::models::Position", + "name": "dojo::world::iworld::IWorldDispatcher", "members": [ { - "name": "player", + "name": "contract_address", "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "vec", - "type": "dojo_examples::models::Vec2" } ] }, { "type": "interface", - "name": "dojo_examples::actions::IActions", - "items": [ - { - "type": "function", - "name": "spawn", - "inputs": [], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "move", - "inputs": [ - { - "name": "direction", - "type": "dojo_examples::models::Direction" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "set_player_config", - "inputs": [ - { - "name": "name", - "type": "core::byte_array::ByteArray" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "update_player_config_name", - "inputs": [ - { - "name": "name", - "type": "core::byte_array::ByteArray" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "get_player_position", - "inputs": [], - "outputs": [ - { - "type": "dojo_examples::models::Position" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "reset_player_config", - "inputs": [], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "set_player_server_profile", - "inputs": [ - { - "name": "server_id", - "type": "core::integer::u32" - }, - { - "name": "name", - "type": "core::byte_array::ByteArray" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "set_models", - "inputs": [ - { - "name": "seed", - "type": "core::felt252" - }, - { - "name": "n_models", - "type": "core::integer::u32" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "enter_dungeon", - "inputs": [ - { - "name": "dungeon_address", - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "say_hello", - "inputs": [ - { - "name": "name", - "type": "core::byte_array::ByteArray" - } - ], - "outputs": [ - { - "type": "core::byte_array::ByteArray" - } - ], - "state_mutability": "view" - } - ] - }, - { - "type": "function", - "name": "dojo_init", - "inputs": [], - "outputs": [], - "state_mutability": "view" - }, - { - "type": "impl", - "name": "WorldProviderImpl", - "interface_name": "dojo::contract::components::world_provider::IWorldProvider" - }, - { - "type": "struct", - "name": "dojo::world::iworld::IWorldDispatcher", - "members": [ - { - "name": "contract_address", - "type": "core::starknet::contract_address::ContractAddress" - } - ] - }, - { - "type": "interface", - "name": "dojo::contract::components::world_provider::IWorldProvider", - "items": [ - { - "type": "function", - "name": "world_dispatcher", - "inputs": [], - "outputs": [ - { - "type": "dojo::world::iworld::IWorldDispatcher" - } - ], - "state_mutability": "view" - } - ] - }, - { - "type": "impl", - "name": "UpgradeableImpl", - "interface_name": "dojo::contract::components::upgradeable::IUpgradeable" - }, - { - "type": "interface", - "name": "dojo::contract::components::upgradeable::IUpgradeable", - "items": [ - { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "new_class_hash", - "type": "core::starknet::class_hash::ClassHash" - } - ], - "outputs": [], - "state_mutability": "external" - } - ] - }, - { - "type": "constructor", - "name": "constructor", - "inputs": [] - }, - { - "type": "event", - "name": "dojo::contract::components::upgradeable::upgradeable_cpt::Upgraded", - "kind": "struct", - "members": [ - { - "name": "class_hash", - "type": "core::starknet::class_hash::ClassHash", - "kind": "data" - } - ] - }, - { - "type": "event", - "name": "dojo::contract::components::upgradeable::upgradeable_cpt::Event", - "kind": "enum", - "variants": [ - { - "name": "Upgraded", - "type": "dojo::contract::components::upgradeable::upgradeable_cpt::Upgraded", - "kind": "nested" - } - ] - }, - { - "type": "event", - "name": "dojo::contract::components::world_provider::world_provider_cpt::Event", - "kind": "enum", - "variants": [] - }, - { - "type": "event", - "name": "dojo_examples::actions::actions::Event", - "kind": "enum", - "variants": [ - { - "name": "UpgradeableEvent", - "type": "dojo::contract::components::upgradeable::upgradeable_cpt::Event", - "kind": "nested" - }, - { - "name": "WorldProviderEvent", - "type": "dojo::contract::components::world_provider::world_provider_cpt::Event", - "kind": "nested" - } - ] - } - ], - "init_calldata": [], - "tag": "ns2-actions", - "selector": "0x1a920eff7b3fd2be618d5a222e63e805a2a82e71579f97ba06d716a45d1ae25", - "systems": [ - "spawn", - "move", - "set_player_config", - "update_player_config_name", - "reset_player_config", - "set_player_server_profile", - "set_models", - "enter_dungeon", - "upgrade" - ] - } - ], - "libraries": [ - { - "class_hash": "0x48195c8f045173e2ec687d9229f70e1fb47adae5ad1be54ba17ed3aeb3ecf72", - "abi": [ - { - "type": "impl", - "name": "simple_math__LibraryImpl", - "interface_name": "dojo::contract::interface::ILibrary" - }, - { - "type": "interface", - "name": "dojo::contract::interface::ILibrary", - "items": [] - }, - { - "type": "impl", - "name": "DojoDeployedLibraryImpl", - "interface_name": "dojo::meta::interface::IDeployedResource" - }, - { - "type": "struct", - "name": "core::byte_array::ByteArray", - "members": [ - { - "name": "data", - "type": "core::array::Array::" - }, - { - "name": "pending_word", - "type": "core::felt252" - }, - { - "name": "pending_word_len", - "type": "core::integer::u32" - } - ] - }, - { - "type": "interface", - "name": "dojo::meta::interface::IDeployedResource", - "items": [ - { - "type": "function", - "name": "dojo_name", - "inputs": [], - "outputs": [ - { - "type": "core::byte_array::ByteArray" - } - ], - "state_mutability": "view" - } - ] - }, - { - "type": "impl", - "name": "SimpleMathImpl", - "interface_name": "dojo_examples::lib_math::SimpleMath" - }, - { - "type": "interface", - "name": "dojo_examples::lib_math::SimpleMath", - "items": [ - { - "type": "function", - "name": "decrement_saturating", - "inputs": [ - { - "name": "value", - "type": "core::integer::u8" - } - ], - "outputs": [ - { - "type": "core::integer::u8" - } - ], - "state_mutability": "view" - } - ] - }, - { - "type": "impl", - "name": "WorldProviderImpl", - "interface_name": "dojo::contract::components::world_provider::IWorldProvider" - }, - { - "type": "struct", - "name": "dojo::world::iworld::IWorldDispatcher", - "members": [ - { - "name": "contract_address", - "type": "core::starknet::contract_address::ContractAddress" - } - ] - }, - { - "type": "interface", - "name": "dojo::contract::components::world_provider::IWorldProvider", - "items": [ - { - "type": "function", - "name": "world_dispatcher", - "inputs": [], - "outputs": [ - { - "type": "dojo::world::iworld::IWorldDispatcher" - } - ], - "state_mutability": "view" - } - ] - }, - { - "type": "event", - "name": "dojo::contract::components::world_provider::world_provider_cpt::Event", - "kind": "enum", - "variants": [] - }, - { - "type": "event", - "name": "dojo_examples::lib_math::simple_math::Event", - "kind": "enum", - "variants": [ - { - "name": "WorldProviderEvent", - "type": "dojo::contract::components::world_provider::world_provider_cpt::Event", - "kind": "flat" - } - ] - } - ], - "tag": "ns-simple_math_v0_1_0", - "selector": "0x43022cc9b4933e6509e2292bf7dfa1c4fadb9a9d0c7a864b3e6487b8502e481", - "systems": [], - "version": "0_1_0" - } - ], - "models": [ - { - "members": [], - "class_hash": "0x70dd65edc1fc0d07c88faacee3c30c45d9538582b979edc805baa968c105659", - "tag": "ns-Flatbow", - "selector": "0x27a35f8bac96f1deebf4d3e83fc6b94a3da4e6d30a1ce34d5893d2fb602725d" - }, - { - "members": [], - "class_hash": "0xa3f3e9bc3488c5b79bd6286df03acd8667c3c0182492c284a12bf7dc8253d7", - "tag": "ns-Message", - "selector": "0x7e77b60a338fa7414998176fd93ff265e4ca04b93105ac98f155bcb2e9e8438" - }, - { - "members": [], - "class_hash": "0x41ad182f5c728eaa8c0087882ab3a75313095d4c76db3b1f4398b96b7432a24", - "tag": "ns-MockToken", - "selector": "0x23ee42c8f47d1d693b966176dcd5deca0ec147b33e42186382d9d027603a6fd" - }, - { - "members": [], - "class_hash": "0x7951bdbb45f74bd67cae650e023437960679f6cc3614100becd4760db973ff9", - "tag": "ns-Moves", - "selector": "0x54104f060e63bdd9d68bb872f2dc6d40a101e168e18b999c10de348d06ea24a" - }, - { - "members": [], - "class_hash": "0x60411960cd9e6c269a99163d4f042560fa111aa19a5c93d1d3082573aa17637", - "tag": "ns-PlayerConfig", - "selector": "0x3bea561c3e142a660a00d1471d7712b70695dc4ee3b173aeaefd5178f7a21af" - }, - { - "members": [], - "class_hash": "0x142d9d7e58b866aa383e68624e2562f1251444501816c4eefd8ac7983554112", - "tag": "ns-Position", - "selector": "0x5e12c61e9cf30881c126a6d298975c8d79f95abed1a05c2d38b7803ed19445f" - }, - { - "members": [], - "class_hash": "0x3a76deee55a158d055d95a2704be9d57958dd38fd66a8624b143a33e06cb394", - "tag": "ns-RiverSkale", - "selector": "0x47f763aa7de3b872f7fbec198275547e06751dbe26b66281b9cffaed9938f24" - }, - { - "members": [], - "class_hash": "0x6e2414b8eccd9a1f2fed7e019c58a00142d7c1df9eb92a7e557802a00f4b455", - "tag": "ns-ServerProfile", - "selector": "0x641dc5f178aff0c7935a8f1ae30c6038a3d3512ea164d486f98bc37b6beabf" - } - ], - "events": [ - { - "members": [], - "class_hash": "0x401ba9f07445b935f0d5c9ac02da16f4b3b58f2df93429c12c03bc3005a7e85", - "tag": "ns-Moved", - "selector": "0x6d4c1ac3717ba997500153c52344a2acac5123bbfa0f78d3dcc04cb786826b0" - }, - { - "members": [], - "class_hash": "0x3a4c9070a6f8b57ee7d8771b20514067f31f7f5aede10f6ffee8166eb655c64", - "tag": "ns-MyInit", - "selector": "0xe1c030210beae7e2153a7b996d7d2ae6a428faf16a61f192f02178718b6f0" - } - ], - "external_contracts": [ - { - "class_hash": "0x6d8cb94cee378b019e576af843a3f8f37cfdf436d3eac01be928e2ed0ae9c64", - "contract_name": "ERC721Token", - "tag": "ns-Badge", - "address": "0x7264020492fba07553b02cc8121a37be8e92c4df2e3f0ebf9a7d2dcf5b6ccd1", - "abi": [ - { - "type": "struct", - "name": "core::integer::u256", - "members": [ - { - "name": "low", - "type": "core::integer::u128" - }, - { - "name": "high", - "type": "core::integer::u128" - } - ] - }, - { - "type": "function", - "name": "mint", - "inputs": [ - { - "name": "token_id", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "update_token_metadata", - "inputs": [ - { - "name": "token_id", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "update_batch_token_metadata", - "inputs": [ - { - "name": "from_token_id", - "type": "core::integer::u256" - }, - { - "name": "to_token_id", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "struct", - "name": "core::array::Span::", - "members": [ - { - "name": "snapshot", - "type": "@core::array::Array::" - } - ] - }, - { - "type": "function", - "name": "update_tokens_metadata", - "inputs": [ - { - "name": "token_ids", - "type": "core::array::Span::" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "impl", - "name": "UpgradeableImpl", - "interface_name": "openzeppelin_upgrades::interface::IUpgradeable" - }, - { - "type": "interface", - "name": "openzeppelin_upgrades::interface::IUpgradeable", - "items": [ - { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "new_class_hash", - "type": "core::starknet::class_hash::ClassHash" - } - ], - "outputs": [], - "state_mutability": "external" - } - ] - }, - { - "type": "impl", - "name": "ERC721MixinImpl", - "interface_name": "openzeppelin_token::erc721::interface::ERC721ABI" - }, - { - "type": "struct", - "name": "core::array::Span::", - "members": [ - { - "name": "snapshot", - "type": "@core::array::Array::" - } - ] - }, - { - "type": "enum", - "name": "core::bool", - "variants": [ - { - "name": "False", - "type": "()" - }, - { - "name": "True", - "type": "()" - } - ] - }, - { - "type": "struct", - "name": "core::byte_array::ByteArray", - "members": [ - { - "name": "data", - "type": "core::array::Array::" - }, - { - "name": "pending_word", - "type": "core::felt252" - }, - { - "name": "pending_word_len", - "type": "core::integer::u32" - } - ] - }, - { - "type": "interface", - "name": "openzeppelin_token::erc721::interface::ERC721ABI", - "items": [ - { - "type": "function", - "name": "balance_of", - "inputs": [ - { - "name": "account", - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "outputs": [ - { - "type": "core::integer::u256" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "owner_of", - "inputs": [ - { - "name": "token_id", - "type": "core::integer::u256" - } - ], - "outputs": [ - { - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "safe_transfer_from", - "inputs": [ - { - "name": "from", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "to", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "token_id", - "type": "core::integer::u256" - }, - { - "name": "data", - "type": "core::array::Span::" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "transfer_from", - "inputs": [ - { - "name": "from", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "to", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "token_id", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { - "name": "to", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "token_id", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "set_approval_for_all", - "inputs": [ - { - "name": "operator", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "approved", - "type": "core::bool" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "get_approved", - "inputs": [ - { - "name": "token_id", - "type": "core::integer::u256" - } - ], - "outputs": [ - { - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "is_approved_for_all", - "inputs": [ - { - "name": "owner", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "operator", - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "outputs": [ - { - "type": "core::bool" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "supports_interface", - "inputs": [ - { - "name": "interface_id", - "type": "core::felt252" - } - ], - "outputs": [ - { - "type": "core::bool" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [ - { - "type": "core::byte_array::ByteArray" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [ - { - "type": "core::byte_array::ByteArray" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "token_uri", - "inputs": [ - { - "name": "token_id", - "type": "core::integer::u256" - } - ], - "outputs": [ - { - "type": "core::byte_array::ByteArray" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { - "name": "account", - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "outputs": [ - { - "type": "core::integer::u256" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "ownerOf", - "inputs": [ - { - "name": "tokenId", - "type": "core::integer::u256" - } - ], - "outputs": [ - { - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "safeTransferFrom", - "inputs": [ - { - "name": "from", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "to", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "tokenId", - "type": "core::integer::u256" - }, - { - "name": "data", - "type": "core::array::Span::" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { - "name": "from", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "to", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "tokenId", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "setApprovalForAll", - "inputs": [ - { - "name": "operator", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "approved", - "type": "core::bool" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "getApproved", - "inputs": [ - { - "name": "tokenId", - "type": "core::integer::u256" - } - ], - "outputs": [ - { - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "isApprovedForAll", - "inputs": [ - { - "name": "owner", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "operator", - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "outputs": [ - { - "type": "core::bool" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "tokenURI", - "inputs": [ - { - "name": "tokenId", - "type": "core::integer::u256" - } - ], - "outputs": [ - { - "type": "core::byte_array::ByteArray" - } - ], - "state_mutability": "view" - } - ] - }, - { - "type": "impl", - "name": "OwnableMixinImpl", - "interface_name": "openzeppelin_access::ownable::interface::OwnableABI" - }, - { - "type": "interface", - "name": "openzeppelin_access::ownable::interface::OwnableABI", - "items": [ - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [ - { - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "transfer_ownership", - "inputs": [ - { - "name": "new_owner", - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "renounce_ownership", - "inputs": [], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { - "name": "newOwner", - "type": "core::starknet::contract_address::ContractAddress" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "state_mutability": "external" - } - ] - }, - { - "type": "impl", - "name": "ERC4906MixinImpl", - "interface_name": "dojo_examples::externals::components::erc4906::IERC4906" - }, - { - "type": "interface", - "name": "dojo_examples::externals::components::erc4906::IERC4906", - "items": [ - { - "type": "function", - "name": "emit_metadata_update", - "inputs": [ - { - "name": "token_id", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "emit_batch_metadata_update", - "inputs": [ - { - "name": "from_token_id", - "type": "core::integer::u256" - }, - { - "name": "to_token_id", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - } - ] - }, - { - "type": "constructor", - "name": "constructor", - "inputs": [ - { - "name": "owner", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "name", - "type": "core::byte_array::ByteArray" - }, - { - "name": "symbol", - "type": "core::byte_array::ByteArray" - }, - { - "name": "base_uri", - "type": "core::byte_array::ByteArray" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_token::erc721::erc721::ERC721Component::Transfer", - "kind": "struct", - "members": [ - { - "name": "from", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - }, - { - "name": "to", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - }, - { - "name": "token_id", - "type": "core::integer::u256", - "kind": "key" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_token::erc721::erc721::ERC721Component::Approval", - "kind": "struct", - "members": [ - { - "name": "owner", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - }, - { - "name": "approved", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - }, - { - "name": "token_id", - "type": "core::integer::u256", - "kind": "key" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_token::erc721::erc721::ERC721Component::ApprovalForAll", - "kind": "struct", - "members": [ - { - "name": "owner", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - }, - { - "name": "operator", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - }, - { - "name": "approved", - "type": "core::bool", - "kind": "data" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_token::erc721::erc721::ERC721Component::Event", - "kind": "enum", - "variants": [ - { - "name": "Transfer", - "type": "openzeppelin_token::erc721::erc721::ERC721Component::Transfer", - "kind": "nested" - }, - { - "name": "Approval", - "type": "openzeppelin_token::erc721::erc721::ERC721Component::Approval", - "kind": "nested" - }, - { - "name": "ApprovalForAll", - "type": "openzeppelin_token::erc721::erc721::ERC721Component::ApprovalForAll", - "kind": "nested" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_introspection::src5::SRC5Component::Event", - "kind": "enum", - "variants": [] - }, - { - "type": "event", - "name": "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred", - "kind": "struct", - "members": [ - { - "name": "previous_owner", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - }, - { - "name": "new_owner", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted", - "kind": "struct", - "members": [ - { - "name": "previous_owner", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - }, - { - "name": "new_owner", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_access::ownable::ownable::OwnableComponent::Event", - "kind": "enum", - "variants": [ - { - "name": "OwnershipTransferred", - "type": "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred", - "kind": "nested" - }, - { - "name": "OwnershipTransferStarted", - "type": "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted", - "kind": "nested" - } - ] - }, - { - "type": "event", - "name": "dojo_examples::externals::components::erc4906::ERC4906Component::BatchMetadataUpdate", - "kind": "struct", - "members": [ - { - "name": "from_token_id", - "type": "core::integer::u256", - "kind": "key" - }, - { - "name": "to_token_id", - "type": "core::integer::u256", - "kind": "key" - } - ] - }, - { - "type": "event", - "name": "dojo_examples::externals::components::erc4906::ERC4906Component::MetadataUpdate", - "kind": "struct", - "members": [ - { - "name": "token_id", - "type": "core::integer::u256", - "kind": "key" - } - ] - }, - { - "type": "event", - "name": "dojo_examples::externals::components::erc4906::ERC4906Component::Event", - "kind": "enum", - "variants": [ - { - "name": "BatchMetadataUpdate", - "type": "dojo_examples::externals::components::erc4906::ERC4906Component::BatchMetadataUpdate", - "kind": "nested" - }, - { - "name": "MetadataUpdate", - "type": "dojo_examples::externals::components::erc4906::ERC4906Component::MetadataUpdate", - "kind": "nested" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "struct", - "members": [ + "name": "dojo::contract::components::world_provider::IWorldProvider", + "items": [ { - "name": "class_hash", - "type": "core::starknet::class_hash::ClassHash", - "kind": "data" + "type": "function", + "name": "world_dispatcher", + "inputs": [], + "outputs": [ + { + "type": "dojo::world::iworld::IWorldDispatcher" + } + ], + "state_mutability": "view" } ] }, { "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", + "name": "dojo::contract::components::world_provider::world_provider_cpt::Event", "kind": "enum", - "variants": [ - { - "name": "Upgraded", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "nested" - } - ] + "variants": [] }, { "type": "event", - "name": "dojo_examples::externals::erc721::ERC721Token::Event", + "name": "dojo_examples::lib_math::simple_math::Event", "kind": "enum", "variants": [ { - "name": "ERC721Event", - "type": "openzeppelin_token::erc721::erc721::ERC721Component::Event", - "kind": "flat" - }, - { - "name": "SRC5Event", - "type": "openzeppelin_introspection::src5::SRC5Component::Event", - "kind": "flat" - }, - { - "name": "OwnableEvent", - "type": "openzeppelin_access::ownable::ownable::OwnableComponent::Event", - "kind": "flat" - }, - { - "name": "ERC4906Event", - "type": "dojo_examples::externals::components::erc4906::ERC4906Component::Event", - "kind": "flat" - }, - { - "name": "UpgradeableEvent", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", + "name": "WorldProviderEvent", + "type": "dojo::contract::components::world_provider::world_provider_cpt::Event", "kind": "flat" } ] } ], - "constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", - "str:Badge", - "str:BDG", - "str:https://badge.com/" - ], - "encoded_constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", - "0x0", - "0x4261646765", - "0x5", - "0x0", - "0x424447", - "0x3", - "0x0", - "0x68747470733a2f2f62616467652e636f6d2f", - "0x12" - ], - "entrypoints": [ - "mint", - "update_token_metadata", - "update_batch_token_metadata", - "update_tokens_metadata", - "upgrade", - "safe_transfer_from", - "transfer_from", - "approve", - "set_approval_for_all", - "safeTransferFrom", - "transferFrom", - "setApprovalForAll", - "transfer_ownership", - "renounce_ownership", - "transferOwnership", - "renounceOwnership", - "emit_metadata_update", - "emit_batch_metadata_update" - ], - "block_number": null + "tag": "ns-simple_math_v0_1_0", + "selector": "0x43022cc9b4933e6509e2292bf7dfa1c4fadb9a9d0c7a864b3e6487b8502e481", + "systems": [], + "version": "0_1_0" + } + ], + "models": [ + { + "members": [], + "class_hash": "0x3a5256c1d86a1961246a181cbf1310ff324912fd6fe909fca960158d004222e", + "tag": "ns-Flatbow", + "selector": "0x27a35f8bac96f1deebf4d3e83fc6b94a3da4e6d30a1ce34d5893d2fb602725d" }, { - "class_hash": "0x6910d29e4e5fccce2bc3da8759f242318a324daf6b48d3c80287165140511de", - "contract_name": "Bank", - "tag": "ns-Bank", - "address": "0x6b424efa8fed4c28d1581cd0b38bc8d17887e544e3b508d934cab8acee97a3f", + "members": [], + "class_hash": "0x78c77a191b3f5eeb6473a0f6914ebea9008f60fbc2f527359aefe16c19e9ed9", + "tag": "ns-Message", + "selector": "0x7e77b60a338fa7414998176fd93ff265e4ca04b93105ac98f155bcb2e9e8438" + }, + { + "members": [], + "class_hash": "0x1d350d32f41cb979897048f97b924516e7290f0c572373c5bad42d54a6e319a", + "tag": "ns-MockToken", + "selector": "0x23ee42c8f47d1d693b966176dcd5deca0ec147b33e42186382d9d027603a6fd" + }, + { + "members": [], + "class_hash": "0x41cbd832e8099827f90aed350f270bf86f01fd6b99afdb3a3c71985589ef5bb", + "tag": "ns-Moves", + "selector": "0x54104f060e63bdd9d68bb872f2dc6d40a101e168e18b999c10de348d06ea24a" + }, + { + "members": [], + "class_hash": "0x1c0a03365283c19eb292b291218001ff6d93cb21ff5e6ad1c44661be1ddef6b", + "tag": "ns-PlayerConfig", + "selector": "0x3bea561c3e142a660a00d1471d7712b70695dc4ee3b173aeaefd5178f7a21af" + }, + { + "members": [], + "class_hash": "0x5123ea4c923ccd712a3238e4b2a36ce952851aad33f02ed72d20cd12eb03142", + "tag": "ns-Position", + "selector": "0x5e12c61e9cf30881c126a6d298975c8d79f95abed1a05c2d38b7803ed19445f" + }, + { + "members": [], + "class_hash": "0x348efb67b6293d25104c970316c3b7e82550cc4ab10c3b7c71135c36e96fe9f", + "tag": "ns-RiverSkale", + "selector": "0x47f763aa7de3b872f7fbec198275547e06751dbe26b66281b9cffaed9938f24" + }, + { + "members": [], + "class_hash": "0x647a38cde68764353dfcdec7e3ecc5456a16b3acfd60063bde968aa435c603c", + "tag": "ns-ServerProfile", + "selector": "0x641dc5f178aff0c7935a8f1ae30c6038a3d3512ea164d486f98bc37b6beabf" + } + ], + "events": [ + { + "members": [], + "class_hash": "0x417a1467225cfa72d2e6b949bc7bbb1ee05805014351a8ef78a7ac718ce0653", + "tag": "ns-Moved", + "selector": "0x6d4c1ac3717ba997500153c52344a2acac5123bbfa0f78d3dcc04cb786826b0" + }, + { + "members": [], + "class_hash": "0x2a47cf642e1d010ba73f41aab00aaa0757b75eedb0caa6ba575c85c343b7727", + "tag": "ns-MyInit", + "selector": "0xe1c030210beae7e2153a7b996d7d2ae6a428faf16a61f192f02178718b6f0" + } + ], + "external_contracts": [ + { + "class_hash": "0x42a5ab1b66c07d69a42b3958064327269ba49ca435ca390582b0ac5df564097", + "contract_name": "ERC721Token", + "instance_name": "Badge", + "address": "0x6f7a18f07a642724350bf344176eb545679df0df57eebd7476aff255f872971", "abi": [ { - "type": "impl", - "name": "UpgradeableImpl", - "interface_name": "openzeppelin_upgrades::interface::IUpgradeable" - }, - { - "type": "interface", - "name": "openzeppelin_upgrades::interface::IUpgradeable", - "items": [ + "type": "struct", + "name": "core::integer::u256", + "members": [ { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "new_class_hash", - "type": "core::starknet::class_hash::ClassHash" - } - ], - "outputs": [], - "state_mutability": "external" - } - ] - }, - { - "type": "constructor", - "name": "constructor", - "inputs": [ + "name": "low", + "type": "core::integer::u128" + }, { - "name": "owner", - "type": "core::starknet::contract_address::ContractAddress" + "name": "high", + "type": "core::integer::u128" } ] }, { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "struct", - "members": [ + "type": "function", + "name": "mint", + "inputs": [ { - "name": "class_hash", - "type": "core::starknet::class_hash::ClassHash", - "kind": "data" + "name": "token_id", + "type": "core::integer::u256" } - ] + ], + "outputs": [], + "state_mutability": "external" }, { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "enum", - "variants": [ + "type": "function", + "name": "update_token_metadata", + "inputs": [ { - "name": "Upgraded", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "nested" + "name": "token_id", + "type": "core::integer::u256" } - ] + ], + "outputs": [], + "state_mutability": "external" }, { - "type": "event", - "name": "dojo_examples::externals::bank::Bank::Event", - "kind": "enum", - "variants": [ + "type": "function", + "name": "update_batch_token_metadata", + "inputs": [ { - "name": "UpgradeableEvent", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "flat" - } - ] - } - ], - "constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" - ], - "encoded_constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" - ], - "entrypoints": [ - "upgrade" - ], - "block_number": null - }, - { - "class_hash": "0x19f8f2dae7b9b09b3243e30beb37a29a8a01e91409bd6d2ee2d253336d47659", - "contract_name": "ERC20Token", - "tag": "ns-GoldToken", - "address": "0x3440a44f9e112917ae055a6cdde0cb474e89378c3977a2f819f789a002c8c28", - "abi": [ + "name": "from_token_id", + "type": "core::integer::u256" + }, + { + "name": "to_token_id", + "type": "core::integer::u256" + } + ], + "outputs": [], + "state_mutability": "external" + }, { "type": "struct", - "name": "core::integer::u256", + "name": "core::array::Span::", "members": [ { - "name": "low", - "type": "core::integer::u128" - }, - { - "name": "high", - "type": "core::integer::u128" + "name": "snapshot", + "type": "@core::array::Array::" } ] }, { "type": "function", - "name": "mint", + "name": "update_tokens_metadata", "inputs": [ { - "name": "amount", - "type": "core::integer::u256" + "name": "token_ids", + "type": "core::array::Span::" } ], "outputs": [], @@ -4015,32 +2566,19 @@ }, { "type": "impl", - "name": "UpgradeableImpl", - "interface_name": "openzeppelin_upgrades::interface::IUpgradeable" + "name": "ERC721MixinImpl", + "interface_name": "openzeppelin_token::erc721::interface::ERC721ABI" }, { - "type": "interface", - "name": "openzeppelin_upgrades::interface::IUpgradeable", - "items": [ + "type": "struct", + "name": "core::array::Span::", + "members": [ { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "new_class_hash", - "type": "core::starknet::class_hash::ClassHash" - } - ], - "outputs": [], - "state_mutability": "external" + "name": "snapshot", + "type": "@core::array::Array::" } ] }, - { - "type": "impl", - "name": "ERC20MixinImpl", - "interface_name": "openzeppelin_token::erc20::interface::IERC20Mixin" - }, { "type": "enum", "name": "core::bool", @@ -4075,12 +2613,17 @@ }, { "type": "interface", - "name": "openzeppelin_token::erc20::interface::IERC20Mixin", + "name": "openzeppelin_token::erc721::interface::ERC721ABI", "items": [ { "type": "function", - "name": "total_supply", - "inputs": [], + "name": "balance_of", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], "outputs": [ { "type": "core::integer::u256" @@ -4090,75 +2633,139 @@ }, { "type": "function", - "name": "balance_of", + "name": "owner_of", "inputs": [ { - "name": "account", - "type": "core::starknet::contract_address::ContractAddress" + "name": "token_id", + "type": "core::integer::u256" } ], "outputs": [ { - "type": "core::integer::u256" + "type": "core::starknet::contract_address::ContractAddress" } ], "state_mutability": "view" }, { "type": "function", - "name": "allowance", + "name": "safe_transfer_from", "inputs": [ { - "name": "owner", + "name": "from", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "spender", + "name": "to", "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "token_id", + "type": "core::integer::u256" + }, + { + "name": "data", + "type": "core::array::Span::" } ], - "outputs": [ + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "transfer_from", + "inputs": [ + { + "name": "from", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "to", + "type": "core::starknet::contract_address::ContractAddress" + }, { + "name": "token_id", "type": "core::integer::u256" } ], - "state_mutability": "view" + "outputs": [], + "state_mutability": "external" }, { "type": "function", - "name": "transfer", + "name": "approve", "inputs": [ { - "name": "recipient", + "name": "to", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "amount", + "name": "token_id", "type": "core::integer::u256" } ], - "outputs": [ + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "set_approval_for_all", + "inputs": [ + { + "name": "operator", + "type": "core::starknet::contract_address::ContractAddress" + }, { + "name": "approved", "type": "core::bool" } ], + "outputs": [], "state_mutability": "external" }, { "type": "function", - "name": "transfer_from", + "name": "get_approved", "inputs": [ { - "name": "sender", + "name": "token_id", + "type": "core::integer::u256" + } + ], + "outputs": [ + { "type": "core::starknet::contract_address::ContractAddress" - }, + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "is_approved_for_all", + "inputs": [ { - "name": "recipient", + "name": "owner", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "amount", - "type": "core::integer::u256" + "name": "operator", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "supports_interface", + "inputs": [ + { + "name": "interface_id", + "type": "core::felt252" } ], "outputs": [ @@ -4166,111 +2773,189 @@ "type": "core::bool" } ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::byte_array::ByteArray" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "type": "core::byte_array::ByteArray" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "token_uri", + "inputs": [ + { + "name": "token_id", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::byte_array::ByteArray" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "ownerOf", + "inputs": [ + { + "name": "tokenId", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "safeTransferFrom", + "inputs": [ + { + "name": "from", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "to", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "tokenId", + "type": "core::integer::u256" + }, + { + "name": "data", + "type": "core::array::Span::" + } + ], + "outputs": [], "state_mutability": "external" }, { "type": "function", - "name": "approve", + "name": "transferFrom", "inputs": [ { - "name": "spender", + "name": "from", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "amount", - "type": "core::integer::u256" - } - ], - "outputs": [ + "name": "to", + "type": "core::starknet::contract_address::ContractAddress" + }, { - "type": "core::bool" + "name": "tokenId", + "type": "core::integer::u256" } ], + "outputs": [], "state_mutability": "external" }, { "type": "function", - "name": "name", - "inputs": [], - "outputs": [ + "name": "setApprovalForAll", + "inputs": [ { - "type": "core::byte_array::ByteArray" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [ + "name": "operator", + "type": "core::starknet::contract_address::ContractAddress" + }, { - "type": "core::byte_array::ByteArray" + "name": "approved", + "type": "core::bool" } ], - "state_mutability": "view" + "outputs": [], + "state_mutability": "external" }, { "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [ + "name": "getApproved", + "inputs": [ { - "type": "core::integer::u8" + "name": "tokenId", + "type": "core::integer::u256" } ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], "outputs": [ { - "type": "core::integer::u256" + "type": "core::starknet::contract_address::ContractAddress" } ], "state_mutability": "view" }, { "type": "function", - "name": "balanceOf", + "name": "isApprovedForAll", "inputs": [ { - "name": "account", + "name": "owner", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "operator", "type": "core::starknet::contract_address::ContractAddress" } ], "outputs": [ { - "type": "core::integer::u256" + "type": "core::bool" } ], "state_mutability": "view" }, { "type": "function", - "name": "transferFrom", + "name": "tokenURI", "inputs": [ { - "name": "sender", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "recipient", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "amount", + "name": "tokenId", "type": "core::integer::u256" } ], "outputs": [ { - "type": "core::bool" + "type": "core::byte_array::ByteArray" } ], - "state_mutability": "external" + "state_mutability": "view" } ] }, @@ -4334,6 +3019,45 @@ } ] }, + { + "type": "impl", + "name": "ERC4906MixinImpl", + "interface_name": "dojo_examples::externals::components::erc4906::IERC4906" + }, + { + "type": "interface", + "name": "dojo_examples::externals::components::erc4906::IERC4906", + "items": [ + { + "type": "function", + "name": "emit_metadata_update", + "inputs": [ + { + "name": "token_id", + "type": "core::integer::u256" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "emit_batch_metadata_update", + "inputs": [ + { + "name": "from_token_id", + "type": "core::integer::u256" + }, + { + "name": "to_token_id", + "type": "core::integer::u256" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, { "type": "constructor", "name": "constructor", @@ -4351,18 +3075,14 @@ "type": "core::byte_array::ByteArray" }, { - "name": "initial_supply", - "type": "core::integer::u256" - }, - { - "name": "recipient", - "type": "core::starknet::contract_address::ContractAddress" + "name": "base_uri", + "type": "core::byte_array::ByteArray" } ] }, { "type": "event", - "name": "openzeppelin_token::erc20::erc20::ERC20Component::Transfer", + "name": "openzeppelin_token::erc721::erc721::ERC721Component::Transfer", "kind": "struct", "members": [ { @@ -4376,15 +3096,15 @@ "kind": "key" }, { - "name": "value", + "name": "token_id", "type": "core::integer::u256", - "kind": "data" + "kind": "key" } ] }, { "type": "event", - "name": "openzeppelin_token::erc20::erc20::ERC20Component::Approval", + "name": "openzeppelin_token::erc721::erc721::ERC721Component::Approval", "kind": "struct", "members": [ { @@ -4393,34 +3113,67 @@ "kind": "key" }, { - "name": "spender", + "name": "approved", "type": "core::starknet::contract_address::ContractAddress", "kind": "key" }, { - "name": "value", + "name": "token_id", "type": "core::integer::u256", + "kind": "key" + } + ] + }, + { + "type": "event", + "name": "openzeppelin_token::erc721::erc721::ERC721Component::ApprovalForAll", + "kind": "struct", + "members": [ + { + "name": "owner", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "key" + }, + { + "name": "operator", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "key" + }, + { + "name": "approved", + "type": "core::bool", "kind": "data" } ] }, { "type": "event", - "name": "openzeppelin_token::erc20::erc20::ERC20Component::Event", + "name": "openzeppelin_token::erc721::erc721::ERC721Component::Event", "kind": "enum", "variants": [ { "name": "Transfer", - "type": "openzeppelin_token::erc20::erc20::ERC20Component::Transfer", + "type": "openzeppelin_token::erc721::erc721::ERC721Component::Transfer", "kind": "nested" }, { "name": "Approval", - "type": "openzeppelin_token::erc20::erc20::ERC20Component::Approval", + "type": "openzeppelin_token::erc721::erc721::ERC721Component::Approval", + "kind": "nested" + }, + { + "name": "ApprovalForAll", + "type": "openzeppelin_token::erc721::erc721::ERC721Component::ApprovalForAll", "kind": "nested" } ] }, + { + "type": "event", + "name": "openzeppelin_introspection::src5::SRC5Component::Event", + "kind": "enum", + "variants": [] + }, { "type": "event", "name": "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred", @@ -4472,241 +3225,141 @@ } ] }, - { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "struct", - "members": [ - { - "name": "class_hash", - "type": "core::starknet::class_hash::ClassHash", - "kind": "data" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "enum", - "variants": [ - { - "name": "Upgraded", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "nested" - } - ] - }, - { - "type": "event", - "name": "dojo_examples::externals::erc20::ERC20Token::Event", - "kind": "enum", - "variants": [ - { - "name": "ERC20Event", - "type": "openzeppelin_token::erc20::erc20::ERC20Component::Event", - "kind": "flat" - }, - { - "name": "OwnableEvent", - "type": "openzeppelin_access::ownable::ownable::OwnableComponent::Event", - "kind": "flat" - }, - { - "name": "UpgradeableEvent", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "flat" - } - ] - } - ], - "constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", - "str:Gold", - "str:GOLD", - "u256:0x10000000000000", - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" - ], - "encoded_constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", - "0x0", - "0x476f6c64", - "0x4", - "0x0", - "0x474f4c44", - "0x4", - "0x10000000000000", - "0x0", - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" - ], - "entrypoints": [ - "mint", - "upgrade", - "transfer", - "transfer_from", - "approve", - "transferFrom", - "transfer_ownership", - "renounce_ownership", - "transferOwnership", - "renounceOwnership" - ], - "block_number": null - }, - { - "class_hash": "0x3fd772ef209c598eb62a292a80bcb63c3cb52a12832e42b1d0284a3a7a95d4e", - "contract_name": "ERC1155Token", - "tag": "ns-Rewards", - "address": "0xc6b95150386ca0ed4552be515cc5ad9ba4122d322b7c399cf65225d9440087", - "abi": [ - { - "type": "struct", - "name": "core::integer::u256", - "members": [ - { - "name": "low", - "type": "core::integer::u128" - }, - { - "name": "high", - "type": "core::integer::u128" - } - ] - }, - { - "type": "struct", - "name": "core::byte_array::ByteArray", + { + "type": "event", + "name": "dojo_examples::externals::components::erc4906::ERC4906Component::BatchMetadataUpdate", + "kind": "struct", "members": [ { - "name": "data", - "type": "core::array::Array::" - }, - { - "name": "pending_word", - "type": "core::felt252" + "name": "from_token_id", + "type": "core::integer::u256", + "kind": "key" }, { - "name": "pending_word_len", - "type": "core::integer::u32" + "name": "to_token_id", + "type": "core::integer::u256", + "kind": "key" } ] }, { - "type": "function", - "name": "token_uri", - "inputs": [ + "type": "event", + "name": "dojo_examples::externals::components::erc4906::ERC4906Component::MetadataUpdate", + "kind": "struct", + "members": [ { "name": "token_id", - "type": "core::integer::u256" - } - ], - "outputs": [ - { - "type": "core::byte_array::ByteArray" + "type": "core::integer::u256", + "kind": "key" } - ], - "state_mutability": "external" + ] }, { - "type": "function", - "name": "mint", - "inputs": [ + "type": "event", + "name": "dojo_examples::externals::components::erc4906::ERC4906Component::Event", + "kind": "enum", + "variants": [ { - "name": "token_id", - "type": "core::integer::u256" + "name": "BatchMetadataUpdate", + "type": "dojo_examples::externals::components::erc4906::ERC4906Component::BatchMetadataUpdate", + "kind": "nested" }, { - "name": "value", - "type": "core::integer::u256" + "name": "MetadataUpdate", + "type": "dojo_examples::externals::components::erc4906::ERC4906Component::MetadataUpdate", + "kind": "nested" } - ], - "outputs": [], - "state_mutability": "external" + ] }, { - "type": "function", - "name": "transfer_from", - "inputs": [ + "type": "event", + "name": "dojo_examples::externals::erc721::ERC721Token::Event", + "kind": "enum", + "variants": [ { - "name": "from", - "type": "core::starknet::contract_address::ContractAddress" + "name": "ERC721Event", + "type": "openzeppelin_token::erc721::erc721::ERC721Component::Event", + "kind": "flat" }, { - "name": "to", - "type": "core::starknet::contract_address::ContractAddress" + "name": "SRC5Event", + "type": "openzeppelin_introspection::src5::SRC5Component::Event", + "kind": "flat" }, { - "name": "token_id", - "type": "core::integer::u256" + "name": "OwnableEvent", + "type": "openzeppelin_access::ownable::ownable::OwnableComponent::Event", + "kind": "flat" }, { - "name": "value", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "struct", - "name": "core::array::Span::", - "members": [ - { - "name": "snapshot", - "type": "@core::array::Array::" + "name": "ERC4906Event", + "type": "dojo_examples::externals::components::erc4906::ERC4906Component::Event", + "kind": "flat" } ] - }, + } + ], + "constructor_calldata": [ + "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", + "str:Badge", + "str:BDG", + "str:https://badge.com/" + ] + }, + { + "class_hash": "0x4cbd01aa2bd0447e071ad7dc72669ce68dfda9c043eaa9972bc6363c79fb92e", + "contract_name": "Bank", + "instance_name": "Bank", + "address": "0x22b6c1775d34c6262d74e613ba196ddcc874c90a7af0450f34e97aa56714754", + "abi": [ { - "type": "function", - "name": "batch_mint", + "type": "constructor", + "name": "constructor", "inputs": [ { - "name": "token_ids", - "type": "core::array::Span::" - }, - { - "name": "values", - "type": "core::array::Span::" + "name": "owner", + "type": "core::starknet::contract_address::ContractAddress" } - ], - "outputs": [], - "state_mutability": "external" + ] }, { - "type": "function", - "name": "update_token_metadata", - "inputs": [ - { - "name": "token_id", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - }, + "type": "event", + "name": "dojo_examples::externals::bank::Bank::Event", + "kind": "enum", + "variants": [] + } + ], + "constructor_calldata": [ + "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" + ] + }, + { + "class_hash": "0x7186749b8ff1e51555b77d6ae343eadcad699634796227a70d99e037832f192", + "contract_name": "ERC20Token", + "instance_name": "GoldToken", + "address": "0x1ddd59ba845557e712b42245be9d7d172dd3f5e40de7cf1c0256d258633cf69", + "abi": [ { - "type": "function", - "name": "update_batch_token_metadata", - "inputs": [ + "type": "struct", + "name": "core::integer::u256", + "members": [ { - "name": "from_token_id", - "type": "core::integer::u256" + "name": "low", + "type": "core::integer::u128" }, { - "name": "to_token_id", - "type": "core::integer::u256" + "name": "high", + "type": "core::integer::u128" } - ], - "outputs": [], - "state_mutability": "external" + ] }, { "type": "function", - "name": "update_tokens_metadata", + "name": "mint", "inputs": [ { - "name": "token_ids", - "type": "core::array::Span::" + "name": "amount", + "type": "core::integer::u256" } ], "outputs": [], @@ -4714,83 +3367,49 @@ }, { "type": "impl", - "name": "UpgradeableImpl", - "interface_name": "openzeppelin_upgrades::interface::IUpgradeable" + "name": "ERC20MixinImpl", + "interface_name": "openzeppelin_token::erc20::interface::IERC20Mixin" }, { - "type": "interface", - "name": "openzeppelin_upgrades::interface::IUpgradeable", - "items": [ + "type": "enum", + "name": "core::bool", + "variants": [ { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "new_class_hash", - "type": "core::starknet::class_hash::ClassHash" - } - ], - "outputs": [], - "state_mutability": "external" - } - ] - }, - { - "type": "impl", - "name": "ERC1155MixinImpl", - "interface_name": "openzeppelin_token::erc1155::interface::ERC1155ABI" - }, - { - "type": "struct", - "name": "core::array::Span::", - "members": [ + "name": "False", + "type": "()" + }, { - "name": "snapshot", - "type": "@core::array::Array::" + "name": "True", + "type": "()" } ] }, { "type": "struct", - "name": "core::array::Span::", + "name": "core::byte_array::ByteArray", "members": [ { - "name": "snapshot", - "type": "@core::array::Array::" - } - ] - }, - { - "type": "enum", - "name": "core::bool", - "variants": [ + "name": "data", + "type": "core::array::Array::" + }, { - "name": "False", - "type": "()" + "name": "pending_word", + "type": "core::felt252" }, { - "name": "True", - "type": "()" + "name": "pending_word_len", + "type": "core::integer::u32" } ] }, { "type": "interface", - "name": "openzeppelin_token::erc1155::interface::ERC1155ABI", + "name": "openzeppelin_token::erc20::interface::IERC20Mixin", "items": [ { "type": "function", - "name": "balance_of", - "inputs": [ - { - "name": "account", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "token_id", - "type": "core::integer::u256" - } - ], + "name": "total_supply", + "inputs": [], "outputs": [ { "type": "core::integer::u256" @@ -4800,91 +3419,75 @@ }, { "type": "function", - "name": "balance_of_batch", + "name": "balance_of", "inputs": [ { - "name": "accounts", - "type": "core::array::Span::" - }, - { - "name": "token_ids", - "type": "core::array::Span::" + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" } ], "outputs": [ { - "type": "core::array::Span::" + "type": "core::integer::u256" } ], "state_mutability": "view" }, { "type": "function", - "name": "safe_transfer_from", + "name": "allowance", "inputs": [ { - "name": "from", + "name": "owner", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "to", + "name": "spender", "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "token_id", - "type": "core::integer::u256" - }, + } + ], + "outputs": [ { - "name": "value", "type": "core::integer::u256" - }, - { - "name": "data", - "type": "core::array::Span::" } ], - "outputs": [], - "state_mutability": "external" + "state_mutability": "view" }, { "type": "function", - "name": "safe_batch_transfer_from", + "name": "transfer", "inputs": [ { - "name": "from", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "to", + "name": "recipient", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "token_ids", - "type": "core::array::Span::" - }, - { - "name": "values", - "type": "core::array::Span::" - }, + "name": "amount", + "type": "core::integer::u256" + } + ], + "outputs": [ { - "name": "data", - "type": "core::array::Span::" + "type": "core::bool" } ], - "outputs": [], "state_mutability": "external" }, { "type": "function", - "name": "is_approved_for_all", + "name": "transfer_from", "inputs": [ { - "name": "owner", + "name": "sender", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "operator", + "name": "recipient", "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "amount", + "type": "core::integer::u256" } ], "outputs": [ @@ -4892,49 +3495,43 @@ "type": "core::bool" } ], - "state_mutability": "view" + "state_mutability": "external" }, { "type": "function", - "name": "set_approval_for_all", + "name": "approve", "inputs": [ { - "name": "operator", + "name": "spender", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "approved", + "name": "amount", + "type": "core::integer::u256" + } + ], + "outputs": [ + { "type": "core::bool" } ], - "outputs": [], "state_mutability": "external" }, { "type": "function", - "name": "supports_interface", - "inputs": [ - { - "name": "interface_id", - "type": "core::felt252" - } - ], + "name": "name", + "inputs": [], "outputs": [ { - "type": "core::bool" + "type": "core::byte_array::ByteArray" } ], "state_mutability": "view" }, { "type": "function", - "name": "uri", - "inputs": [ - { - "name": "token_id", - "type": "core::integer::u256" - } - ], + "name": "symbol", + "inputs": [], "outputs": [ { "type": "core::byte_array::ByteArray" @@ -4944,111 +3541,57 @@ }, { "type": "function", - "name": "balanceOf", - "inputs": [ - { - "name": "account", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "tokenId", - "type": "core::integer::u256" - } - ], + "name": "decimals", + "inputs": [], "outputs": [ { - "type": "core::integer::u256" + "type": "core::integer::u8" } ], "state_mutability": "view" }, { "type": "function", - "name": "balanceOfBatch", - "inputs": [ - { - "name": "accounts", - "type": "core::array::Span::" - }, - { - "name": "tokenIds", - "type": "core::array::Span::" - } - ], + "name": "totalSupply", + "inputs": [], "outputs": [ { - "type": "core::array::Span::" + "type": "core::integer::u256" } ], "state_mutability": "view" }, { "type": "function", - "name": "safeTransferFrom", + "name": "balanceOf", "inputs": [ { - "name": "from", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "to", + "name": "account", "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "tokenId", - "type": "core::integer::u256" - }, + } + ], + "outputs": [ { - "name": "value", "type": "core::integer::u256" - }, - { - "name": "data", - "type": "core::array::Span::" } ], - "outputs": [], - "state_mutability": "external" + "state_mutability": "view" }, { "type": "function", - "name": "safeBatchTransferFrom", + "name": "transferFrom", "inputs": [ { - "name": "from", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "to", + "name": "sender", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "tokenIds", - "type": "core::array::Span::" - }, - { - "name": "values", - "type": "core::array::Span::" - }, - { - "name": "data", - "type": "core::array::Span::" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "isApprovedForAll", - "inputs": [ - { - "name": "owner", + "name": "recipient", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "operator", - "type": "core::starknet::contract_address::ContractAddress" + "name": "amount", + "type": "core::integer::u256" } ], "outputs": [ @@ -5056,22 +3599,6 @@ "type": "core::bool" } ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "setApprovalForAll", - "inputs": [ - { - "name": "operator", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "approved", - "type": "core::bool" - } - ], - "outputs": [], "state_mutability": "external" } ] @@ -5136,45 +3663,6 @@ } ] }, - { - "type": "impl", - "name": "ERC4906MixinImpl", - "interface_name": "dojo_examples::externals::components::erc4906::IERC4906" - }, - { - "type": "interface", - "name": "dojo_examples::externals::components::erc4906::IERC4906", - "items": [ - { - "type": "function", - "name": "emit_metadata_update", - "inputs": [ - { - "name": "token_id", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - }, - { - "type": "function", - "name": "emit_batch_metadata_update", - "inputs": [ - { - "name": "from_token_id", - "type": "core::integer::u256" - }, - { - "name": "to_token_id", - "type": "core::integer::u256" - } - ], - "outputs": [], - "state_mutability": "external" - } - ] - }, { "type": "constructor", "name": "constructor", @@ -5184,53 +3672,28 @@ "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "base_uri", - "type": "core::byte_array::ByteArray" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferSingle", - "kind": "struct", - "members": [ - { - "name": "operator", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - }, - { - "name": "from", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" + "name": "name", + "type": "core::byte_array::ByteArray" }, { - "name": "to", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" + "name": "symbol", + "type": "core::byte_array::ByteArray" }, { - "name": "id", - "type": "core::integer::u256", - "kind": "data" + "name": "initial_supply", + "type": "core::integer::u256" }, { - "name": "value", - "type": "core::integer::u256", - "kind": "data" + "name": "recipient", + "type": "core::starknet::contract_address::ContractAddress" } ] }, { "type": "event", - "name": "openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferBatch", + "name": "openzeppelin_token::erc20::erc20::ERC20Component::Transfer", "kind": "struct", "members": [ - { - "name": "operator", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - }, { "name": "from", "type": "core::starknet::contract_address::ContractAddress", @@ -5242,20 +3705,15 @@ "kind": "key" }, { - "name": "ids", - "type": "core::array::Span::", - "kind": "data" - }, - { - "name": "values", - "type": "core::array::Span::", + "name": "value", + "type": "core::integer::u256", "kind": "data" } ] }, { "type": "event", - "name": "openzeppelin_token::erc1155::erc1155::ERC1155Component::ApprovalForAll", + "name": "openzeppelin_token::erc20::erc20::ERC20Component::Approval", "kind": "struct", "members": [ { @@ -5264,67 +3722,34 @@ "kind": "key" }, { - "name": "operator", + "name": "spender", "type": "core::starknet::contract_address::ContractAddress", "kind": "key" }, - { - "name": "approved", - "type": "core::bool", - "kind": "data" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_token::erc1155::erc1155::ERC1155Component::URI", - "kind": "struct", - "members": [ { "name": "value", - "type": "core::byte_array::ByteArray", - "kind": "data" - }, - { - "name": "id", "type": "core::integer::u256", - "kind": "key" + "kind": "data" } ] }, { "type": "event", - "name": "openzeppelin_token::erc1155::erc1155::ERC1155Component::Event", + "name": "openzeppelin_token::erc20::erc20::ERC20Component::Event", "kind": "enum", "variants": [ { - "name": "TransferSingle", - "type": "openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferSingle", - "kind": "nested" - }, - { - "name": "TransferBatch", - "type": "openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferBatch", - "kind": "nested" - }, - { - "name": "ApprovalForAll", - "type": "openzeppelin_token::erc1155::erc1155::ERC1155Component::ApprovalForAll", + "name": "Transfer", + "type": "openzeppelin_token::erc20::erc20::ERC20Component::Transfer", "kind": "nested" }, { - "name": "URI", - "type": "openzeppelin_token::erc1155::erc1155::ERC1155Component::URI", + "name": "Approval", + "type": "openzeppelin_token::erc20::erc20::ERC20Component::Approval", "kind": "nested" } ] }, - { - "type": "event", - "name": "openzeppelin_introspection::src5::SRC5Component::Event", - "kind": "enum", - "variants": [] - }, { "type": "event", "name": "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred", @@ -5378,246 +3803,185 @@ }, { "type": "event", - "name": "dojo_examples::externals::components::erc4906::ERC4906Component::BatchMetadataUpdate", - "kind": "struct", - "members": [ + "name": "dojo_examples::externals::erc20::ERC20Token::Event", + "kind": "enum", + "variants": [ { - "name": "from_token_id", - "type": "core::integer::u256", - "kind": "key" + "name": "ERC20Event", + "type": "openzeppelin_token::erc20::erc20::ERC20Component::Event", + "kind": "flat" }, { - "name": "to_token_id", - "type": "core::integer::u256", - "kind": "key" + "name": "OwnableEvent", + "type": "openzeppelin_access::ownable::ownable::OwnableComponent::Event", + "kind": "flat" } ] - }, + } + ], + "constructor_calldata": [ + "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", + "str:Gold", + "str:GOLD", + "u256:0x10000000000000", + "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" + ] + }, + { + "class_hash": "0x10d6e882428f58611abf8e450846fccdbbecb53783d702ae4905980c076393f", + "contract_name": "ERC1155Token", + "instance_name": "Rewards", + "address": "0x1c69858ebadea848afde8d2c3aef3fb01c7c6efedc2f756e046c3a04d3f7133", + "abi": [ { - "type": "event", - "name": "dojo_examples::externals::components::erc4906::ERC4906Component::MetadataUpdate", - "kind": "struct", + "type": "struct", + "name": "core::integer::u256", "members": [ { - "name": "token_id", - "type": "core::integer::u256", - "kind": "key" + "name": "low", + "type": "core::integer::u128" + }, + { + "name": "high", + "type": "core::integer::u128" } ] }, { - "type": "event", - "name": "dojo_examples::externals::components::erc4906::ERC4906Component::Event", - "kind": "enum", - "variants": [ + "type": "struct", + "name": "core::byte_array::ByteArray", + "members": [ { - "name": "BatchMetadataUpdate", - "type": "dojo_examples::externals::components::erc4906::ERC4906Component::BatchMetadataUpdate", - "kind": "nested" + "name": "data", + "type": "core::array::Array::" }, { - "name": "MetadataUpdate", - "type": "dojo_examples::externals::components::erc4906::ERC4906Component::MetadataUpdate", - "kind": "nested" + "name": "pending_word", + "type": "core::felt252" + }, + { + "name": "pending_word_len", + "type": "core::integer::u32" } ] }, { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "struct", - "members": [ + "type": "function", + "name": "token_uri", + "inputs": [ { - "name": "class_hash", - "type": "core::starknet::class_hash::ClassHash", - "kind": "data" + "name": "token_id", + "type": "core::integer::u256" } - ] - }, - { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "enum", - "variants": [ + ], + "outputs": [ { - "name": "Upgraded", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "nested" + "type": "core::byte_array::ByteArray" } - ] + ], + "state_mutability": "external" }, { - "type": "event", - "name": "dojo_examples::externals::erc1155::ERC1155Token::Event", - "kind": "enum", - "variants": [ + "type": "function", + "name": "mint", + "inputs": [ { - "name": "ERC1155Event", - "type": "openzeppelin_token::erc1155::erc1155::ERC1155Component::Event", - "kind": "flat" + "name": "token_id", + "type": "core::integer::u256" }, { - "name": "SRC5Event", - "type": "openzeppelin_introspection::src5::SRC5Component::Event", - "kind": "flat" - }, + "name": "value", + "type": "core::integer::u256" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "transfer_from", + "inputs": [ { - "name": "OwnableEvent", - "type": "openzeppelin_access::ownable::ownable::OwnableComponent::Event", - "kind": "flat" + "name": "from", + "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "ERC4906Event", - "type": "dojo_examples::externals::components::erc4906::ERC4906Component::Event", - "kind": "flat" + "name": "to", + "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "UpgradeableEvent", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "flat" - } - ] - } - ], - "constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", - "str:https://rewards.com/" - ], - "encoded_constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", - "0x0", - "0x68747470733a2f2f726577617264732e636f6d2f", - "0x14" - ], - "entrypoints": [ - "token_uri", - "mint", - "transfer_from", - "batch_mint", - "update_token_metadata", - "update_batch_token_metadata", - "update_tokens_metadata", - "upgrade", - "safe_transfer_from", - "safe_batch_transfer_from", - "set_approval_for_all", - "safeTransferFrom", - "safeBatchTransferFrom", - "setApprovalForAll", - "transfer_ownership", - "renounce_ownership", - "transferOwnership", - "renounceOwnership", - "emit_metadata_update", - "emit_batch_metadata_update" - ], - "block_number": null - }, - { - "class_hash": "0x7bfd851dbbba64e84510940d3b114239a86b31b2d49789616faab3154db78f6", - "contract_name": "Saloon", - "tag": "ns-Saloon", - "address": "0x2365c3683fc7042111a7088d051dcb7d10f874a6d5e5416e533eb06689df350", - "abi": [ - { - "type": "impl", - "name": "UpgradeableImpl", - "interface_name": "openzeppelin_upgrades::interface::IUpgradeable" - }, - { - "type": "interface", - "name": "openzeppelin_upgrades::interface::IUpgradeable", - "items": [ + "name": "token_id", + "type": "core::integer::u256" + }, { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "new_class_hash", - "type": "core::starknet::class_hash::ClassHash" - } - ], - "outputs": [], - "state_mutability": "external" + "name": "value", + "type": "core::integer::u256" } - ] - }, - { - "type": "constructor", - "name": "constructor", - "inputs": [] + ], + "outputs": [], + "state_mutability": "external" }, { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "struct", + "type": "struct", + "name": "core::array::Span::", "members": [ { - "name": "class_hash", - "type": "core::starknet::class_hash::ClassHash", - "kind": "data" + "name": "snapshot", + "type": "@core::array::Array::" } ] }, { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "enum", - "variants": [ + "type": "function", + "name": "batch_mint", + "inputs": [ { - "name": "Upgraded", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "nested" + "name": "token_ids", + "type": "core::array::Span::" + }, + { + "name": "values", + "type": "core::array::Span::" } - ] + ], + "outputs": [], + "state_mutability": "external" }, { - "type": "event", - "name": "dojo_examples::externals::saloon::Saloon::Event", - "kind": "enum", - "variants": [ + "type": "function", + "name": "update_token_metadata", + "inputs": [ { - "name": "UpgradeableEvent", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "flat" + "name": "token_id", + "type": "core::integer::u256" } - ] - } - ], - "constructor_calldata": [], - "encoded_constructor_calldata": [], - "entrypoints": [ - "upgrade" - ], - "block_number": null - }, - { - "class_hash": "0x19f8f2dae7b9b09b3243e30beb37a29a8a01e91409bd6d2ee2d253336d47659", - "contract_name": "ERC20Token", - "tag": "ns-WoodToken", - "address": "0x43040aa4117a271f422062cd52c5838fcc8ebc42b6e58c5f11d459c0e8e82da", - "abi": [ + ], + "outputs": [], + "state_mutability": "external" + }, { - "type": "struct", - "name": "core::integer::u256", - "members": [ + "type": "function", + "name": "update_batch_token_metadata", + "inputs": [ { - "name": "low", - "type": "core::integer::u128" + "name": "from_token_id", + "type": "core::integer::u256" }, { - "name": "high", - "type": "core::integer::u128" + "name": "to_token_id", + "type": "core::integer::u256" } - ] + ], + "outputs": [], + "state_mutability": "external" }, { "type": "function", - "name": "mint", + "name": "update_tokens_metadata", "inputs": [ { - "name": "amount", - "type": "core::integer::u256" + "name": "token_ids", + "type": "core::array::Span::" } ], "outputs": [], @@ -5625,31 +3989,28 @@ }, { "type": "impl", - "name": "UpgradeableImpl", - "interface_name": "openzeppelin_upgrades::interface::IUpgradeable" + "name": "ERC1155MixinImpl", + "interface_name": "openzeppelin_token::erc1155::interface::ERC1155ABI" }, { - "type": "interface", - "name": "openzeppelin_upgrades::interface::IUpgradeable", - "items": [ + "type": "struct", + "name": "core::array::Span::", + "members": [ { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "new_class_hash", - "type": "core::starknet::class_hash::ClassHash" - } - ], - "outputs": [], - "state_mutability": "external" + "name": "snapshot", + "type": "@core::array::Array::" } ] }, { - "type": "impl", - "name": "ERC20MixinImpl", - "interface_name": "openzeppelin_token::erc20::interface::IERC20Mixin" + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] }, { "type": "enum", @@ -5666,65 +4027,184 @@ ] }, { - "type": "struct", - "name": "core::byte_array::ByteArray", - "members": [ + "type": "interface", + "name": "openzeppelin_token::erc1155::interface::ERC1155ABI", + "items": [ { - "name": "data", - "type": "core::array::Array::" + "type": "function", + "name": "balance_of", + "inputs": [ + { + "name": "account", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "token_id", + "type": "core::integer::u256" + } + ], + "outputs": [ + { + "type": "core::integer::u256" + } + ], + "state_mutability": "view" }, { - "name": "pending_word", - "type": "core::felt252" + "type": "function", + "name": "balance_of_batch", + "inputs": [ + { + "name": "accounts", + "type": "core::array::Span::" + }, + { + "name": "token_ids", + "type": "core::array::Span::" + } + ], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" }, { - "name": "pending_word_len", - "type": "core::integer::u32" - } - ] - }, - { - "type": "interface", - "name": "openzeppelin_token::erc20::interface::IERC20Mixin", - "items": [ + "type": "function", + "name": "safe_transfer_from", + "inputs": [ + { + "name": "from", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "to", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "token_id", + "type": "core::integer::u256" + }, + { + "name": "value", + "type": "core::integer::u256" + }, + { + "name": "data", + "type": "core::array::Span::" + } + ], + "outputs": [], + "state_mutability": "external" + }, { "type": "function", - "name": "total_supply", - "inputs": [], + "name": "safe_batch_transfer_from", + "inputs": [ + { + "name": "from", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "to", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "token_ids", + "type": "core::array::Span::" + }, + { + "name": "values", + "type": "core::array::Span::" + }, + { + "name": "data", + "type": "core::array::Span::" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "is_approved_for_all", + "inputs": [ + { + "name": "owner", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "operator", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "set_approval_for_all", + "inputs": [ + { + "name": "operator", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "approved", + "type": "core::bool" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "supports_interface", + "inputs": [ + { + "name": "interface_id", + "type": "core::felt252" + } + ], "outputs": [ { - "type": "core::integer::u256" + "type": "core::bool" } ], "state_mutability": "view" }, { "type": "function", - "name": "balance_of", + "name": "uri", "inputs": [ { - "name": "account", - "type": "core::starknet::contract_address::ContractAddress" + "name": "token_id", + "type": "core::integer::u256" } ], "outputs": [ { - "type": "core::integer::u256" + "type": "core::byte_array::ByteArray" } ], "state_mutability": "view" }, { "type": "function", - "name": "allowance", + "name": "balanceOf", "inputs": [ { - "name": "owner", + "name": "account", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "spender", - "type": "core::starknet::contract_address::ContractAddress" + "name": "tokenId", + "type": "core::integer::u256" } ], "outputs": [ @@ -5736,150 +4216,114 @@ }, { "type": "function", - "name": "transfer", + "name": "balanceOfBatch", "inputs": [ { - "name": "recipient", - "type": "core::starknet::contract_address::ContractAddress" + "name": "accounts", + "type": "core::array::Span::" }, { - "name": "amount", - "type": "core::integer::u256" + "name": "tokenIds", + "type": "core::array::Span::" } ], "outputs": [ { - "type": "core::bool" + "type": "core::array::Span::" } ], - "state_mutability": "external" + "state_mutability": "view" }, { "type": "function", - "name": "transfer_from", + "name": "safeTransferFrom", "inputs": [ { - "name": "sender", + "name": "from", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "recipient", + "name": "to", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "amount", + "name": "tokenId", "type": "core::integer::u256" - } - ], - "outputs": [ + }, { - "type": "core::bool" + "name": "value", + "type": "core::integer::u256" + }, + { + "name": "data", + "type": "core::array::Span::" } ], + "outputs": [], "state_mutability": "external" }, { "type": "function", - "name": "approve", + "name": "safeBatchTransferFrom", "inputs": [ { - "name": "spender", + "name": "from", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "amount", - "type": "core::integer::u256" - } - ], - "outputs": [ - { - "type": "core::bool" - } - ], - "state_mutability": "external" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [ - { - "type": "core::byte_array::ByteArray" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [ + "name": "to", + "type": "core::starknet::contract_address::ContractAddress" + }, { - "type": "core::byte_array::ByteArray" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [ + "name": "tokenIds", + "type": "core::array::Span::" + }, { - "type": "core::integer::u8" - } - ], - "state_mutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [ + "name": "values", + "type": "core::array::Span::" + }, { - "type": "core::integer::u256" + "name": "data", + "type": "core::array::Span::" } ], - "state_mutability": "view" + "outputs": [], + "state_mutability": "external" }, { "type": "function", - "name": "balanceOf", + "name": "isApprovedForAll", "inputs": [ { - "name": "account", + "name": "owner", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "operator", "type": "core::starknet::contract_address::ContractAddress" } ], "outputs": [ { - "type": "core::integer::u256" + "type": "core::bool" } ], "state_mutability": "view" }, { "type": "function", - "name": "transferFrom", + "name": "setApprovalForAll", "inputs": [ { - "name": "sender", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "recipient", + "name": "operator", "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "amount", - "type": "core::integer::u256" - } - ], - "outputs": [ - { + "name": "approved", "type": "core::bool" } ], + "outputs": [], "state_mutability": "external" } ] @@ -5944,6 +4388,45 @@ } ] }, + { + "type": "impl", + "name": "ERC4906MixinImpl", + "interface_name": "dojo_examples::externals::components::erc4906::IERC4906" + }, + { + "type": "interface", + "name": "dojo_examples::externals::components::erc4906::IERC4906", + "items": [ + { + "type": "function", + "name": "emit_metadata_update", + "inputs": [ + { + "name": "token_id", + "type": "core::integer::u256" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "emit_batch_metadata_update", + "inputs": [ + { + "name": "from_token_id", + "type": "core::integer::u256" + }, + { + "name": "to_token_id", + "type": "core::integer::u256" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, { "type": "constructor", "name": "constructor", @@ -5953,84 +4436,147 @@ "type": "core::starknet::contract_address::ContractAddress" }, { - "name": "name", + "name": "base_uri", "type": "core::byte_array::ByteArray" + } + ] + }, + { + "type": "event", + "name": "openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferSingle", + "kind": "struct", + "members": [ + { + "name": "operator", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "key" }, { - "name": "symbol", - "type": "core::byte_array::ByteArray" + "name": "from", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "key" }, { - "name": "initial_supply", - "type": "core::integer::u256" + "name": "to", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "key" }, { - "name": "recipient", - "type": "core::starknet::contract_address::ContractAddress" + "name": "id", + "type": "core::integer::u256", + "kind": "data" + }, + { + "name": "value", + "type": "core::integer::u256", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferBatch", + "kind": "struct", + "members": [ + { + "name": "operator", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "key" + }, + { + "name": "from", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "key" + }, + { + "name": "to", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "key" + }, + { + "name": "ids", + "type": "core::array::Span::", + "kind": "data" + }, + { + "name": "values", + "type": "core::array::Span::", + "kind": "data" } ] }, { "type": "event", - "name": "openzeppelin_token::erc20::erc20::ERC20Component::Transfer", + "name": "openzeppelin_token::erc1155::erc1155::ERC1155Component::ApprovalForAll", "kind": "struct", "members": [ { - "name": "from", + "name": "owner", "type": "core::starknet::contract_address::ContractAddress", "kind": "key" }, { - "name": "to", + "name": "operator", "type": "core::starknet::contract_address::ContractAddress", "kind": "key" }, { - "name": "value", - "type": "core::integer::u256", + "name": "approved", + "type": "core::bool", "kind": "data" } ] }, { "type": "event", - "name": "openzeppelin_token::erc20::erc20::ERC20Component::Approval", + "name": "openzeppelin_token::erc1155::erc1155::ERC1155Component::URI", "kind": "struct", "members": [ { - "name": "owner", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" - }, - { - "name": "spender", - "type": "core::starknet::contract_address::ContractAddress", - "kind": "key" + "name": "value", + "type": "core::byte_array::ByteArray", + "kind": "data" }, { - "name": "value", + "name": "id", "type": "core::integer::u256", - "kind": "data" + "kind": "key" } ] }, { "type": "event", - "name": "openzeppelin_token::erc20::erc20::ERC20Component::Event", + "name": "openzeppelin_token::erc1155::erc1155::ERC1155Component::Event", "kind": "enum", "variants": [ { - "name": "Transfer", - "type": "openzeppelin_token::erc20::erc20::ERC20Component::Transfer", + "name": "TransferSingle", + "type": "openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferSingle", "kind": "nested" }, { - "name": "Approval", - "type": "openzeppelin_token::erc20::erc20::ERC20Component::Approval", + "name": "TransferBatch", + "type": "openzeppelin_token::erc1155::erc1155::ERC1155Component::TransferBatch", + "kind": "nested" + }, + { + "name": "ApprovalForAll", + "type": "openzeppelin_token::erc1155::erc1155::ERC1155Component::ApprovalForAll", + "kind": "nested" + }, + { + "name": "URI", + "type": "openzeppelin_token::erc1155::erc1155::ERC1155Component::URI", "kind": "nested" } ] }, + { + "type": "event", + "name": "openzeppelin_introspection::src5::SRC5Component::Event", + "kind": "enum", + "variants": [] + }, { "type": "event", "name": "openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred", @@ -6084,36 +4630,63 @@ }, { "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", + "name": "dojo_examples::externals::components::erc4906::ERC4906Component::BatchMetadataUpdate", "kind": "struct", "members": [ { - "name": "class_hash", - "type": "core::starknet::class_hash::ClassHash", - "kind": "data" + "name": "from_token_id", + "type": "core::integer::u256", + "kind": "key" + }, + { + "name": "to_token_id", + "type": "core::integer::u256", + "kind": "key" + } + ] + }, + { + "type": "event", + "name": "dojo_examples::externals::components::erc4906::ERC4906Component::MetadataUpdate", + "kind": "struct", + "members": [ + { + "name": "token_id", + "type": "core::integer::u256", + "kind": "key" } ] }, { "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", + "name": "dojo_examples::externals::components::erc4906::ERC4906Component::Event", "kind": "enum", "variants": [ { - "name": "Upgraded", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", + "name": "BatchMetadataUpdate", + "type": "dojo_examples::externals::components::erc4906::ERC4906Component::BatchMetadataUpdate", + "kind": "nested" + }, + { + "name": "MetadataUpdate", + "type": "dojo_examples::externals::components::erc4906::ERC4906Component::MetadataUpdate", "kind": "nested" } ] }, { "type": "event", - "name": "dojo_examples::externals::erc20::ERC20Token::Event", + "name": "dojo_examples::externals::erc1155::ERC1155Token::Event", "kind": "enum", "variants": [ { - "name": "ERC20Event", - "type": "openzeppelin_token::erc20::erc20::ERC20Component::Event", + "name": "ERC1155Event", + "type": "openzeppelin_token::erc1155::erc1155::ERC1155Component::Event", + "kind": "flat" + }, + { + "name": "SRC5Event", + "type": "openzeppelin_introspection::src5::SRC5Component::Event", "kind": "flat" }, { @@ -6122,8 +4695,8 @@ "kind": "flat" }, { - "name": "UpgradeableEvent", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", + "name": "ERC4906Event", + "type": "dojo_examples::externals::components::erc4906::ERC4906Component::Event", "kind": "flat" } ] @@ -6131,42 +4704,34 @@ ], "constructor_calldata": [ "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", - "str:Wood", - "str:WOOD", - "u256:0x10000000000000", - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" - ], - "encoded_constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", - "0x0", - "0x576f6f64", - "0x4", - "0x0", - "0x574f4f44", - "0x4", - "0x10000000000000", - "0x0", - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" - ], - "entrypoints": [ - "mint", - "upgrade", - "transfer", - "transfer_from", - "approve", - "transferFrom", - "transfer_ownership", - "renounce_ownership", - "transferOwnership", - "renounceOwnership" + "str:https://rewards.com/" + ] + }, + { + "class_hash": "0x38d50bde18609efa98b736a8ca582729255674058c54d19ad03949c454ddfc4", + "contract_name": "Saloon", + "instance_name": "Saloon", + "address": "0x2bd802e28bba82c7c6a8ca4604a397b6ca0d263fa56b93c818d15c8ab55991a", + "abi": [ + { + "type": "constructor", + "name": "constructor", + "inputs": [] + }, + { + "type": "event", + "name": "dojo_examples::externals::saloon::Saloon::Event", + "kind": "enum", + "variants": [] + } ], - "block_number": null + "constructor_calldata": [] }, { - "class_hash": "0x19f8f2dae7b9b09b3243e30beb37a29a8a01e91409bd6d2ee2d253336d47659", + "class_hash": "0x7186749b8ff1e51555b77d6ae343eadcad699634796227a70d99e037832f192", "contract_name": "ERC20Token", - "tag": "ns2-GoldToken", - "address": "0x3304f8450ed4eec13704d3e8a3dbc6fec8abf3c08fb8793b98b43a15f0a225d", + "instance_name": "WoodToken", + "address": "0x33f5acb2e6bc57febe867e4624a481d9c597011de7f55e37c8e1efd5a110d58", "abi": [ { "type": "struct", @@ -6194,29 +4759,6 @@ "outputs": [], "state_mutability": "external" }, - { - "type": "impl", - "name": "UpgradeableImpl", - "interface_name": "openzeppelin_upgrades::interface::IUpgradeable" - }, - { - "type": "interface", - "name": "openzeppelin_upgrades::interface::IUpgradeable", - "items": [ - { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "new_class_hash", - "type": "core::starknet::class_hash::ClassHash" - } - ], - "outputs": [], - "state_mutability": "external" - } - ] - }, { "type": "impl", "name": "ERC20MixinImpl", @@ -6653,30 +5195,6 @@ } ] }, - { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "struct", - "members": [ - { - "name": "class_hash", - "type": "core::starknet::class_hash::ClassHash", - "kind": "data" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "enum", - "variants": [ - { - "name": "Upgraded", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "nested" - } - ] - }, { "type": "event", "name": "dojo_examples::externals::erc20::ERC20Token::Event", @@ -6691,134 +5209,17 @@ "name": "OwnableEvent", "type": "openzeppelin_access::ownable::ownable::OwnableComponent::Event", "kind": "flat" - }, - { - "name": "UpgradeableEvent", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "flat" } ] } ], "constructor_calldata": [ "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", - "str:Gold", - "str:GOLD", + "str:Wood", + "str:WOOD", "u256:0x10000000000000", "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" - ], - "encoded_constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba", - "0x0", - "0x476f6c64", - "0x4", - "0x0", - "0x474f4c44", - "0x4", - "0x10000000000000", - "0x0", - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" - ], - "entrypoints": [ - "mint", - "upgrade", - "transfer", - "transfer_from", - "approve", - "transferFrom", - "transfer_ownership", - "renounce_ownership", - "transferOwnership", - "renounceOwnership" - ], - "block_number": null - }, - { - "class_hash": "0x6910d29e4e5fccce2bc3da8759f242318a324daf6b48d3c80287165140511de", - "contract_name": "Bank", - "tag": "ns3-Bank", - "address": "0x539aa2fa9ca71abcb9e3dc92bd270f077d0aee29cbdf1a73321551080aaeaac", - "abi": [ - { - "type": "impl", - "name": "UpgradeableImpl", - "interface_name": "openzeppelin_upgrades::interface::IUpgradeable" - }, - { - "type": "interface", - "name": "openzeppelin_upgrades::interface::IUpgradeable", - "items": [ - { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "new_class_hash", - "type": "core::starknet::class_hash::ClassHash" - } - ], - "outputs": [], - "state_mutability": "external" - } - ] - }, - { - "type": "constructor", - "name": "constructor", - "inputs": [ - { - "name": "owner", - "type": "core::starknet::contract_address::ContractAddress" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "struct", - "members": [ - { - "name": "class_hash", - "type": "core::starknet::class_hash::ClassHash", - "kind": "data" - } - ] - }, - { - "type": "event", - "name": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "enum", - "variants": [ - { - "name": "Upgraded", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded", - "kind": "nested" - } - ] - }, - { - "type": "event", - "name": "dojo_examples::externals::bank::Bank::Event", - "kind": "enum", - "variants": [ - { - "name": "UpgradeableEvent", - "type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event", - "kind": "flat" - } - ] - } - ], - "constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" - ], - "encoded_constructor_calldata": [ - "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba" - ], - "entrypoints": [ - "upgrade" - ], - "block_number": null + ] } ] } \ No newline at end of file diff --git a/examples/spawn-and-move/src/actions.cairo b/examples/spawn-and-move/src/actions.cairo index b69b2f42de..83c1d20e48 100644 --- a/examples/spawn-and-move/src/actions.cairo +++ b/examples/spawn-and-move/src/actions.cairo @@ -1,4 +1,4 @@ -use dojo_examples::models::{Direction, Position}; +use dojo_examples::models::{Direction, PlayerItem, Position}; // Interface of a self-managed external contract "ns-Hello" #[starknet::interface] @@ -11,6 +11,7 @@ pub trait IActions { fn spawn(ref self: T); fn move(ref self: T, direction: Direction); fn set_player_config(ref self: T, name: ByteArray); + fn update_player_config_items(ref self: T, items: Array); fn update_player_config_name(ref self: T, name: ByteArray); fn get_player_position(self: @T) -> Position; fn reset_player_config(ref self: T); @@ -37,7 +38,8 @@ pub mod actions { use dojo_examples::dungeon::{IDungeonDispatcher, IDungeonDispatcherTrait}; use dojo_examples::lib_math::{SimpleMathDispatcherTrait, SimpleMathLibraryDispatcher}; use dojo_examples::models::{ - Direction, Moves, MovesValue, PlayerConfig, PlayerItem, Position, ServerProfile, Vec2, + Direction, Moves, MovesValue, PlayerConfig, PlayerConfigItems, PlayerItem, Position, + ServerProfile, Vec2, }; use dojo_examples::utils::next_position; use starknet::{ContractAddress, get_caller_address}; @@ -142,6 +144,20 @@ pub mod actions { world.write_model(@config); } + fn update_player_config_items(ref self: ContractState, items: Array) { + let mut world = self.world_default(); + let player = get_caller_address(); + let len = items.len(); + let favorite_item = match len > 0 { + true => Some(len - 1), + false => None, + }; + let player_items = PlayerConfigItems { items, favorite_item }; + + // Don't need to read the model here, we directly overwrite the member "items". + world.write_schema(Model::::ptr_from_keys(player), @player_items); + } + fn update_player_config_name(ref self: ContractState, name: ByteArray) { let mut world = self.world_default(); let player = get_caller_address(); diff --git a/examples/spawn-and-move/src/models.cairo b/examples/spawn-and-move/src/models.cairo index 2bb78d1368..359f9bbb9d 100644 --- a/examples/spawn-and-move/src/models.cairo +++ b/examples/spawn-and-move/src/models.cairo @@ -78,6 +78,12 @@ pub struct PlayerItem { pub score: i32, } +#[derive(Drop, Serde, Introspect)] +pub struct PlayerConfigItems { + pub items: Array, + pub favorite_item: Option, +} + #[derive(Drop, Serde)] #[dojo::model] pub struct PlayerConfig { diff --git a/examples/spawn-and-move/torii_dev.toml b/examples/spawn-and-move/torii_dev.toml new file mode 100644 index 0000000000..81449c7d6a --- /dev/null +++ b/examples/spawn-and-move/torii_dev.toml @@ -0,0 +1,9 @@ +# The World address to index. +world_address = "0x3e6abad7e2199acaa34a390c7cf3d0d732685ed3a4ea8493dbb7804f5e25002" + +# Default RPC URL configuration +rpc = "http://127.0.0.1:5050" + +# Database configuration +# Optional: If not specified, uses in-memory database +db_dir = "torii/dev" diff --git a/spawn-and-move-db.tar.gz b/spawn-and-move-db.tar.gz index da5a09c0be..2b24821148 100644 Binary files a/spawn-and-move-db.tar.gz and b/spawn-and-move-db.tar.gz differ