encode base64 snapshot response

This commit is contained in:
godmodegalactus 2024-07-15 16:13:03 +02:00
parent e54af6aa9d
commit 88a32a4ac1
No known key found for this signature in database
GPG Key ID: 22DA4A30887FDA3C
4 changed files with 12 additions and 6 deletions

1
Cargo.lock generated
View File

@ -2968,6 +2968,7 @@ version = "0.1.5"
dependencies = [ dependencies = [
"agave-geyser-plugin-interface", "agave-geyser-plugin-interface",
"anyhow", "anyhow",
"base64 0.21.7",
"cargo-lock", "cargo-lock",
"clap", "clap",
"git-version", "git-version",

View File

@ -1,5 +1,5 @@
{ {
"libpath": "target/release/libquic_geyser_plugin.so", "libpath": "target/debug/libquic_geyser_plugin.so",
"quic_plugin": { "quic_plugin": {
"address": "0.0.0.0:10800", "address": "0.0.0.0:10800",
"compression_parameters": { "compression_parameters": {
@ -7,5 +7,8 @@
"Lz4Fast": 8 "Lz4Fast": 8
} }
} }
},
"rpc_server" : {
"enable" : true
} }
} }

View File

@ -39,6 +39,7 @@ quic-geyser-snapshot = { workspace = true }
lite-account-manager-common = { workspace = true } lite-account-manager-common = { workspace = true }
itertools = { workspace = true } itertools = { workspace = true }
tokio = {workspace = true} tokio = {workspace = true}
base64 = {workspace = true}
[build-dependencies] [build-dependencies]
anyhow = { workspace = true } anyhow = { workspace = true }

View File

@ -1,6 +1,7 @@
use std::str::FromStr; use std::str::FromStr;
use std::time::Duration; use std::time::Duration;
use base64::Engine;
use itertools::Itertools; use itertools::Itertools;
use jsonrpsee::server::ServerBuilder; use jsonrpsee::server::ServerBuilder;
use jsonrpsee::{core::RpcResult, proc_macros::rpc}; use jsonrpsee::{core::RpcResult, proc_macros::rpc};
@ -26,7 +27,7 @@ pub trait PluginRpc {
) -> RpcResult<OptionalContext<Vec<RpcKeyedAccount>>>; ) -> RpcResult<OptionalContext<Vec<RpcKeyedAccount>>>;
#[method(name = "getSnapshot")] #[method(name = "getSnapshot")]
async fn get_snapshot(&self, program_id_str: String) -> RpcResult<Vec<u8>>; async fn get_snapshot(&self, program_id_str: String) -> RpcResult<String>;
} }
pub struct RpcServerImpl { pub struct RpcServerImpl {
@ -53,8 +54,8 @@ impl RpcServerImpl {
let http_server_handle = ServerBuilder::default() let http_server_handle = ServerBuilder::default()
.set_middleware(middleware) .set_middleware(middleware)
.max_connections(10) .max_connections(10)
.max_request_body_size(16 * 1024 * 1024) // 16 MB .max_request_body_size(1024 * 1024) // 16 MB
.max_response_body_size(64 * 1024 * 1024 * 1024) // 64 GB .max_response_body_size(1024 * 1024) // 512 MBs
.http_only() .http_only()
.build(http_addr.clone()) .build(http_addr.clone())
.await? .await?
@ -155,7 +156,7 @@ impl PluginRpcServer for RpcServerImpl {
} }
} }
async fn get_snapshot(&self, program_id_str: String) -> RpcResult<Vec<u8>> { async fn get_snapshot(&self, program_id_str: String) -> RpcResult<String> {
let program_id = Pubkey::from_str(program_id_str.as_str()) let program_id = Pubkey::from_str(program_id_str.as_str())
.map_err(|_| jsonrpsee::types::error::ErrorCode::InvalidParams)?; .map_err(|_| jsonrpsee::types::error::ErrorCode::InvalidParams)?;
let res = self let res = self
@ -163,7 +164,7 @@ impl PluginRpcServer for RpcServerImpl {
.create_snapshot(program_id) .create_snapshot(program_id)
.await .await
.map_err(|_| jsonrpsee::types::error::ErrorCode::InternalError)?; .map_err(|_| jsonrpsee::types::error::ErrorCode::InternalError)?;
Ok(res) Ok(base64::engine::general_purpose::STANDARD.encode(res))
} }
} }