Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .changes/changed/3255.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Adds client & server support for the existing protobuf HTTP-based remote RPC block accessor.
30 changes: 29 additions & 1 deletion bin/fuel-core/src/cli/run/rpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,20 @@ use clap::{
ValueEnum,
};
use fuel_core_types::fuel_types::BlockHeight;
use std::net;
use std::{
collections::HashMap,
net,
};

fn parse_public_http_headers(entries: &[String]) -> HashMap<String, String> {
entries
.iter()
.filter_map(|e| {
e.split_once('=')
.map(|(k, v)| (k.to_string(), v.to_string()))
})
.collect()
}

#[derive(Debug, Clone, Args)]
pub struct RpcArgs {
Expand All @@ -29,6 +42,15 @@ pub struct RpcArgs {
#[clap(long = "rpc-s3-requester-pays", env, default_value = "false")]
pub rpc_s3_requester_pays: bool,

/// Public HTTP(S) base URL for block objects (e.g. CDN in front of the S3 bucket). When set,
/// gRPC returns `RemoteHttpEndpoint` URLs (`{base}/{s3-key}`) instead of `RemoteS3Bucket`; uploads still use S3.
#[clap(long = "rpc-public-block-http-url", env)]
pub rpc_public_block_http_url: Option<String>,

/// Optional extra HTTP headers for clients fetching blocks from `--rpc-public-block-http-url` (format `NAME=value`, repeatable).
#[clap(long = "rpc-public-block-http-header", env, value_name = "NAME=value")]
pub rpc_public_block_http_headers: Vec<String>,

#[clap(long = "rpc-api_buffer_size", default_value = "1000", env)]
pub rpc_api_buffer_size: usize,
}
Expand All @@ -43,6 +65,8 @@ pub enum StorageMethod {

impl RpcArgs {
pub fn into_config(self) -> fuel_core_block_aggregator_api::service::Config {
let public_headers =
parse_public_http_headers(&self.rpc_public_block_http_headers);
let storage_method = match self.rpc_storage_method {
StorageMethod::Local => {
fuel_core_block_aggregator_api::service::StorageMethod::Local
Expand All @@ -54,6 +78,8 @@ impl RpcArgs {
.expect("storage_method=s3 requires --bucket"),
endpoint_url: self.rpc_endpoint_url,
requester_pays: self.rpc_s3_requester_pays,
public_block_http_url: self.rpc_public_block_http_url,
public_block_http_headers: public_headers.clone(),
}
}
StorageMethod::S3NoPublish => {
Expand All @@ -63,6 +89,8 @@ impl RpcArgs {
.expect("storage_method=s3-no-publish requires --bucket"),
endpoint_url: self.rpc_endpoint_url,
requester_pays: self.rpc_s3_requester_pays,
public_block_http_url: self.rpc_public_block_http_url,
public_block_http_headers: public_headers,
}
}
};
Expand Down
Loading
Loading