Skip to content

Commit 5100dd3

Browse files
authored
fix(core): allow fixed layout upgrade for class hash change (#3274)
* fix(core): ensure fixed layout can be upgrade for class hash change only * fix warning and rebuild test db * fix test db with compatible katana version * rebuild test db * ci: bump katana for compatible version
1 parent 3c7d611 commit 5100dd3

File tree

9 files changed

+86
-72
lines changed

9 files changed

+86
-72
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ jobs:
7171
# This puts Katana in the path for integration tests.
7272
- name: Download Katana for integration tests
7373
run: |
74-
curl -L https://github.com/dojoengine/katana/releases/download/v1.6.0-alpha.0/katana_v1.6.0-alpha.0_linux_amd64.tar.gz -o katana.tar.gz;
74+
curl -L https://github.com/dojoengine/katana/releases/download/v1.6.0-alpha.1/katana_v1.6.0-alpha.1_linux_amd64.tar.gz -o katana.tar.gz;
7575
tar -C /usr/local/bin -xzf katana.tar.gz
7676
7777
- run: |

bin/sozo/tests/test_data/policies.json

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,138 +1,138 @@
11
[
22
{
3-
"target": "0x77293d49c3c8b54ff2937cf998560ce8560fdb758feb90ee80d38d71e01c5a7",
4-
"method": "upgrade"
5-
},
6-
{
7-
"target": "0x7252eae2a3eb9834676e5bac9ec8c1ca5c05591927611c5cac0b709ae3afa96",
8-
"method": "upgrade"
9-
},
10-
{
11-
"target": "0x35072c010b1bcd92956301ed807e9a48bf23037f5adb7ed092c0e36956f62af",
12-
"method": "upgrade"
13-
},
14-
{
15-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
3+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
164
"method": "uuid"
175
},
186
{
19-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
7+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
208
"method": "set_metadata"
219
},
2210
{
23-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
11+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
2412
"method": "register_namespace"
2513
},
2614
{
27-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
15+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
2816
"method": "register_event"
2917
},
3018
{
31-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
19+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
3220
"method": "register_model"
3321
},
3422
{
35-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
23+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
3624
"method": "register_contract"
3725
},
3826
{
39-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
27+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
4028
"method": "register_library"
4129
},
4230
{
43-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
31+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
4432
"method": "init_contract"
4533
},
4634
{
47-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
35+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
4836
"method": "upgrade_event"
4937
},
5038
{
51-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
39+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
5240
"method": "upgrade_model"
5341
},
5442
{
55-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
43+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
5644
"method": "upgrade_contract"
5745
},
5846
{
59-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
47+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
6048
"method": "emit_event"
6149
},
6250
{
63-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
51+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
6452
"method": "emit_events"
6553
},
6654
{
67-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
55+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
6856
"method": "set_entity"
6957
},
7058
{
71-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
59+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
7260
"method": "set_entities"
7361
},
7462
{
75-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
63+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
7664
"method": "delete_entity"
7765
},
7866
{
79-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
67+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
8068
"method": "delete_entities"
8169
},
8270
{
83-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
71+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
8472
"method": "grant_owner"
8573
},
8674
{
87-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
75+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
8876
"method": "revoke_owner"
8977
},
9078
{
91-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
79+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
9280
"method": "grant_writer"
9381
},
9482
{
95-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
83+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
9684
"method": "revoke_writer"
9785
},
9886
{
99-
"target": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
87+
"target": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
10088
"method": "upgrade"
10189
},
10290
{
103-
"target": "0x4b90458e67d04e9070ab96eaeca03955ce824bbb470cfc159d34ac88b1ba298",
91+
"target": "0x79891cbfc9d500a32306a5ee37fbf67417b5e3cd75ff9b35fcf1931614aa884",
92+
"method": "upgrade"
93+
},
94+
{
95+
"target": "0x43fe56116318901832b52917b21dc8e4504c375f41d38d3ade51b55ef026cb6",
10496
"method": "spawn"
10597
},
10698
{
107-
"target": "0x4b90458e67d04e9070ab96eaeca03955ce824bbb470cfc159d34ac88b1ba298",
99+
"target": "0x43fe56116318901832b52917b21dc8e4504c375f41d38d3ade51b55ef026cb6",
108100
"method": "move"
109101
},
110102
{
111-
"target": "0x4b90458e67d04e9070ab96eaeca03955ce824bbb470cfc159d34ac88b1ba298",
103+
"target": "0x43fe56116318901832b52917b21dc8e4504c375f41d38d3ade51b55ef026cb6",
112104
"method": "set_player_config"
113105
},
114106
{
115-
"target": "0x4b90458e67d04e9070ab96eaeca03955ce824bbb470cfc159d34ac88b1ba298",
107+
"target": "0x43fe56116318901832b52917b21dc8e4504c375f41d38d3ade51b55ef026cb6",
116108
"method": "update_player_config_name"
117109
},
118110
{
119-
"target": "0x4b90458e67d04e9070ab96eaeca03955ce824bbb470cfc159d34ac88b1ba298",
111+
"target": "0x43fe56116318901832b52917b21dc8e4504c375f41d38d3ade51b55ef026cb6",
120112
"method": "reset_player_config"
121113
},
122114
{
123-
"target": "0x4b90458e67d04e9070ab96eaeca03955ce824bbb470cfc159d34ac88b1ba298",
115+
"target": "0x43fe56116318901832b52917b21dc8e4504c375f41d38d3ade51b55ef026cb6",
124116
"method": "set_player_server_profile"
125117
},
126118
{
127-
"target": "0x4b90458e67d04e9070ab96eaeca03955ce824bbb470cfc159d34ac88b1ba298",
119+
"target": "0x43fe56116318901832b52917b21dc8e4504c375f41d38d3ade51b55ef026cb6",
128120
"method": "set_models"
129121
},
130122
{
131-
"target": "0x4b90458e67d04e9070ab96eaeca03955ce824bbb470cfc159d34ac88b1ba298",
123+
"target": "0x43fe56116318901832b52917b21dc8e4504c375f41d38d3ade51b55ef026cb6",
132124
"method": "enter_dungeon"
133125
},
134126
{
135-
"target": "0x4b90458e67d04e9070ab96eaeca03955ce824bbb470cfc159d34ac88b1ba298",
127+
"target": "0x43fe56116318901832b52917b21dc8e4504c375f41d38d3ade51b55ef026cb6",
128+
"method": "upgrade"
129+
},
130+
{
131+
"target": "0x15747aa8a49d256ab0dcfc175bc87c166ec4620f3b34ffcf1a97d46fd732e64",
132+
"method": "upgrade"
133+
},
134+
{
135+
"target": "0x5966c7d78ea0a0ed0080b26a6ef06bd28a024703770cdf2c99178eef72f97f8",
136136
"method": "upgrade"
137137
},
138138
{

crates/dojo/core/src/world/world_contract.cairo

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pub mod world {
2929

3030
use starknet::{
3131
get_caller_address, get_tx_info, ClassHash, ContractAddress,
32-
syscalls::{deploy_syscall, replace_class_syscall, call_contract_syscall}, SyscallResult,
32+
syscalls::{deploy_syscall, replace_class_syscall, call_contract_syscall},
3333
SyscallResultTrait, storage::Map,
3434
};
3535
pub use starknet::storage::{
@@ -1182,8 +1182,15 @@ pub mod world {
11821182
panic_with_byte_array(@errors::invalid_resource_layout_upgrade(namespace, name));
11831183
}
11841184

1185+
// The layout of a resource using packed layout must remain the same.
1186+
// It is upgradeable since the class hash may have changed, but no fields have been
1187+
// changed.
11851188
if let Layout::Fixed(_) = new_layout {
1186-
panic_with_byte_array(@errors::packed_layout_cannot_be_upgraded(namespace, name));
1189+
if new_layout != old_layout {
1190+
panic_with_byte_array(
1191+
@errors::packed_layout_cannot_be_upgraded(namespace, name),
1192+
);
1193+
}
11871194
}
11881195

11891196
if !new_schema.is_an_upgrade_of(@old_schema) {

examples/game-lib/Scarb.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,25 @@ version = 1
33

44
[[package]]
55
name = "armory"
6-
version = "0.1.0"
6+
version = "1.6.0-alpha.0"
77
dependencies = [
88
"dojo",
99
]
1010

1111
[[package]]
1212
name = "bestiary"
13-
version = "0.1.0"
13+
version = "1.6.0-alpha.0"
1414
dependencies = [
1515
"dojo",
1616
]
1717

1818
[[package]]
1919
name = "dojo"
20-
version = "1.1.2"
20+
version = "1.6.0-alpha.0"
2121
dependencies = [
2222
"dojo_plugin",
2323
]
2424

2525
[[package]]
2626
name = "dojo_plugin"
27-
version = "2.9.2"
27+
version = "2.10.1"

examples/simple/manifest_dev.json

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"world": {
3-
"class_hash": "0x2660e42e300e85d14619e31ab1c51520a98ecd6ff97accefb40b62b260aeafc",
4-
"address": "0x7713068c5dbe907055038fa2246861b18010b7f28742c7a7750218662faf083",
3+
"class_hash": "0x685ed02eefa98fe7e208aa295042e9bbad8029b0d3d6f0ba2b32546efe0a1f9",
4+
"address": "0x11d89df5f01e83b7ef8a599de3f9422d1ea81b6465989ee877bba48c0938443",
55
"seed": "simple",
66
"name": "simple",
77
"entrypoints": [
@@ -691,6 +691,22 @@
691691
"outputs": [],
692692
"state_mutability": "external"
693693
},
694+
{
695+
"type": "function",
696+
"name": "owners_count",
697+
"inputs": [
698+
{
699+
"name": "resource",
700+
"type": "core::felt252"
701+
}
702+
],
703+
"outputs": [
704+
{
705+
"type": "core::integer::u64"
706+
}
707+
],
708+
"state_mutability": "view"
709+
},
694710
{
695711
"type": "function",
696712
"name": "is_writer",
@@ -1312,7 +1328,7 @@
13121328
},
13131329
"contracts": [
13141330
{
1315-
"address": "0x30fa16364847481346f2ddb84258405719875c111af26636d721daeabab5e8e",
1331+
"address": "0x788b1a43edfae621e5e8af8666cd389b76ae6a10ccfe0b736c6b2692c15c177",
13161332
"class_hash": "0x33f6d1009b4d110715c005566373e954926db70029b0d4f74e70fe65b568f43",
13171333
"abi": [
13181334
{
@@ -1570,7 +1586,7 @@
15701586
]
15711587
},
15721588
{
1573-
"address": "0x22e6b6ac420871a47df0d97d03238fe7a91a99d249f6d102cc9313b33b8d2a1",
1589+
"address": "0x50aec78c3c4f06c991f12013e7f50205d9f42a40388f87253fb0eb441d40844",
15741590
"class_hash": "0x76ab451233f45985cc56701473173c64bbec87ac2afa310120e2d0449e604b7",
15751591
"abi": [
15761592
{
@@ -1746,7 +1762,7 @@
17461762
]
17471763
},
17481764
{
1749-
"address": "0x57352ef141be179c4fe1fccf9ef07feae1adb29812a9db0d5fdeb5eeea3042d",
1765+
"address": "0x58f59b4f5d418b6d6576622d5ccf6519bcd5441ec0ba2d5089875442efe6823",
17501766
"class_hash": "0x33f6d1009b4d110715c005566373e954926db70029b0d4f74e70fe65b568f43",
17511767
"abi": [
17521768
{

examples/spawn-and-move/dojo_dev.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ rpc_url = "http://localhost:5050/"
6868
# Default account for katana with seed = 0
6969
account_address = "0x2af9427c5a277474c079a1283c880ee8a6f0f8fbf73ce969c08d88befec1bba"
7070
private_key = "0x1800000000300000180000000000030000000000003006001800006600"
71-
world_address = "0x358de0d371d800308e5924ebe966ab3e9c59f355f40b255b4080f1cd126d2cb"
71+
world_address = "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e"
7272
ipfs_config.url = "https://ipfs.infura.io:5001"
7373
ipfs_config.username = "2EBrzr7ZASQZKH32sl2xWauXPSA"
7474
ipfs_config.password = "12290b883db9138a8ae3363b6739d220"

examples/spawn-and-move/manifest_dev.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"world": {
3-
"class_hash": "0x4c60dc46a8ca8bb47675b7b914053cef769afbf0e340523187336b72bd71d1f",
4-
"address": "0x644e520f46d5e3e5437950d039f544e2be04d304f272595c4c082e8b063cf26",
3+
"class_hash": "0x685ed02eefa98fe7e208aa295042e9bbad8029b0d3d6f0ba2b32546efe0a1f9",
4+
"address": "0x662658ab061ebe27e3fbc4e85ef0dc629ef8248969be594d3ebb34a5bf7a41e",
55
"seed": "dojo_examples",
66
"name": "example",
77
"entrypoints": [
@@ -1328,7 +1328,7 @@
13281328
},
13291329
"contracts": [
13301330
{
1331-
"address": "0x4b90458e67d04e9070ab96eaeca03955ce824bbb470cfc159d34ac88b1ba298",
1331+
"address": "0x43fe56116318901832b52917b21dc8e4504c375f41d38d3ade51b55ef026cb6",
13321332
"class_hash": "0x40eb7043c645e2960c2f3c06285199f3ae90351323855c758b7662177e47cea",
13331333
"abi": [
13341334
{
@@ -1682,7 +1682,7 @@
16821682
]
16831683
},
16841684
{
1685-
"address": "0x7252eae2a3eb9834676e5bac9ec8c1ca5c05591927611c5cac0b709ae3afa96",
1685+
"address": "0x5966c7d78ea0a0ed0080b26a6ef06bd28a024703770cdf2c99178eef72f97f8",
16861686
"class_hash": "0x216b7f3b4d4d8f37e280a310881bdf11edb8c2f665d116388a3e0f6055929d2",
16871687
"abi": [
16881688
{
@@ -1876,7 +1876,7 @@
18761876
]
18771877
},
18781878
{
1879-
"address": "0x77293d49c3c8b54ff2937cf998560ce8560fdb758feb90ee80d38d71e01c5a7",
1879+
"address": "0x15747aa8a49d256ab0dcfc175bc87c166ec4620f3b34ffcf1a97d46fd732e64",
18801880
"class_hash": "0x3a3f7bfd636cd62fcbcb584ca47e9caf61f4668f0af33ece60c642da6cc25e7",
18811881
"abi": [
18821882
{
@@ -2052,7 +2052,7 @@
20522052
]
20532053
},
20542054
{
2055-
"address": "0x35072c010b1bcd92956301ed807e9a48bf23037f5adb7ed092c0e36956f62af",
2055+
"address": "0x79891cbfc9d500a32306a5ee37fbf67417b5e3cd75ff9b35fcf1931614aa884",
20562056
"class_hash": "0x2171f2464ca252e6a717084210b5636b2788aa09a2b7fa53d67773262287a49",
20572057
"abi": [
20582058
{

scripts/rebuild_test_artifacts.sh

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,8 @@ cargo +nightly-2024-08-28 fmt --all -- "$@"
3333
./target/release/sozo build --manifest-path examples/spawn-and-move/Scarb.toml -P release
3434
./target/release/sozo test --manifest-path crates/dojo/core-cairo-test/Scarb.toml
3535

36-
# Copy the katana binary to the /tmp/ directory if needed.
37-
if [ ! -f /tmp/katana ]; then
38-
if ! command -v katana >/dev/null 2>&1; then
39-
echo "Error: 'katana' not found in PATH. Please install Katana or add it to your PATH."
40-
exit 1
41-
fi
42-
cp "$(command -v katana)" /tmp/katana
43-
fi
44-
4536
# Generates the database for testing by migrating the spawn and move example.
46-
KATANA_RUNNER_BIN=/tmp/katana cargo generate-test-db
37+
KATANA_RUNNER_BIN=/Users/glihm/cgg/katana/target/release/katana cargo generate-test-db
4738

4839
# Extracts the database for testing.
4940
bash ./scripts/extract_test_db.sh

spawn-and-move-db.tar.gz

9.09 KB
Binary file not shown.

0 commit comments

Comments
 (0)