use quicknode_sdk::{PaymentConfig, QuicknodeSdk, RpcConfig, SdkFullConfig};
#[tokio::main]
#[allow(clippy::unwrap_used, clippy::expect_used)]
async fn main() {
let key = std::env::var("QN_PAYMENT_KEY").expect("set QN_PAYMENT_KEY to a throwaway key");
let mut config = SdkFullConfig::keyless();
config.rpc = Some(RpcConfig {
payment: Some(PaymentConfig {
scheme: "x402".into(),
key,
pay_network: "eip155:84532".into(),
asset: "0x036CbD53842c5426634e7929541eC2318f3dCF7e".into(),
max_amount: "10000".into(),
svm_rpc_url: None,
base_url_override: None,
}),
..Default::default()
});
let qn = QuicknodeSdk::new(&config).expect("sdk failed to initialize");
match qn
.rpc
.call(
"eth_blockNumber",
None,
Some("base-sepolia".to_string()),
None,
)
.await
{
Ok(result) => println!("paid eth_blockNumber => {result}"),
Err(e) => eprintln!("payment call error: {e}"),
}
match qn
.rpc
.call_with_receipt(
"eth_blockNumber",
None,
Some("base-sepolia".to_string()),
None,
)
.await
{
Ok(resp) => {
println!("result => {}", resp.result);
match resp.payment_receipt {
Some(r) => println!("settlement reference: {}", r.reference),
None => println!("(no receipt — x402 lane)"),
}
}
Err(e) => eprintln!("payment call error: {e}"),
}
}