Created
December 17, 2024 23:48
-
-
Save portlandhodl/aa99483f4eab1e8fd56ee757dbb50ad9 to your computer and use it in GitHub Desktop.
Get Block Template Rust Example 1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use actix_web::{get, web, App, HttpResponse, HttpServer, Responder}; | |
use bitcoincore_rpc::{Auth, Client, RpcApi}; | |
use serde_json::Value; | |
struct AppState { | |
btc_client: Client, | |
} | |
#[get("/blocktemplate")] | |
async fn get_block_template(data: web::Data<AppState>) -> impl Responder { | |
// Create template request with required segwit rules | |
let template_request = serde_json::json!({ | |
"rules": ["segwit"] | |
}); | |
match data.btc_client.call::<Value>("getblocktemplate", &[template_request]) { | |
Ok(template) => HttpResponse::Ok().json(template), | |
Err(e) => { | |
eprintln!("Error getting block template: {}", e); | |
HttpResponse::InternalServerError().json(format!("Error: {}", e)) | |
} | |
} | |
} | |
#[actix_web::main] | |
async fn main() -> std::io::Result<()> { | |
// Bitcoin Core RPC client setup | |
let rpc_url = "http://127.0.0.1:8332"; | |
let auth = Auth::UserPass("test".to_string(), "test".to_string()); | |
let btc_client = Client::new(rpc_url, auth) | |
.expect("Failed to create Bitcoin Core RPC client"); | |
// Create shared state | |
let app_state = web::Data::new(AppState { | |
btc_client, | |
}); | |
println!("Starting server at http://127.0.0.1:8080"); | |
// Start actix-web server | |
HttpServer::new(move || { | |
App::new() | |
.app_data(app_state.clone()) | |
.service(get_block_template) | |
}) | |
.bind("127.0.0.1:8080")? | |
.run() | |
.await | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment