Skip to content

Commit 1000fcd

Browse files
authored
fix: messaging tutorial data (starkware-libs#1869)
* fix: ensure correct subdmodule path and rev for solidity forge-std * fix: adjust messaging guide for L1-L2 messaging * fix: adjust messaging guide for L1-L3 messaging
1 parent b22e2aa commit 1000fcd

File tree

11 files changed

+58
-35
lines changed

11 files changed

+58
-35
lines changed

.gitmodules

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
[submodule "crates/katana/primitives/contracts/messaging/solidity/lib/forge-std"]
22
path = crates/katana/primitives/contracts/messaging/solidity/lib/forge-std
33
url = https://github.com/foundry-rs/forge-std
4+
[submodule "crates/katana/contracts/messaging/solidity/lib/forge-std"]
5+
path = crates/katana/contracts/messaging/solidity/lib/forge-std
6+
url = https://github.com/foundry-rs/forge-std

crates/katana/contracts/messaging/README.md

+19-7
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,13 @@ How to run the scripts:
4040

4141
- Start Anvil in a terminal.
4242
- Start Katana in an other terminal on default port 5050 with the messaging configuration that is inside the:
43-
`katana --messaging ~/dojo/crates/katana/core/contracts/messaging/anvil.messaging.json`
43+
```bash
44+
# From installed katana.
45+
katana --messaging ~/dojo/crates/katana/contracts/messaging/anvil.messaging.json
46+
47+
# Dev mode
48+
cargo run --bin katana -- --messaging ~/dojo/crates/katana/contracts/messaging/anvil.messaging.json
49+
```
4450
- Open an other terminal and `cd ~/dojo/crates/katana/core/contracts/messaging`.
4551

4652
Then you can then use pre-defined commands to interact with the contracts.
@@ -66,11 +72,7 @@ make -sC cairo/ send_msg_value_l1 value=2
6672
```
6773
Then you've to wait the message to be sent to L1, Katana will display it:
6874
```
69-
2023-12-15T15:16:18.435370Z INFO messaging: Message sent to settlement layer:
70-
| hash | 0x62c7475daef517f6858a6f539bb4d2aa7eb1e23a7e8b1bc6a0834256d995e49d
71-
| from_address | 0x4231f608ea4a233136f6cdfcd10eaad2e46362bbc4e5d5aa88d0d574ea120d8
72-
| to_address | 0xe7f1725e7734ce288f8367e1bb143e90bb3f0512
73-
| payload | [0x2]
75+
2024-04-22T23:42:52.478200Z INFO messaging: Message sent to settlement layer. hash=0xb5c9a1d3b8eb1c9d37ee5ffdacf09560a68d0c9e53fa4b1cc91d967095bc4ac7 from_address=0x609f8e7a76b6cc36f3ff86f09f6e5fdd0e6320f117d817e4344c1bf9fac7d67 to_address=0xe7f1725e7734ce288f8367e1bb143e90bb3f0512 payload=0x2
7476
```
7577
```
7678
# Consume the messag previously sent. You can try to call it once and see the second one reverting.
@@ -109,7 +111,15 @@ You can also use the Makefile to setup the chains, but the flow is the following
109111
How to run the scripts:
110112

111113
- Starts Katana (1) to simulate starknet on a new terminal with default port 5050.
112-
- Starts Katana (2) for your appchain on a new terminal with port 6060 and the configuration for messaging: `katana --messaging crates/katana/core/contracts/messaging/l3.messaging.json -p 6060`
114+
- Starts Katana (2) for your appchain on a new terminal with port 6060 and the configuration for messaging:
115+
```bash
116+
# From installed Katana.
117+
katana --messaging crates/katana/contracts/messaging/l3.messaging.json -p 6060`
118+
119+
# Dev mode
120+
cargo run --bin katana --features "starknet-messaging" -- --messaging crates/katana/contracts/messaging/l3.messaging.json -p 6060
121+
```
122+
113123
- Open an other terminal and `cd ~/dojo/crates/katana/core/contracts/messaging`.
114124

115125
Then you can then use pre-defined commands to interact with the contracts.
@@ -139,3 +149,5 @@ make -sC ./cairo/ get_value_l2
139149
# Try to change the value to see the transaction error.
140150
make -sC cairo/ send_msg_l3 selector_str=msg_handler_value value=888
141151
```
152+
153+
It's important to note that Dojo will support settlement. Hence, messaging will be done during the state update of the appchain on the base layer, and not with this custom solution that was developped for the demo.
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
scarb 2.3.1
1+
scarb 2.5.4

crates/katana/contracts/messaging/cairo/Makefile

+18-14
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ sierra = .contract_class.json
1010
# ** L1 <-> L2 **
1111
#
1212
L1_CONTRACT_ADDR=0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
13-
C_MSG_L1_ADDR=0x04231f608ea4a233136f6cdfcd10eaad2e46362bbc4e5d5aa88d0d574ea120d8
13+
C_MSG_L1_ADDR=0x0609f8e7a76b6cc36f3ff86f09f6e5fdd0e6320f117d817e4344c1bf9fac7d67
1414

1515
OPTS_L2 := --account katana-0 \
16-
--rpc http://0.0.0.0:5050
16+
--rpc http://0.0.0.0:5050 \
17+
--poll-interval 1000 \
18+
-w
1719

1820
setup_for_l1_messaging:
1921
scarb build; \
@@ -38,29 +40,31 @@ send_msg_struct_l1:
3840
# ** L2 <-> L3 **
3941
#
4042
ACCOUNT_L3=./account_l3.json
41-
ACCOUNT_L3_ADDR=0x5686a647a9cdd63ade617e0baf3b364856b813b508f03903eb58a7e622d5855
42-
L3_PRIVATE_KEY=0x33003003001800009900180300d206308b0070db00121318d17b5e6262150b
43+
ACCOUNT_L3_ADDR=0x6162896d1d7ab204c7ccac6dd5f8e9e7c25ecd5ae4fcb4ad32e57786bb46e03
44+
L3_PRIVATE_KEY=0x1800000000300000180000000000030000000000003006001800006600
4345

44-
# L2_APPCHAIN_MSG_ADDR=0x046c0ea3fb2ad27053e8af3c8cfab38a51afb9fe90fcab1f75446bd41f7d3796
45-
# L2_APPCHAIN_MSG_CLASS_HASH=$(shell starkli class-hash target/dev/katana_messaging_appchain_messaging.contract_class.json)
46+
L2_APPCHAIN_MSG_ADDR=0x0368407c4a0e075c693cf372dd735750df7289c6b5d06234615018456e658591
47+
L2_APPCHAIN_MSG_CLASS_HASH=$(shell starkli class-hash target/dev/katana_messaging_appchain_messaging.contract_class.json)
4648

47-
L2_CONTRACT1_ADDR=0x054f66c104745e27ad5194815a6c4755cf2076c4809212101dfe31563f312a34
49+
L2_CONTRACT1_ADDR=0x0450ae47f57d4a2165b015a4bf143cd53f60d61a74a0be998bf0a42c477f26ce
4850
L2_CONTRACT1_CLASS_HASH=$(shell starkli class-hash target/dev/katana_messaging_contract_1.contract_class.json)
4951

50-
L3_C_MSG_ADDR=0x071278839029ab1f9fa0ce1ee01e38599736dd4e8fed2417158bec4ef5dc6d0f
52+
L3_C_MSG_ADDR=0x039bb4ce38513597cf75eeacd7f3ed6ef058a61818c252612d134d95ed2e9051
5153
L3_C_MSG_CLASS_HASH=$(shell starkli class-hash target/dev/katana_messaging_contract_msg_starknet.contract_class.json)
5254

5355
OPTS_L3 := --account ${ACCOUNT_L3} \
5456
--rpc http://0.0.0.0:6060 \
55-
--private-key ${L3_PRIVATE_KEY}
57+
--private-key ${L3_PRIVATE_KEY} \
58+
--poll-interval 1000 \
59+
-w
5660

5761
setup_l2_messaging:
5862
@set -x; \
5963
scarb build; \
60-
appchain_ch=$$(starkli class-hash ${build}ERC20${sierra}); \
61-
starkli declare target/dev/katana_messaging_appchain_messaging.contract_class.json ${OPTS_L2}
62-
starkli declare target/dev/katana_messaging_contract_1.contract_class.json ${OPTS_L2}
63-
starkli deploy --salt 0x1234 ${L2_APPCHAIN_MSG_CLASS_HASH} ${ACCOUNT_L2_ADDR} ${ACCOUNT_L3_ADDR} ${OPTS_L2}
64+
appchain_ch=$$(starkli class-hash ${build}appchain_messaging${sierra}); \
65+
starkli declare target/dev/katana_messaging_appchain_messaging.contract_class.json ${OPTS_L2}; \
66+
starkli declare target/dev/katana_messaging_contract_1.contract_class.json ${OPTS_L2}; \
67+
starkli deploy --salt 0x1234 ${L2_APPCHAIN_MSG_CLASS_HASH} ${ACCOUNT_L2_ADDR} ${ACCOUNT_L3_ADDR} ${OPTS_L2}; \
6468
starkli deploy --salt 0x1234 ${L2_CONTRACT1_CLASS_HASH} ${L2_APPCHAIN_MSG_ADDR} ${OPTS_L2}
6569

6670
setup_l3_messaging:
@@ -82,7 +86,7 @@ consume_msg_from_l3_usage:
8286

8387
consume_msg_from_l3:
8488
starkli invoke ${L2_CONTRACT1_ADDR} consume_message \
85-
${ACCOUNT_L3_ADDR} \
89+
${L3_C_MSG_ADDR} \
8690
$(payload) \
8791
${OPTS_L2}
8892

crates/katana/contracts/messaging/cairo/account_l2.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
"variant": {
44
"type": "open_zeppelin",
55
"version": 1,
6-
"public_key": "0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053"
6+
"public_key": "0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053",
7+
"legacy": false
78
},
89
"deployment": {
910
"status": "deployed",
10-
"class_hash": "0x4d07e40e93398ed3c76981e72dd1fd22557a78ce36c0515f679e27f0bb5bc5f",
11+
"class_hash": "0x05400e90f7e0ae78bd02c77cd75527280470e2fe19c54970dd79dc37a9d3645c",
1112
"address": "0x6162896d1d7ab204c7ccac6dd5f8e9e7c25ecd5ae4fcb4ad32e57786bb46e03"
1213
}
1314
}

crates/katana/contracts/messaging/cairo/account_l3.json

+4-3
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
"variant": {
44
"type": "open_zeppelin",
55
"version": 1,
6-
"public_key": "0x4c0f884b8e5b4f00d97a3aad26b2e5de0c0c76a555060c837da2e287403c01d"
6+
"public_key": "0x2b191c2f3ecf685a91af7cf72a43e7b90e2e41220175de5c4f7498981b10053",
7+
"legacy": false
78
},
89
"deployment": {
910
"status": "deployed",
10-
"class_hash": "0x4d07e40e93398ed3c76981e72dd1fd22557a78ce36c0515f679e27f0bb5bc5f",
11-
"address": "0x5686a647a9cdd63ade617e0baf3b364856b813b508f03903eb58a7e622d5855"
11+
"class_hash": "0x05400e90f7e0ae78bd02c77cd75527280470e2fe19c54970dd79dc37a9d3645c",
12+
"address": "0x6162896d1d7ab204c7ccac6dd5f8e9e7c25ecd5ae4fcb4ad32e57786bb46e03"
1213
}
1314
}

crates/katana/contracts/messaging/cairo/src/appchain_messaging.cairo

+1-1
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ mod appchain_messaging {
322322
);
323323

324324
match starknet::call_contract_syscall(to_address, selector, payload) {
325-
Result::Ok(span) => self
325+
Result::Ok(_) => self
326326
.emit(MessageExecuted { from_address, to_address, selector, payload, }),
327327
Result::Err(e) => {
328328
panic(e)

crates/katana/contracts/messaging/cairo/src/contract_1.cairo

+4-3
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,10 @@ mod contract_1 {
5252

5353
// Will revert in case of failure if the message is not registered
5454
// as consumable.
55-
let msg_hash = messaging.consume_message_from_appchain(from_address, payload,);
56-
// msg successfully consumed, we can proceed and process the data
57-
// in the payload.
55+
let _msg_hash = messaging.consume_message_from_appchain(from_address, payload,);
56+
57+
// msg successfully consumed, we can proceed and process the data
58+
// in the payload.
5859
}
5960

6061
/// An example function to test how appchain contract can trigger
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"chain": "starknet",
33
"rpc_url": "http://127.0.0.1:5050",
4-
"contract_address": "0x046c0ea3fb2ad27053e8af3c8cfab38a51afb9fe90fcab1f75446bd41f7d3796",
5-
"sender_address": "0x5686a647a9cdd63ade617e0baf3b364856b813b508f03903eb58a7e622d5855",
6-
"private_key": "0x33003003001800009900180300d206308b0070db00121318d17b5e6262150b",
4+
"contract_address": "0x0368407c4a0e075c693cf372dd735750df7289c6b5d06234615018456e658591",
5+
"sender_address": "0x6162896d1d7ab204c7ccac6dd5f8e9e7c25ecd5ae4fcb4ad32e57786bb46e03",
6+
"private_key": "0x1800000000300000180000000000030000000000003006001800006600",
77
"interval": 2,
88
"from_block": 0
99
}

crates/katana/contracts/messaging/solidity/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export $(shell sed 's/=.*//' .env)
1010
# Addresses fixed here for easy testing.
1111
C_MSG_L2_ADDR=0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
1212
L2_ACCOUNT=0x6162896d1d7ab204c7ccac6dd5f8e9e7c25ecd5ae4fcb4ad32e57786bb46e03
13-
L2_CONTRACT_ADDR=0x0429a64d97c1422a37a09fc7406f35c264be59b744aaff5a79d59393eb1bc7e1
13+
L2_CONTRACT_ADDR=0x609f8e7a76b6cc36f3ff86f09f6e5fdd0e6320f117d817e4344c1bf9fac7d67
1414

1515
deploy_messaging_contracts:
1616
forge script --broadcast --rpc-url ${ETH_RPC_URL} script/LocalTesting.s.sol:LocalSetup

0 commit comments

Comments
 (0)