Skip to content

Commit e74bc2c

Browse files
committed
refactor: add GenerateRav trait
Signed-off-by: Gustavo Inacio <[email protected]>
1 parent 6885d9c commit e74bc2c

File tree

4 files changed

+42
-47
lines changed

4 files changed

+42
-47
lines changed

tap_core/src/manager/tap_manager.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use super::{
1010
WithValueAndTimestamp,
1111
};
1212
use crate::{
13-
rav::RAVRequest,
13+
rav::{GenerateRav, RAVRequest},
1414
receipt::{
1515
checks::{CheckBatch, CheckList, TimestampCheck, UniqueCheck},
1616
state::{Failed, Reserved},
@@ -184,7 +184,7 @@ impl<E, T, R> Manager<E, T, R>
184184
where
185185
E: ReceiptRead<T> + RAVRead<R> + EscrowHandler,
186186
T: SolStruct + WithValueAndTimestamp + Sync,
187-
R: SolStruct + WithValueAndTimestamp + Clone,
187+
R: SolStruct + WithValueAndTimestamp + Clone + GenerateRav<T>,
188188
{
189189
/// Completes remaining checks on all receipts up to
190190
/// (current time - `timestamp_buffer_ns`). Returns them in two lists
@@ -206,10 +206,6 @@ where
206206
ctx: &Context,
207207
timestamp_buffer_ns: u64,
208208
receipts_limit: Option<u64>,
209-
generate_rav: impl FnOnce(
210-
&[ReceiptWithState<Reserved, T>],
211-
Option<EIP712SignedMessage<R>>,
212-
) -> Result<R, Error>,
213209
) -> Result<RAVRequest<T, R>, Error> {
214210
let previous_rav = self.get_previous_rav().await?;
215211
let min_timestamp_ns = previous_rav
@@ -221,7 +217,7 @@ where
221217
.collect_receipts(ctx, timestamp_buffer_ns, min_timestamp_ns, receipts_limit)
222218
.await?;
223219

224-
let expected_rav = generate_rav(&valid_receipts, previous_rav.clone());
220+
let expected_rav = R::generate_rav(&valid_receipts, previous_rav.clone());
225221

226222
Ok(RAVRequest {
227223
valid_receipts,

tap_core/src/rav.rs

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ mod request;
4141

4242
use std::cmp;
4343

44-
use alloy::{primitives::Address, sol};
44+
use alloy::{primitives::Address, sol, sol_types::SolStruct};
4545
use serde::{Deserialize, Serialize};
4646

4747
use crate::{
@@ -55,6 +55,16 @@ use crate::{
5555
pub type SignedRAV = EIP712SignedMessage<ReceiptAggregateVoucher>;
5656
pub use request::RAVRequest;
5757

58+
pub trait GenerateRav<T>: SolStruct
59+
where
60+
T: SolStruct,
61+
{
62+
fn generate_rav(
63+
receipts: &[ReceiptWithState<Reserved, T>],
64+
previous_rav: Option<EIP712SignedMessage<Self>>,
65+
) -> Result<Self, Error>;
66+
}
67+
5868
sol! {
5969
/// Holds information needed for promise of payment signed with ECDSA
6070
///
@@ -122,17 +132,23 @@ impl ReceiptAggregateVoucher {
122132
}
123133
}
124134

125-
pub fn generate_expected_rav(
126-
receipts: &[ReceiptWithState<Reserved, Receipt>],
127-
previous_rav: Option<SignedRAV>,
128-
) -> Result<ReceiptAggregateVoucher, Error> {
129-
if receipts.is_empty() {
130-
return Err(Error::NoValidReceiptsForRAVRequest);
135+
impl GenerateRav<Receipt> for ReceiptAggregateVoucher {
136+
fn generate_rav(
137+
receipts: &[ReceiptWithState<Reserved, Receipt>],
138+
previous_rav: Option<EIP712SignedMessage<Self>>,
139+
) -> Result<Self, Error> {
140+
if receipts.is_empty() {
141+
return Err(Error::NoValidReceiptsForRAVRequest);
142+
}
143+
let allocation_id = receipts[0].signed_receipt().message.allocation_id;
144+
let receipts = receipts
145+
.iter()
146+
.map(|rx_receipt| rx_receipt.signed_receipt().clone())
147+
.collect::<Vec<_>>();
148+
ReceiptAggregateVoucher::aggregate_receipts(
149+
allocation_id,
150+
receipts.as_slice(),
151+
previous_rav,
152+
)
131153
}
132-
let allocation_id = receipts[0].signed_receipt().message.allocation_id;
133-
let receipts = receipts
134-
.iter()
135-
.map(|rx_receipt| rx_receipt.signed_receipt().clone())
136-
.collect::<Vec<_>>();
137-
ReceiptAggregateVoucher::aggregate_receipts(allocation_id, receipts.as_slice(), previous_rav)
138154
}

tap_core/tests/manager_test.rs

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use tap_core::{
2323
},
2424
Manager,
2525
},
26-
rav::{self, ReceiptAggregateVoucher},
26+
rav::ReceiptAggregateVoucher,
2727
receipt::{
2828
checks::{Check, CheckError, CheckList, StatefulTimestampCheck},
2929
state::Checking,
@@ -189,9 +189,7 @@ async fn manager_create_rav_request_all_valid_receipts(
189189
.await
190190
.is_ok());
191191
}
192-
let rav_request_result = manager
193-
.create_rav_request(&Context::new(), 0, None, rav::generate_expected_rav)
194-
.await;
192+
let rav_request_result = manager.create_rav_request(&Context::new(), 0, None).await;
195193
assert!(rav_request_result.is_ok());
196194

197195
let rav_request = rav_request_result.unwrap();
@@ -287,9 +285,7 @@ async fn manager_create_multiple_rav_requests_all_valid_receipts(
287285
.is_ok());
288286
expected_accumulated_value += value;
289287
}
290-
let rav_request_result = manager
291-
.create_rav_request(&Context::new(), 0, None, rav::generate_expected_rav)
292-
.await;
288+
let rav_request_result = manager.create_rav_request(&Context::new(), 0, None).await;
293289
assert!(rav_request_result.is_ok());
294290

295291
let rav_request = rav_request_result.unwrap();
@@ -333,9 +329,7 @@ async fn manager_create_multiple_rav_requests_all_valid_receipts(
333329
.is_ok());
334330
expected_accumulated_value += value;
335331
}
336-
let rav_request_result = manager
337-
.create_rav_request(&Context::new(), 0, None, rav::generate_expected_rav)
338-
.await;
332+
let rav_request_result = manager.create_rav_request(&Context::new(), 0, None).await;
339333
assert!(rav_request_result.is_ok());
340334

341335
let rav_request = rav_request_result.unwrap();
@@ -410,9 +404,7 @@ async fn manager_create_multiple_rav_requests_all_valid_receipts_consecutive_tim
410404
manager.remove_obsolete_receipts().await.unwrap();
411405
}
412406

413-
let rav_request_1_result = manager
414-
.create_rav_request(&Context::new(), 0, None, rav::generate_expected_rav)
415-
.await;
407+
let rav_request_1_result = manager.create_rav_request(&Context::new(), 0, None).await;
416408
assert!(rav_request_1_result.is_ok());
417409

418410
let rav_request_1 = rav_request_1_result.unwrap();
@@ -467,9 +459,7 @@ async fn manager_create_multiple_rav_requests_all_valid_receipts_consecutive_tim
467459
);
468460
}
469461

470-
let rav_request_2_result = manager
471-
.create_rav_request(&Context::new(), 0, None, rav::generate_expected_rav)
472-
.await;
462+
let rav_request_2_result = manager.create_rav_request(&Context::new(), 0, None).await;
473463
assert!(rav_request_2_result.is_ok());
474464

475465
let rav_request_2 = rav_request_2_result.unwrap();
@@ -535,7 +525,7 @@ async fn manager_create_rav_and_ignore_invalid_receipts(
535525
}
536526

537527
let rav_request = manager
538-
.create_rav_request(&Context::new(), 0, None, rav::generate_expected_rav)
528+
.create_rav_request(&Context::new(), 0, None)
539529
.await
540530
.unwrap();
541531
let expected_rav = rav_request.expected_rav.unwrap();
@@ -616,9 +606,7 @@ async fn test_retryable_checks(
616606

617607
is_create_rav.store(true, std::sync::atomic::Ordering::SeqCst);
618608

619-
let rav_request = manager
620-
.create_rav_request(&Context::new(), 0, None, rav::generate_expected_rav)
621-
.await;
609+
let rav_request = manager.create_rav_request(&Context::new(), 0, None).await;
622610

623611
assert_eq!(
624612
rav_request.expect_err("Didn't fail").to_string(),

tap_integration_tests/tests/indexer_mock.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use tap_core::{
2020
adapters::{EscrowHandler, RAVRead, RAVStore, ReceiptRead, ReceiptStore},
2121
Manager,
2222
},
23-
rav::{self, ReceiptAggregateVoucher, SignedRAV},
23+
rav::{ReceiptAggregateVoucher, SignedRAV},
2424
receipt::{checks::CheckList, Context, Receipt, SignedReceipt},
2525
};
2626
/// Rpc trait represents a JSON-RPC server that has a single async method `request`.
@@ -192,12 +192,7 @@ where
192192
{
193193
// Create the aggregate_receipts request params
194194
let rav_request = manager
195-
.create_rav_request(
196-
&Context::new(),
197-
time_stamp_buffer,
198-
None,
199-
rav::generate_expected_rav,
200-
)
195+
.create_rav_request(&Context::new(), time_stamp_buffer, None)
201196
.await?;
202197

203198
// To-do: Need to add previous RAV, when tap_manager supports replacing receipts

0 commit comments

Comments
 (0)