Skip to content

Commit 1dada3e

Browse files
committed
feat: add tap v2
Signed-off-by: Gustavo Inacio <[email protected]>
1 parent a6c5193 commit 1dada3e

File tree

19 files changed

+745
-231
lines changed

19 files changed

+745
-231
lines changed

tap_aggregator/src/aggregator.rs

Lines changed: 288 additions & 48 deletions
Large diffs are not rendered by default.

tap_aggregator/src/server.rs

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,12 @@ pub async fn run_server(
241241
#[allow(clippy::too_many_arguments)]
242242
mod tests {
243243
use std::collections::HashSet;
244-
use std::str::FromStr;
245244

246-
use alloy::{dyn_abi::Eip712Domain, primitives::Address, signers::local::PrivateKeySigner};
245+
use alloy::{
246+
dyn_abi::Eip712Domain,
247+
primitives::{address, Address},
248+
signers::local::PrivateKeySigner,
249+
};
247250
use jsonrpsee::{core::client::ClientT, http_client::HttpClientBuilder, rpc_params};
248251
use rand::prelude::*;
249252
use rand::seq::SliceRandom;
@@ -268,13 +271,18 @@ mod tests {
268271
}
269272

270273
#[fixture]
271-
fn allocation_ids() -> Vec<Address> {
272-
vec![
273-
Address::from_str("0xabababababababababababababababababababab").unwrap(),
274-
Address::from_str("0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead").unwrap(),
275-
Address::from_str("0xbeefbeefbeefbeefbeefbeefbeefbeefbeefbeef").unwrap(),
276-
Address::from_str("0x1234567890abcdef1234567890abcdef12345678").unwrap(),
277-
]
274+
fn payer() -> Address {
275+
address!("abababababababababababababababababababab")
276+
}
277+
278+
#[fixture]
279+
fn data_service() -> Address {
280+
address!("deaddeaddeaddeaddeaddeaddeaddeaddeaddead")
281+
}
282+
283+
#[fixture]
284+
fn service_provider() -> Address {
285+
address!("beefbeefbeefbeefbeefbeefbeefbeefbeefbeef")
278286
}
279287

280288
#[fixture]
@@ -343,7 +351,9 @@ mod tests {
343351
http_request_size_limit: u32,
344352
http_response_size_limit: u32,
345353
http_max_concurrent_connections: u32,
346-
allocation_ids: Vec<Address>,
354+
payer: Address,
355+
data_service: Address,
356+
service_provider: Address,
347357
#[case] values: Vec<u128>,
348358
#[values("0.0")] api_version: &str,
349359
#[values(0, 1, 2)] random_seed: u64,
@@ -382,7 +392,7 @@ mod tests {
382392
receipts.push(
383393
EIP712SignedMessage::new(
384394
&domain_separator,
385-
Receipt::new(allocation_ids[0], value).unwrap(),
395+
Receipt::new(payer, data_service, service_provider, value).unwrap(),
386396
&all_wallets.choose(&mut rng).unwrap().wallet,
387397
)
388398
.unwrap(),
@@ -401,11 +411,18 @@ mod tests {
401411

402412
let remote_rav = res.data;
403413

404-
let local_rav =
405-
ReceiptAggregateVoucher::aggregate_receipts(allocation_ids[0], &receipts, None)
406-
.unwrap();
414+
let local_rav = ReceiptAggregateVoucher::aggregate_receipts(
415+
payer,
416+
data_service,
417+
service_provider,
418+
&receipts,
419+
None,
420+
)
421+
.unwrap();
407422

408-
assert!(remote_rav.message.allocationId == local_rav.allocationId);
423+
assert!(remote_rav.message.payer == local_rav.payer);
424+
assert!(remote_rav.message.dataService == local_rav.dataService);
425+
assert!(remote_rav.message.serviceProvider == local_rav.serviceProvider);
409426
assert!(remote_rav.message.timestampNs == local_rav.timestampNs);
410427
assert!(remote_rav.message.valueAggregate == local_rav.valueAggregate);
411428

@@ -424,7 +441,9 @@ mod tests {
424441
http_request_size_limit: u32,
425442
http_response_size_limit: u32,
426443
http_max_concurrent_connections: u32,
427-
allocation_ids: Vec<Address>,
444+
payer: Address,
445+
data_service: Address,
446+
service_provider: Address,
428447
#[case] values: Vec<u128>,
429448
#[values("0.0")] api_version: &str,
430449
#[values(0, 1, 2, 3, 4)] random_seed: u64,
@@ -463,7 +482,7 @@ mod tests {
463482
receipts.push(
464483
EIP712SignedMessage::new(
465484
&domain_separator,
466-
Receipt::new(allocation_ids[0], value).unwrap(),
485+
Receipt::new(payer, data_service, service_provider, value).unwrap(),
467486
&all_wallets.choose(&mut rng).unwrap().wallet,
468487
)
469488
.unwrap(),
@@ -472,7 +491,9 @@ mod tests {
472491

473492
// Create previous RAV from first half of receipts locally
474493
let prev_rav = ReceiptAggregateVoucher::aggregate_receipts(
475-
allocation_ids[0],
494+
payer,
495+
data_service,
496+
service_provider,
476497
&receipts[0..receipts.len() / 2],
477498
None,
478499
)
@@ -512,7 +533,9 @@ mod tests {
512533
http_request_size_limit: u32,
513534
http_response_size_limit: u32,
514535
http_max_concurrent_connections: u32,
515-
allocation_ids: Vec<Address>,
536+
payer: Address,
537+
data_service: Address,
538+
service_provider: Address,
516539
) {
517540
// The keys that will be used to sign the new RAVs
518541
let keys_main = keys();
@@ -538,7 +561,7 @@ mod tests {
538561
// Create receipts
539562
let receipts = vec![EIP712SignedMessage::new(
540563
&domain_separator,
541-
Receipt::new(allocation_ids[0], 42).unwrap(),
564+
Receipt::new(payer, data_service, service_provider, 42).unwrap(),
542565
&keys_main.wallet,
543566
)
544567
.unwrap()];
@@ -594,15 +617,17 @@ mod tests {
594617
domain_separator: Eip712Domain,
595618
http_response_size_limit: u32,
596619
http_max_concurrent_connections: u32,
597-
allocation_ids: Vec<Address>,
620+
payer: Address,
621+
data_service: Address,
622+
service_provider: Address,
598623
#[values("0.0")] api_version: &str,
599624
) {
600625
// The keys that will be used to sign the new RAVs
601626
let keys_main = keys();
602627

603628
// Set the request byte size limit to a value that easily triggers the HTTP 413
604629
// error.
605-
let http_request_size_limit = 100 * 1024;
630+
let http_request_size_limit = 120 * 1024;
606631

607632
// Number of receipts that is just above the number that would fit within the
608633
// request size limit. This value is hard-coded here because it supports the
@@ -633,7 +658,7 @@ mod tests {
633658
receipts.push(
634659
EIP712SignedMessage::new(
635660
&domain_separator,
636-
Receipt::new(allocation_ids[0], u128::MAX / 1000).unwrap(),
661+
Receipt::new(payer, data_service, service_provider, u128::MAX / 1000).unwrap(),
637662
&keys_main.wallet,
638663
)
639664
.unwrap(),
@@ -656,6 +681,7 @@ mod tests {
656681
),
657682
)
658683
.await;
684+
println!("{res:?}");
659685
assert!(res.is_ok());
660686

661687
// Create RAV through the JSON-RPC server.

tap_core/benches/timeline_aggretion_protocol_benchmark.rs

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ use tap_core::{
2121

2222
pub fn create_and_sign_receipt(
2323
domain_separator: &Eip712Domain,
24-
allocation_id: Address,
24+
payer: Address,
25+
data_service: Address,
26+
service_provider: Address,
2527
value: u128,
2628
wallet: &PrivateKeySigner,
2729
) -> EIP712SignedMessage<Receipt> {
2830
EIP712SignedMessage::new(
2931
domain_separator,
30-
Receipt::new(allocation_id, value).unwrap(),
32+
Receipt::new(payer, data_service, service_provider, value).unwrap(),
3133
wallet,
3234
)
3335
.unwrap()
@@ -40,21 +42,32 @@ pub fn criterion_benchmark(c: &mut Criterion) {
4042
let address = wallet.address();
4143

4244
// Arbitrary values wrapped in black box to avoid compiler optimizing them out
43-
let allocation_id = Address::from_str("0xabababababababababababababababababababab").unwrap();
45+
let payer = Address::from_str("0xabababababababababababababababababababab").unwrap();
46+
let data_service = Address::from_str("0xabababababababababababababababababababab").unwrap();
47+
let service_provider = Address::from_str("0xabababababababababababababababababababab").unwrap();
4448
let value = 12345u128;
4549

4650
c.bench_function("Create Receipt", |b| {
4751
b.iter(|| {
4852
create_and_sign_receipt(
4953
black_box(&domain_seperator),
50-
black_box(allocation_id),
54+
black_box(payer),
55+
black_box(data_service),
56+
black_box(service_provider),
5157
black_box(value),
5258
black_box(&wallet),
5359
)
5460
})
5561
});
5662

57-
let receipt = create_and_sign_receipt(&domain_seperator, allocation_id, value, &wallet);
63+
let receipt = create_and_sign_receipt(
64+
&domain_seperator,
65+
payer,
66+
data_service,
67+
service_provider,
68+
value,
69+
&wallet,
70+
);
5871

5972
c.bench_function("Validate Receipt", |b| {
6073
b.iter(|| {
@@ -68,15 +81,26 @@ pub fn criterion_benchmark(c: &mut Criterion) {
6881

6982
for log_number_of_receipts in 10..30 {
7083
let receipts = (0..2 ^ log_number_of_receipts)
71-
.map(|_| create_and_sign_receipt(&domain_seperator, allocation_id, value, &wallet))
84+
.map(|_| {
85+
create_and_sign_receipt(
86+
&domain_seperator,
87+
payer,
88+
data_service,
89+
service_provider,
90+
value,
91+
&wallet,
92+
)
93+
})
7294
.collect::<Vec<_>>();
7395

7496
rav_group.bench_function(
7597
format!("Create RAV w/ 2^{} receipt's", log_number_of_receipts),
7698
|b| {
7799
b.iter(|| {
78100
ReceiptAggregateVoucher::aggregate_receipts(
79-
black_box(allocation_id),
101+
black_box(payer),
102+
black_box(data_service),
103+
black_box(service_provider),
80104
black_box(&receipts),
81105
black_box(None),
82106
)
@@ -86,7 +110,14 @@ pub fn criterion_benchmark(c: &mut Criterion) {
86110

87111
let signed_rav = EIP712SignedMessage::new(
88112
&domain_seperator,
89-
ReceiptAggregateVoucher::aggregate_receipts(allocation_id, &receipts, None).unwrap(),
113+
ReceiptAggregateVoucher::aggregate_receipts(
114+
payer,
115+
data_service,
116+
service_provider,
117+
&receipts,
118+
None,
119+
)
120+
.unwrap(),
90121
&wallet,
91122
)
92123
.unwrap();

tap_core/src/error.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,18 @@ pub enum Error {
4747
NoValidReceiptsForRAVRequest,
4848

4949
/// Error when the previous RAV allocation id does not match the allocation id from the new receipt
50-
#[error("Previous RAV allocation id ({prev_id}) doesn't match the allocation id from the new receipt ({new_id}).")]
51-
RavAllocationIdMismatch { prev_id: String, new_id: String },
50+
#[error(
51+
"Previous RAV payer ({prev_id}) doesn't match the payer from the new receipt ({new_id})."
52+
)]
53+
RavPayerMismatch { prev_id: String, new_id: String },
54+
55+
/// Error when the previous RAV data service does not match the data service from the new receipt
56+
#[error("Previous RAV data_service ({prev_id}) doesn't match the data_service from the new receipt ({new_id}).")]
57+
RavDataServiceMismatch { prev_id: String, new_id: String },
58+
59+
/// Error when the previous RAV service provider does not match the service provider from the new receipt
60+
#[error("Previous RAV service_provider ({prev_id}) doesn't match the service_provider from the new receipt ({new_id}).")]
61+
RavServiceProviderMismatch { prev_id: String, new_id: String },
5262

5363
/// Error when all receipts do not have the same allocation id
5464
///

0 commit comments

Comments
 (0)