Skip to content

Commit 16de227

Browse files
pedrohba1gusinacio
authored andcommitted
feat(server): gRPC service implementation
1 parent 86e7973 commit 16de227

File tree

4 files changed

+73
-1
lines changed

4 files changed

+73
-1
lines changed

tap_aggregator/Cargo.toml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,13 @@ axum = { version = "0.7.5", features = [
3535
futures-util = "0.3.28"
3636
lazy_static = "1.4.0"
3737
ruint = "1.10.1"
38-
tower = { version = "0.4", features = ["util"] }
38+
tower = { version = "0.4", features = ["util", "steer"] }
39+
tonic = { version = "0.12.3", features = ["transport"] }
40+
prost = "0.13.3"
41+
42+
[build-dependencies]
43+
tonic-build = "0.12.3"
44+
3945

4046
[dev-dependencies]
4147
jsonrpsee = { workspace = true, features = ["http-client", "jsonrpsee-core"] }

tap_aggregator/build.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
fn main() -> Result<(), Box<dyn std::error::Error>> {
2+
println!("Running build.rs...");
3+
let out_dir = std::env::var("OUT_DIR").expect("OUT_DIR not set by Cargo");
4+
println!("OUT_DIR: {}", out_dir); // This should print the output directory
5+
6+
tonic_build::compile_protos("./proto/tap_aggregator.proto")?;
7+
Ok(())
8+
}

tap_aggregator/proto/tap_aggregator.proto

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,20 @@ message RavResponse {
3333
SignedRav rav = 1;
3434
}
3535

36+
message TapRpcApiVersion {
37+
string version = 1;
38+
}
39+
40+
message TapRpcApiVersionsInfo {
41+
repeated TapRpcApiVersion versions_supported = 1;
42+
repeated TapRpcApiVersion versions_deprecated = 2;
43+
}
44+
45+
// Optional request message for ApiVersions (TODO: should we use use google.protobuf.Empty?)
46+
message ApiVersionsRequest {}
47+
3648
service TapAggregator {
49+
rpc ApiVersions(ApiVersionsRequest) returns (TapRpcApiVersionsInfo);
3750
rpc AggregateReceipts(RavRequest) returns (RavResponse);
3851
}
3952

tap_aggregator/src/server.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use anyhow::Result;
1010
use jsonrpsee::{proc_macros::rpc, server::ServerBuilder, server::ServerHandle};
1111
use lazy_static::lazy_static;
1212
use prometheus::{register_counter, register_int_counter, Counter, IntCounter};
13+
// use tower::steer::Steer;
1314

1415
use crate::aggregator::check_and_aggregate_receipts;
1516
use crate::api_versioning::{
@@ -22,6 +23,10 @@ use tap_core::{
2223
rav::ReceiptAggregateVoucher, receipt::Receipt, signed_message::EIP712SignedMessage,
2324
};
2425

26+
pub mod tap_aggregator {
27+
tonic::include_proto!("tap_aggregator.v1");
28+
}
29+
2530
// Register the metrics into the global metrics registry.
2631
lazy_static! {
2732
static ref AGGREGATION_SUCCESS_COUNTER: IntCounter = register_int_counter!(
@@ -171,6 +176,45 @@ fn aggregate_receipts_(
171176
}
172177
}
173178

179+
use tap_aggregator::tap_aggregator_server::TapAggregator;
180+
use tap_aggregator::{
181+
ApiVersionsRequest, RavRequest, RavResponse, SignedRav,
182+
TapRpcApiVersionsInfo as TapGRpcApiVersionsInfo,
183+
};
184+
use tonic::{Request, Response, Status};
185+
186+
#[tonic::async_trait]
187+
impl TapAggregator for RpcImpl {
188+
async fn api_versions(
189+
&self,
190+
_request: Request<ApiVersionsRequest>,
191+
) -> Result<Response<TapGRpcApiVersionsInfo>, Status> {
192+
// Example response
193+
let response = TapGRpcApiVersionsInfo {
194+
versions_deprecated: vec![],
195+
versions_supported: vec![],
196+
};
197+
198+
Ok(Response::new(response))
199+
}
200+
201+
async fn aggregate_receipts(
202+
&self,
203+
request: Request<RavRequest>,
204+
) -> Result<Response<RavResponse>, Status> {
205+
let rav_request = request.into_inner();
206+
207+
// Example implementation: create a dummy response
208+
let response = RavResponse {
209+
rav: Some(SignedRav {
210+
message: None, // Fill this with your aggregate logic
211+
signature: vec![],
212+
}),
213+
};
214+
Ok(Response::new(response))
215+
}
216+
}
217+
174218
impl RpcServer for RpcImpl {
175219
fn api_versions(&self) -> JsonRpcResult<TapRpcApiVersionsInfo> {
176220
Ok(JsonRpcResponse::ok(tap_rpc_api_versions_info()))
@@ -208,6 +252,7 @@ impl RpcServer for RpcImpl {
208252
}
209253
}
210254

255+
// TODO: create a gRPC alike run_server
211256
pub async fn run_server(
212257
port: u16,
213258
wallet: PrivateKeySigner,

0 commit comments

Comments
 (0)