feat: add eth_sendRawTransaction (#5)
This commit is contained in:
parent
dc0e31cedd
commit
76a230446d
|
@ -110,6 +110,10 @@ impl Client {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn send_raw_transaction(&self, bytes: &Vec<u8>) -> Result<Vec<u8>> {
|
||||||
|
self.execution.send_raw_transaction(bytes).await
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_gas_price(&self) -> Result<U256> {
|
pub fn get_gas_price(&self) -> Result<U256> {
|
||||||
let payload = self.get_payload(&None)?;
|
let payload = self.get_payload(&None)?;
|
||||||
let base_fee = U256::from_little_endian(&payload.base_fee_per_gas.to_bytes_le());
|
let base_fee = U256::from_little_endian(&payload.base_fee_per_gas.to_bytes_le());
|
||||||
|
|
|
@ -10,7 +10,7 @@ use jsonrpsee::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::Client;
|
use super::Client;
|
||||||
use common::utils::u64_to_hex_string;
|
use common::utils::{hex_str_to_bytes, u64_to_hex_string};
|
||||||
use execution::types::{CallOpts, ExecutionBlock};
|
use execution::types::{CallOpts, ExecutionBlock};
|
||||||
|
|
||||||
pub struct Rpc {
|
pub struct Rpc {
|
||||||
|
@ -61,6 +61,8 @@ trait EthRpc {
|
||||||
async fn block_number(&self) -> Result<String, Error>;
|
async fn block_number(&self) -> Result<String, Error>;
|
||||||
#[method(name = "getBlockByNumber")]
|
#[method(name = "getBlockByNumber")]
|
||||||
async fn get_block_by_number(&self, num: &str, full_tx: bool) -> Result<ExecutionBlock, Error>;
|
async fn get_block_by_number(&self, num: &str, full_tx: bool) -> Result<ExecutionBlock, Error>;
|
||||||
|
#[method(name = "sendRawTransaction")]
|
||||||
|
async fn send_raw_transaction(&self, bytes: &str) -> Result<String, Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rpc(client, server, namespace = "net")]
|
#[rpc(client, server, namespace = "net")]
|
||||||
|
@ -154,6 +156,13 @@ impl EthRpcServer for RpcInner {
|
||||||
|
|
||||||
Ok(block)
|
Ok(block)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn send_raw_transaction(&self, bytes: &str) -> Result<String, Error> {
|
||||||
|
let client = self.client.lock().await;
|
||||||
|
let bytes = convert_err(hex_str_to_bytes(bytes))?;
|
||||||
|
let tx_hash = convert_err(client.send_raw_transaction(&bytes).await)?;
|
||||||
|
Ok(hex::encode(tx_hash))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
|
|
|
@ -97,6 +97,10 @@ impl ExecutionClient {
|
||||||
Ok(code)
|
Ok(code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn send_raw_transaction(&self, bytes: &Vec<u8>) -> Result<Vec<u8>> {
|
||||||
|
self.rpc.send_raw_transaction(bytes).await
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_block(&self, payload: &ExecutionPayload) -> Result<ExecutionBlock> {
|
pub fn get_block(&self, payload: &ExecutionPayload) -> Result<ExecutionBlock> {
|
||||||
let empty_nonce = "0x0000000000000000".to_string();
|
let empty_nonce = "0x0000000000000000".to_string();
|
||||||
let empty_uncle_hash = "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347";
|
let empty_uncle_hash = "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347";
|
||||||
|
|
|
@ -44,6 +44,14 @@ impl Rpc {
|
||||||
hex_str_to_bytes(&code)
|
hex_str_to_bytes(&code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn send_raw_transaction(&self, bytes: &Vec<u8>) -> Result<Vec<u8>> {
|
||||||
|
let client = self.client()?;
|
||||||
|
let bytes_hex = format!("0x{}", hex::encode(bytes));
|
||||||
|
let params = rpc_params!(bytes_hex);
|
||||||
|
let tx_hash: String = client.request("eth_sendRawTransaction", params).await?;
|
||||||
|
hex_str_to_bytes(&tx_hash)
|
||||||
|
}
|
||||||
|
|
||||||
fn client(&self) -> Result<HttpClient> {
|
fn client(&self) -> Result<HttpClient> {
|
||||||
Ok(HttpClientBuilder::default().build(&self.rpc)?)
|
Ok(HttpClientBuilder::default().build(&self.rpc)?)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue