kabu_broadcast_flashbots/client/
body.rs1use crate::client::jsonrpc::Request;
2use crate::client::RelayError;
3use alloy_primitives::{hex, keccak256};
4use alloy_signer::SignerSync;
5use alloy_signer_local::PrivateKeySigner;
6use eyre::Result;
7use serde::Serialize;
8
9pub fn make_signed_body<R: Serialize + Send + Sync>(
10 req_id: u64,
11 method: &str,
12 params: R,
13 signer: &PrivateKeySigner,
14) -> Result<(String, String)> {
15 let payload = Request::new(req_id, method, [params]);
16
17 let body = serde_json::to_string(&payload).map_err(RelayError::RequestSerdeJson)?;
18
19 let body_hash = keccak256(body.clone()).to_string();
20
21 let signature = signer.sign_message_sync(body_hash.as_bytes()).map_err(RelayError::SignerError)?;
22 let fb_signature = format!("{}:0x{}", signer.address(), hex::encode(signature.as_bytes()));
23 Ok((body, fb_signature))
24}