diff --git a/bin/sozo/src/commands/model.rs b/bin/sozo/src/commands/model.rs index 4458f940cc..939604a0cb 100644 --- a/bin/sozo/src/commands/model.rs +++ b/bin/sozo/src/commands/model.rs @@ -1,5 +1,6 @@ -use anyhow::Result; +use anyhow::{Context, Result}; use clap::{Args, Subcommand}; +use dojo_world::config::calldata_decoder; use scarb::core::Config; use sozo_ops::model; use sozo_ops::resource_descriptor::ResourceDescriptor; @@ -10,6 +11,7 @@ use tracing::trace; use super::options::starknet::StarknetOptions; use super::options::world::WorldOptions; use crate::utils; +use crate::utils::CALLDATA_DOC; #[derive(Debug, Args)] pub struct ModelArgs { @@ -108,9 +110,12 @@ hashes, called 'hash' in the following documentation. tag_or_name: ResourceDescriptor, #[arg(value_name = "KEYS")] - #[arg(value_delimiter = ',')] - #[arg(help = "Comma seperated values e.g., 0x12345,0x69420,...")] - keys: Vec, + #[arg(num_args = 1..)] + #[arg(required = true)] + #[arg( + help = format!("List of values representing the serialized keys of the model.\n{CALLDATA_DOC}") + )] + keys: Vec, #[command(flatten)] world: WorldOptions, @@ -207,7 +212,7 @@ impl ModelArgs { let (record, _, _) = model::model_get( tag.to_string(), - keys, + parse_keys(&keys)?, world_diff.world_info.address, &provider, block_id, @@ -222,3 +227,152 @@ impl ModelArgs { }) } } + +/// Parses the keys from the command line into a vector of Felt representing the serialized keys of +/// the model. +fn parse_keys(keys: &[String]) -> Result> { + let mut keys_serde = vec![]; + + for key in keys { + let key_felt = calldata_decoder::decode_single_calldata(key) + .with_context(|| format!("Failed to decode key: {}", key))?; + keys_serde.extend(key_felt); + } + + Ok(keys_serde) +} + +#[cfg(test)] +mod tests { + // To do: Add more tests for the flattening of keys + // let flattened_keys: Vec = keys.into_iter().flatten().collect(); + + use clap::Parser; + use starknet::core::utils::cairo_short_string_to_felt; + use starknet::macros::felt; + + use super::*; + + #[derive(Parser, Debug)] + struct TestCommand { + #[command(subcommand)] + command: ModelCommand, + } + + #[test] + fn test_model_get_argument_parsing() { + // Test parsing with hex + let args = TestCommand::parse_from([ + "model", + "get", + "Account", + "0x054cb935d86d80b5a0a6e756edf448ab33876d01dd2b07a2a4e63a41e06d0ef5", + "0x6d69737479", + ]); + + if let ModelCommand::Get { keys, .. } = args.command { + let expected = vec![ + felt!("0x054cb935d86d80b5a0a6e756edf448ab33876d01dd2b07a2a4e63a41e06d0ef5"), + felt!("0x6d69737479"), + ]; + + assert_eq!(parse_keys(&keys).unwrap(), expected); + } else { + panic!("Expected Get command"); + } + + // Test parsing with short string prefix + let args = TestCommand::parse_from([ + "model", + "get", + "Account", + "0x054cb935d86d80b5a0a6e756edf448ab33876d01dd2b07a2a4e63a41e06d0ef5", + "sstr:\"misty\"", + ]); + + if let ModelCommand::Get { keys, .. } = args.command { + let expected = vec![ + felt!("0x054cb935d86d80b5a0a6e756edf448ab33876d01dd2b07a2a4e63a41e06d0ef5"), + cairo_short_string_to_felt("misty").unwrap(), + ]; + + assert_eq!(parse_keys(&keys).unwrap(), expected); + } else { + panic!("Expected Get command"); + } + + // Test parsing with u256 prefix + let args = TestCommand::parse_from([ + "model", + "get", + "Account", + "0x054cb935d86d80b5a0a6e756edf448ab33876d01dd2b07a2a4e63a41e06d0ef5", + "u256:0x1", + ]); + + if let ModelCommand::Get { keys, .. } = args.command { + let expected = vec![ + felt!("0x054cb935d86d80b5a0a6e756edf448ab33876d01dd2b07a2a4e63a41e06d0ef5"), + Felt::ONE, + Felt::ZERO, + ]; + + assert_eq!(parse_keys(&keys).unwrap(), expected); + } else { + panic!("Expected Get command"); + } + + // Test parsing with int prefix + let args = TestCommand::parse_from(["model", "get", "Account", "int:-123456789"]); + + if let ModelCommand::Get { keys, .. } = args.command { + let expected = vec![(-123456789_i64).into()]; + + assert_eq!(parse_keys(&keys).unwrap(), expected); + } else { + panic!("Expected Get command"); + } + + // Test parsing with str prefix + let args = TestCommand::parse_from(["model", "get", "Account", "str:hello"]); + + if let ModelCommand::Get { keys, .. } = args.command { + let expected = vec![ + Felt::ZERO, + cairo_short_string_to_felt("hello").unwrap(), + Felt::from_dec_str("5").unwrap(), + ]; + + assert_eq!(parse_keys(&keys).unwrap(), expected); + } else { + panic!("Expected Get command"); + } + + // Test parsing with all prefixes + let args = TestCommand::parse_from([ + "model", + "get", + "Account", + "0x054cb935d86d80b5a0a6e756edf448ab33876d01dd2b07a2a4e63a41e06d0ef5", + "u256:0x1", + "int:-123456789", + "str:hello", + ]); + + if let ModelCommand::Get { keys, .. } = args.command { + let expected = vec![ + felt!("0x054cb935d86d80b5a0a6e756edf448ab33876d01dd2b07a2a4e63a41e06d0ef5"), + Felt::ONE, + Felt::ZERO, + (-123456789_i64).into(), + Felt::ZERO, + cairo_short_string_to_felt("hello").unwrap(), + Felt::from_dec_str("5").unwrap(), + ]; + + assert_eq!(parse_keys(&keys).unwrap(), expected); + } else { + panic!("Expected Get command"); + } + } +} diff --git a/bin/sozo/tests/test_data/policies.json b/bin/sozo/tests/test_data/policies.json index 0b557554d0..3c8f5c8260 100644 --- a/bin/sozo/tests/test_data/policies.json +++ b/bin/sozo/tests/test_data/policies.json @@ -1,134 +1,134 @@ [ { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "uuid" + "target": "0x780e3207b4f11b56f32cc0f19975af5b3a4df3cad6a4b0ab59a1702ba0304d8", + "method": "upgrade" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "set_metadata" + "target": "0x7447baef53fdcc376b73963aa2bd3b0894be7d5bd40f596cc44d1d54d80ea52", + "method": "spawn" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "register_namespace" + "target": "0x7447baef53fdcc376b73963aa2bd3b0894be7d5bd40f596cc44d1d54d80ea52", + "method": "move" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "register_event" + "target": "0x7447baef53fdcc376b73963aa2bd3b0894be7d5bd40f596cc44d1d54d80ea52", + "method": "set_player_config" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "register_model" + "target": "0x7447baef53fdcc376b73963aa2bd3b0894be7d5bd40f596cc44d1d54d80ea52", + "method": "update_player_config_name" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "register_contract" + "target": "0x7447baef53fdcc376b73963aa2bd3b0894be7d5bd40f596cc44d1d54d80ea52", + "method": "reset_player_config" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "init_contract" + "target": "0x7447baef53fdcc376b73963aa2bd3b0894be7d5bd40f596cc44d1d54d80ea52", + "method": "set_player_server_profile" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "upgrade_event" + "target": "0x7447baef53fdcc376b73963aa2bd3b0894be7d5bd40f596cc44d1d54d80ea52", + "method": "set_models" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "upgrade_model" + "target": "0x7447baef53fdcc376b73963aa2bd3b0894be7d5bd40f596cc44d1d54d80ea52", + "method": "enter_dungeon" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "upgrade_contract" + "target": "0x7447baef53fdcc376b73963aa2bd3b0894be7d5bd40f596cc44d1d54d80ea52", + "method": "upgrade" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "emit_event" + "target": "0xca72f1cd782b614fa12c8b54afa895a169a4de1792738d4e3f09d0929f7834", + "method": "upgrade" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "emit_events" + "target": "0x608ffd2e6b74a7bede256770ebe3d07bc65c79622e6a9396ea764011152102", + "method": "upgrade" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "set_entity" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "uuid" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "set_entities" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "set_metadata" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "delete_entity" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "register_namespace" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "delete_entities" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "register_event" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "grant_owner" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "register_model" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "revoke_owner" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "register_contract" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "grant_writer" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "init_contract" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "revoke_writer" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "upgrade_event" }, { - "target": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", - "method": "upgrade" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "upgrade_model" }, { - "target": "0xe1fb33e10629d61ac3eb7c9bdca6a0ce947bcf7ecf598fbc0c42f9c76b3808", - "method": "upgrade" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "upgrade_contract" }, { - "target": "0x77a851ab985e88cbfdaee77a7c10e7afde9c9c3e49aa9ec2537e41de44e857c", - "method": "upgrade" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "emit_event" }, { - "target": "0x4ba8772b4785c0afce5b73ed98d30cf8832e3bfcceff5a688b085ef6d0f164e", - "method": "spawn" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "emit_events" }, { - "target": "0x4ba8772b4785c0afce5b73ed98d30cf8832e3bfcceff5a688b085ef6d0f164e", - "method": "move" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "set_entity" }, { - "target": "0x4ba8772b4785c0afce5b73ed98d30cf8832e3bfcceff5a688b085ef6d0f164e", - "method": "set_player_config" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "set_entities" }, { - "target": "0x4ba8772b4785c0afce5b73ed98d30cf8832e3bfcceff5a688b085ef6d0f164e", - "method": "update_player_config_name" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "delete_entity" }, { - "target": "0x4ba8772b4785c0afce5b73ed98d30cf8832e3bfcceff5a688b085ef6d0f164e", - "method": "reset_player_config" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "delete_entities" }, { - "target": "0x4ba8772b4785c0afce5b73ed98d30cf8832e3bfcceff5a688b085ef6d0f164e", - "method": "set_player_server_profile" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "grant_owner" }, { - "target": "0x4ba8772b4785c0afce5b73ed98d30cf8832e3bfcceff5a688b085ef6d0f164e", - "method": "set_models" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "revoke_owner" }, { - "target": "0x4ba8772b4785c0afce5b73ed98d30cf8832e3bfcceff5a688b085ef6d0f164e", - "method": "enter_dungeon" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "grant_writer" }, { - "target": "0x4ba8772b4785c0afce5b73ed98d30cf8832e3bfcceff5a688b085ef6d0f164e", - "method": "upgrade" + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", + "method": "revoke_writer" }, { - "target": "0x3032d716e69f67e05983edad3d3b5b8efa9b08d09c778e2eecf224e095a1160", + "target": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", "method": "upgrade" }, { diff --git a/crates/dojo/world/src/config/calldata_decoder.rs b/crates/dojo/world/src/config/calldata_decoder.rs index b59142ca5c..fb924d0ee8 100644 --- a/crates/dojo/world/src/config/calldata_decoder.rs +++ b/crates/dojo/world/src/config/calldata_decoder.rs @@ -82,7 +82,8 @@ impl CalldataDecoder for U256CalldataDecoder { struct StrCalldataDecoder; impl CalldataDecoder for StrCalldataDecoder { fn decode(&self, input: &str) -> DecoderResult> { - let ba = ByteArray::from_string(input)?; + let no_quotes = input.trim_start_matches('"').trim_end_matches('"'); + let ba = ByteArray::from_string(no_quotes)?; Ok(ByteArray::cairo_serialize(&ba)) } } @@ -91,7 +92,8 @@ impl CalldataDecoder for StrCalldataDecoder { struct ShortStrCalldataDecoder; impl CalldataDecoder for ShortStrCalldataDecoder { fn decode(&self, input: &str) -> DecoderResult> { - Ok(vec![cairo_short_string_to_felt(input)?]) + let no_quotes = input.trim_start_matches('"').trim_end_matches('"'); + Ok(vec![cairo_short_string_to_felt(no_quotes)?]) } } @@ -304,6 +306,39 @@ mod tests { assert_eq!(result, expected); } + #[test] + fn test_str_decoder_long_with_quotes() { + let input = + vec_of_strings!["str:\"hello with spaces and a long string longer than 31 chars\""]; + + let expected = vec![ + // Length of the data. + 1_u128.into(), + // Data element. + cairo_short_string_to_felt("hello with spaces and a long st").unwrap(), + // Remaining word. + cairo_short_string_to_felt("ring longer than 31 chars").unwrap(), + // Remaining word's length. + 25_u128.into(), + ]; + + let result = decode_calldata(&input).unwrap(); + assert_eq!(result, expected); + } + + #[test] + fn test_str_decoder_inner_quotes() { + let input = vec_of_strings!["str:\"hello\" there\""]; + let expected = vec![ + 0_u128.into(), + cairo_short_string_to_felt("hello\" there").unwrap(), + 12_u128.into(), + ]; + + let result = decode_calldata(&input).unwrap(); + assert_eq!(result, expected); + } + #[test] fn test_default_decoder_hex() { let input = vec_of_strings!["0x64"]; diff --git a/examples/game-lib/Scarb.lock b/examples/game-lib/Scarb.lock index 0571a8d2c5..64724eb823 100644 --- a/examples/game-lib/Scarb.lock +++ b/examples/game-lib/Scarb.lock @@ -17,7 +17,7 @@ dependencies = [ [[package]] name = "dojo" -version = "1.0.12" +version = "1.1.2" dependencies = [ "dojo_plugin", ] diff --git a/examples/spawn-and-move/manifest_dev.json b/examples/spawn-and-move/manifest_dev.json index e47b64ed89..38334bcc61 100644 --- a/examples/spawn-and-move/manifest_dev.json +++ b/examples/spawn-and-move/manifest_dev.json @@ -1,7 +1,7 @@ { "world": { - "class_hash": "0x2361c106e790c1d1bff8c9f73c9d84e9e3ac94b2d8df6db4ddd55e82c33a9b4", - "address": "0x736c456dec44741fad1940876e62342a626ca73fd4ac574a94eb3ded2e25d8d", + "class_hash": "0x4b767fda48530353c2e44e4b9433f4d75c6c9974aaff43ecc00de9455eb71b8", + "address": "0x5baea2d83fc19bae80dc5d4626a27b2b2d5012822cd862c56ed7007eb92eaa2", "seed": "dojo_examples", "name": "example", "entrypoints": [ @@ -1252,7 +1252,7 @@ }, "contracts": [ { - "address": "0x4ba8772b4785c0afce5b73ed98d30cf8832e3bfcceff5a688b085ef6d0f164e", + "address": "0x7447baef53fdcc376b73963aa2bd3b0894be7d5bd40f596cc44d1d54d80ea52", "class_hash": "0x2267c07d691a6da353f0beaec2e15f3b79ef271953364efb143c343713a6ccd", "abi": [ { @@ -1606,7 +1606,7 @@ ] }, { - "address": "0x77a851ab985e88cbfdaee77a7c10e7afde9c9c3e49aa9ec2537e41de44e857c", + "address": "0x608ffd2e6b74a7bede256770ebe3d07bc65c79622e6a9396ea764011152102", "class_hash": "0x7b31bb137c041fbe8247724a888bb108aaf2ff6b2bb7be5ecf5c954471e30c3", "abi": [ { @@ -1800,7 +1800,7 @@ ] }, { - "address": "0xe1fb33e10629d61ac3eb7c9bdca6a0ce947bcf7ecf598fbc0c42f9c76b3808", + "address": "0xca72f1cd782b614fa12c8b54afa895a169a4de1792738d4e3f09d0929f7834", "class_hash": "0x38c4b1f36acecf15ea27430f34956bdfed933271ef23bcb9444db15dce66c6b", "abi": [ { @@ -1976,7 +1976,7 @@ ] }, { - "address": "0x3032d716e69f67e05983edad3d3b5b8efa9b08d09c778e2eecf224e095a1160", + "address": "0x780e3207b4f11b56f32cc0f19975af5b3a4df3cad6a4b0ab59a1702ba0304d8", "class_hash": "0x5dd5b200655bdc68fba0ec23b25a9fb2d8ea2da118d60789c2d1d6adac3afae", "abi": [ { @@ -2162,37 +2162,49 @@ "models": [ { "members": [], - "class_hash": "0x2484dcdbc95660098ac9bd79cbd5d67b29db4440bd6ec29703edd2de2938239", + "class_hash": "0x5fff7fd534708d4d13ea05fd95ce6fb1c3623d0225bc752963246d4a5cd969e", + "tag": "ns-Flatbow", + "selector": "0x27a35f8bac96f1deebf4d3e83fc6b94a3da4e6d30a1ce34d5893d2fb602725d" + }, + { + "members": [], + "class_hash": "0x352619ce02b242854390b59216eca80b4d51a41ea96169847637216098b5b3c", "tag": "ns-Message", "selector": "0x7e77b60a338fa7414998176fd93ff265e4ca04b93105ac98f155bcb2e9e8438" }, { "members": [], - "class_hash": "0x39664ad816df26acffafde523703dabbbd6340c882f0a74c065a65456919e80", + "class_hash": "0x3cb57dec0524eee7b10b8df78ffd8167e04c8bfee85c81f0dc1883f333a0eeb", "tag": "ns-MockToken", "selector": "0x23ee42c8f47d1d693b966176dcd5deca0ec147b33e42186382d9d027603a6fd" }, { "members": [], - "class_hash": "0x150eee99ad95167e659a29f95d488f9b3352ede4a71ffbfcf0c6c58e0bb8bfc", + "class_hash": "0x67080a2923abdf48e821518da3e58bde33881db7187571cbf43d1bae1ac6636", "tag": "ns-Moves", "selector": "0x54104f060e63bdd9d68bb872f2dc6d40a101e168e18b999c10de348d06ea24a" }, { "members": [], - "class_hash": "0x71182ddf8495649cadc7d56859b2ad948fb1ff9d662ceb87d9f0acddb35741f", + "class_hash": "0x6bbee80be480d884a298afb0d041e7755832c271e8291db9c581a0d725e9027", "tag": "ns-PlayerConfig", "selector": "0x3bea561c3e142a660a00d1471d7712b70695dc4ee3b173aeaefd5178f7a21af" }, { "members": [], - "class_hash": "0x42626cdced5ba2ef1b35c3bdc9f2585af36195cb61a9aa522d1fa7099afce59", + "class_hash": "0x7e7de15d29fc42772368e242acc59474457fa7b6ccd6944e7aa972430d427a8", "tag": "ns-Position", "selector": "0x5e12c61e9cf30881c126a6d298975c8d79f95abed1a05c2d38b7803ed19445f" }, { "members": [], - "class_hash": "0x6cbcf6752cad02e0b6013bf08ebf977e4e862f51cec295b30906aae79d692f", + "class_hash": "0x127b7a795eb7d381505d0cf99c4d7b34f72575bcb10fdce997fd5c81c5147f", + "tag": "ns-RiverSkale", + "selector": "0x47f763aa7de3b872f7fbec198275547e06751dbe26b66281b9cffaed9938f24" + }, + { + "members": [], + "class_hash": "0xbdb10fde8e9d7ccd8c07a04a1c25cc226159f68695e0a8a1c2ffe7b8fc5a6d", "tag": "ns-ServerProfile", "selector": "0x641dc5f178aff0c7935a8f1ae30c6038a3d3512ea164d486f98bc37b6beabf" } @@ -2200,13 +2212,13 @@ "events": [ { "members": [], - "class_hash": "0x1ed25b9d560885e8749d828ad56723d84bb8ffeefb8c7315957cd984e6f91b2", + "class_hash": "0x7d4d38635c05c9da6b8d71126d426145d204057c593a3d0a65245356c59055b", "tag": "ns-Moved", "selector": "0x6d4c1ac3717ba997500153c52344a2acac5123bbfa0f78d3dcc04cb786826b0" }, { "members": [], - "class_hash": "0x4021dfedffcc0efe8a09b97c634fcab28a00581b684d972c7c906b99517bc20", + "class_hash": "0x72724ada5a30dca6c13cbd278307870b853dd6a4a34432600fa814d88175acd", "tag": "ns-MyInit", "selector": "0xe1c030210beae7e2153a7b996d7d2ae6a428faf16a61f192f02178718b6f0" } diff --git a/spawn-and-move-db.tar.gz b/spawn-and-move-db.tar.gz index fa6daa30b4..5a25cf38af 100644 Binary files a/spawn-and-move-db.tar.gz and b/spawn-and-move-db.tar.gz differ diff --git a/types-test-db.tar.gz b/types-test-db.tar.gz index 7432ca34df..46f40bd605 100644 Binary files a/types-test-db.tar.gz and b/types-test-db.tar.gz differ