use core::{iter, num::NonZero};
use futures_lite::FutureExt as _;
fn main() {
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init();
let mut client =
smoldot_light::Client::new(smoldot_light::platform::default::DefaultPlatform::new(
env!("CARGO_PKG_NAME").into(),
env!("CARGO_PKG_VERSION").into(),
));
let smoldot_light::AddChainSuccess {
chain_id: polkadot_chain_id,
json_rpc_responses: polkadot_json_rpc_responses,
} = client
.add_chain(smoldot_light::AddChainConfig {
specification: include_str!("../../demo-chain-specs/polkadot.json"),
json_rpc: smoldot_light::AddChainConfigJsonRpc::Enabled {
max_pending_requests: NonZero::<u32>::new(128).unwrap(),
max_subscriptions: 1024,
},
potential_relay_chains: iter::empty(),
database_content: "",
user_data: (),
})
.unwrap();
let mut polkadot_json_rpc_responses = polkadot_json_rpc_responses.unwrap();
let smoldot_light::AddChainSuccess {
chain_id: assethub_chain_id,
json_rpc_responses: assethub_json_rpc_responses,
} = client
.add_chain(smoldot_light::AddChainConfig {
specification: include_str!("../../demo-chain-specs/polkadot-asset-hub.json"),
json_rpc: smoldot_light::AddChainConfigJsonRpc::Enabled {
max_pending_requests: NonZero::<u32>::new(128).unwrap(),
max_subscriptions: 1024,
},
database_content: "",
user_data: (),
potential_relay_chains: [polkadot_chain_id].into_iter(),
})
.unwrap();
let mut assethub_json_rpc_responses = assethub_json_rpc_responses.unwrap();
client
.json_rpc_request(
r#"{"id":1,"jsonrpc":"2.0","method":"chain_subscribeNewHeads","params":[]}"#,
polkadot_chain_id,
)
.unwrap();
client
.json_rpc_request(
r#"{"id":1,"jsonrpc":"2.0","method":"chain_subscribeNewHeads","params":[]}"#,
assethub_chain_id,
)
.unwrap();
smol::block_on(async move {
loop {
let (chain_name, response) = async {
(
"Polkadot",
polkadot_json_rpc_responses.next().await.unwrap(),
)
}
.or(async {
(
"Assethub",
assethub_json_rpc_responses.next().await.unwrap(),
)
})
.await;
println!("{chain_name} JSON-RPC response: {response}");
}
});
}