Expand description
§Bevy Dojo: A Bevy plugin for Starknet integration
bevy_dojo
provides a plugin for integrating Starknet blockchain functionality
with the Bevy game engine. It enables executing Starknet transactions from Bevy
systems in a non-blocking way, making it ideal for games that want to interact
with smart contracts on Starknet.
§Features
- Non-blocking Starknet connection management
- Transaction execution with automatic status monitoring
- Environment variable or explicit configuration options
- Seamless integration with Bevy’s ECS
§Setup
Add the plugin to your Bevy app:
use bevy::prelude::*;
use bevy_dojo::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(BevyDojoPlugin)
.add_systems(Update, keyboard_control)
.run();
}
§Environment Variables
The plugin uses the following environment variables by default:
STARKNET_RPC_URL
: URL of your Starknet RPC providerSTARKNET_ACCOUNT_ADDRESS
: Your Starknet account address (as a hex string)STARKNET_PRIVATE_KEY
: Your private key (as a hex string)
Alternatively, you can provide these values explicitly by replacing the
DefaultStarknetConfig
resource.
§Example: Keyboard-controlled Connection and Transactions
use bevy::prelude::*;
use bevy_dojo::prelude::*;
use starknet::core::types::{Call, Felt};
use std::str::FromStr;
fn keyboard_control(
keys: Res<Input<KeyCode>>,
runtime: Res<TokioRuntime>,
config: Res<DefaultStarknetConfig>,
mut sn: ResMut<StarknetConnection>,
) {
// Connect to Starknet when the user presses C
if keys.just_pressed(KeyCode::C) {
init_starknet_connection(runtime, config, sn);
}
// Execute a transaction when the user presses T
if keys.just_pressed(KeyCode::T) {
let calls = vec![
Call {
to: Felt::from_str("0x123456...").unwrap(), // Contract address
selector: Felt::from_str("0x987654...").unwrap(), // Function selector
calldata: vec![], // Function arguments
},
];
execute_transaction(runtime, sn, calls);
}
}
§Connection Status
You can check the connection status by examining the StarknetConnection
resource:
fn display_connection_status(sn: Res<StarknetConnection>) {
if sn.is_connected() {
println!("Connected to Starknet");
} else if sn.is_connecting() {
println!("Connecting to Starknet...");
} else {
println!("Not connected to Starknet");
}
}
Modules§
Structs§
- Bevy
Dojo Plugin - Starknet integration plugin with default configuration