dojoengine / dojo

Dojo is a toolchain for building provable games and autonomous worlds with Cairo
https://dojoengine.org
Apache License 2.0
384 stars 144 forks source link

Previous Messages Resent to L1 on Katana Restart #2033

Open ybensacq opened 3 weeks ago

ybensacq commented 3 weeks ago

Describe the bug When running Katana with the command katana --messaging anvil.messaging.json --db-dir ./database previously sent messages to L2 are resent to L1 upon restarting Katana.

To Reproduce Steps to reproduce the behavior:

  1. Follow all the steps in the starknet-messaging-dev repo, except start Katana with: katana --messaging anvil.messaging.json --db-dir ./database
  2. Stop katana
  3. Restart katana using katana --messaging anvil.messaging.json --db-dir ./database (wait for a few seconds)
  4. Observe that previously sent messages are resent to L1.

Expected behavior Messages should not be resent to L1 upon restarting Katana; the state should persist correctly between restarts.

glihm commented 2 weeks ago

@kariy would have any pointer on that one?

StarkFishinator commented 1 week ago

Hi, can I get assigned to this?

glihm commented 1 week ago

This seemed to be caused by the messaging service not having context of where to start the message processing.

https://github.com/dojoengine/dojo/blob/30e98034acb96545e859c22067b68eb8e281d0e8/crates/katana/core/src/service/messaging/service.rs#L65-L69

For gathering the messages from the L1, we have an item in the configuration that may be used for that. However, as we're using a database, this block number may be different if Katana stops without graceful shutdown.

Currently, on the providers traits we have, there's no trait to store messaging information (last block gathered, last block sent messages). @kariy does it sound reasonable to add a provider trait to store such information and allow Katana to restart from an existing database being aware of which blocks must be processed for L1 <> L2 messaging?

@StarkFishinator are you feeling confident to dive into that? Or do you have an other strategy to propose?