Skip to content

Commit 7f586b6

Browse files
committed
refactor: rollback use of CardanoTransactionRetriever in signable builder
1 parent 52fa263 commit 7f586b6

File tree

9 files changed

+28
-188
lines changed

9 files changed

+28
-188
lines changed

mithril-aggregator/src/database/provider/cardano_transaction.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use mithril_common::{
22
entities::{Beacon, BlockNumber, CardanoTransaction, ImmutableFileNumber, TransactionHash},
3-
signable_builder::{TransactionRetriever, TransactionStore},
3+
signable_builder::TransactionStore,
44
StdResult,
55
};
66
use mithril_persistence::sqlite::{
@@ -13,6 +13,8 @@ use async_trait::async_trait;
1313
use sqlite::{Row, Value};
1414
use std::{iter::repeat, sync::Arc};
1515

16+
use crate::services::TransactionsRetriever;
17+
1618
/// Cardano Transaction record is the representation of a cardano transaction.
1719
#[derive(Debug, PartialEq, Clone)]
1820
pub struct CardanoTransactionRecord {
@@ -280,7 +282,7 @@ impl TransactionStore for CardanoTransactionRepository {
280282
}
281283

282284
#[async_trait]
283-
impl TransactionRetriever for CardanoTransactionRepository {
285+
impl TransactionsRetriever for CardanoTransactionRepository {
284286
async fn get_up_to(&self, beacon: &Beacon) -> StdResult<Vec<CardanoTransaction>> {
285287
self.get_transactions_up_to(beacon).await.map(|v| {
286288
v.into_iter()

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use mithril_common::{
3333
signable_builder::{
3434
CardanoImmutableFilesFullSignableBuilder, CardanoTransactionsSignableBuilder,
3535
MithrilSignableBuilderService, MithrilStakeDistributionSignableBuilder,
36-
SignableBuilderService, TransactionRetriever, TransactionStore,
36+
SignableBuilderService, TransactionStore,
3737
},
3838
BeaconProvider, BeaconProviderImpl,
3939
};
@@ -136,9 +136,6 @@ pub struct DependenciesBuilder {
136136
/// Cardano transactions store.
137137
pub transaction_store: Option<Arc<dyn TransactionStore>>,
138138

139-
/// Cardano transactions retriever.
140-
pub transaction_retriever: Option<Arc<dyn TransactionRetriever>>,
141-
142139
/// Cardano transactions parser.
143140
pub transaction_parser: Option<Arc<dyn TransactionParser>>,
144141

@@ -239,7 +236,6 @@ impl DependenciesBuilder {
239236
transaction_parser: None,
240237
transaction_repository: None,
241238
transaction_store: None,
242-
transaction_retriever: None,
243239
immutable_digester: None,
244240
immutable_file_observer: None,
245241
immutable_cache_provider: None,
@@ -747,21 +743,6 @@ impl DependenciesBuilder {
747743
Ok(self.transaction_store.as_ref().cloned().unwrap())
748744
}
749745

750-
async fn build_transaction_retriever(&mut self) -> Result<Arc<dyn TransactionRetriever>> {
751-
let transaction_retriever = self.get_transaction_repository().await?;
752-
753-
Ok(transaction_retriever as Arc<dyn TransactionRetriever>)
754-
}
755-
756-
/// Transaction retriever.
757-
pub async fn get_transaction_retriever(&mut self) -> Result<Arc<dyn TransactionRetriever>> {
758-
if self.transaction_retriever.is_none() {
759-
self.transaction_retriever = Some(self.build_transaction_retriever().await?);
760-
}
761-
762-
Ok(self.transaction_retriever.as_ref().cloned().unwrap())
763-
}
764-
765746
async fn build_transaction_parser(&mut self) -> Result<Arc<dyn TransactionParser>> {
766747
// TODO: 'allow_unparsable_block' parameter should be configurable and its default value set to false
767748
let allow_unparsable_block = true;
@@ -1104,7 +1085,6 @@ impl DependenciesBuilder {
11041085
let cardano_transactions_builder = Arc::new(CardanoTransactionsSignableBuilder::new(
11051086
self.get_transaction_parser().await?,
11061087
self.get_transaction_store().await?,
1107-
self.get_transaction_retriever().await?,
11081088
&self.configuration.db_directory,
11091089
self.get_logger().await?,
11101090
));

mithril-aggregator/src/services/prover.rs

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use mithril_common::{
88
entities::{
99
Beacon, BlockRange, CardanoTransaction, CardanoTransactionsSetProof, TransactionHash,
1010
},
11-
signable_builder::TransactionRetriever,
1211
StdResult,
1312
};
1413

@@ -27,14 +26,22 @@ pub trait ProverService: Sync + Send {
2726
) -> StdResult<Vec<CardanoTransactionsSetProof>>;
2827
}
2928

29+
/// Transactions retriever
30+
#[cfg_attr(test, automock)]
31+
#[async_trait]
32+
pub trait TransactionsRetriever: Sync + Send {
33+
/// Get transactions up to given beacon using chronological order
34+
async fn get_up_to(&self, beacon: &Beacon) -> StdResult<Vec<CardanoTransaction>>;
35+
}
36+
3037
/// Mithril prover
3138
pub struct MithrilProverService {
32-
transaction_retriever: Arc<dyn TransactionRetriever>,
39+
transaction_retriever: Arc<dyn TransactionsRetriever>,
3340
}
3441

3542
impl MithrilProverService {
3643
/// Create a new Mithril prover
37-
pub fn new(transaction_retriever: Arc<dyn TransactionRetriever>) -> Self {
44+
pub fn new(transaction_retriever: Arc<dyn TransactionsRetriever>) -> Self {
3845
Self {
3946
transaction_retriever,
4047
}
@@ -121,20 +128,10 @@ mod tests {
121128
use anyhow::anyhow;
122129
use mithril_common::entities::CardanoTransaction;
123130
use mithril_common::test_utils::fake_data;
124-
use mockall::{mock, predicate::eq};
131+
use mockall::predicate::eq;
125132

126133
use super::*;
127134

128-
mock! {
129-
TransactionRetrieverImpl { }
130-
131-
#[async_trait]
132-
impl TransactionRetriever for TransactionRetrieverImpl
133-
{
134-
async fn get_up_to(&self, beacon: &Beacon) -> StdResult<Vec<CardanoTransaction>>;
135-
}
136-
}
137-
138135
fn generate_transactions(
139136
total_transactions: usize,
140137
) -> (Vec<TransactionHash>, Vec<CardanoTransaction>) {
@@ -153,7 +150,7 @@ mod tests {
153150
#[tokio::test]
154151
async fn compute_proof_for_one_set_with_multiple_transactions() {
155152
let (transaction_hashes, transactions) = generate_transactions(3);
156-
let mut transaction_retriever = MockTransactionRetrieverImpl::new();
153+
let mut transaction_retriever = MockTransactionsRetriever::new();
157154
transaction_retriever
158155
.expect_get_up_to()
159156
.with(eq(fake_data::beacon()))
@@ -175,7 +172,7 @@ mod tests {
175172
#[tokio::test]
176173
async fn cant_compute_proof_for_unknown_transaction() {
177174
let (transaction_hashes, _transactions) = generate_transactions(3);
178-
let mut transaction_retriever = MockTransactionRetrieverImpl::new();
175+
let mut transaction_retriever = MockTransactionsRetriever::new();
179176
transaction_retriever
180177
.expect_get_up_to()
181178
.with(eq(fake_data::beacon()))
@@ -194,7 +191,7 @@ mod tests {
194191
let (transaction_hashes, transactions) = generate_transactions(5);
195192
// The last two are not in the "store"
196193
let transactions = transactions[0..=2].to_vec();
197-
let mut transaction_retriever = MockTransactionRetrieverImpl::new();
194+
let mut transaction_retriever = MockTransactionsRetriever::new();
198195
transaction_retriever
199196
.expect_get_up_to()
200197
.with(eq(fake_data::beacon()))
@@ -213,13 +210,10 @@ mod tests {
213210
transactions_set_proof[0].verify().unwrap();
214211
}
215212

216-
// this one can't be done right now because we don't have a merkle tree of merkle tree yet
217-
// todo: compute_proof_for_multiple_set_with_multiple_transactions
218-
219213
#[tokio::test]
220214
async fn cant_compute_proof_if_retriever_fail() {
221215
let (transaction_hashes, _transactions) = generate_transactions(3);
222-
let mut transaction_retriever = MockTransactionRetrieverImpl::new();
216+
let mut transaction_retriever = MockTransactionsRetriever::new();
223217
transaction_retriever
224218
.expect_get_up_to()
225219
.with(eq(fake_data::beacon()))

mithril-common/src/messages/cardano_transactions_proof.rs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,7 @@ mod tests {
190190
crypto_helper::MKProof,
191191
entities::{Beacon, CardanoTransaction},
192192
signable_builder::{
193-
CardanoTransactionsSignableBuilder, MockTransactionRetriever, MockTransactionStore,
194-
SignableBuilder,
193+
CardanoTransactionsSignableBuilder, MockTransactionStore, SignableBuilder,
195194
},
196195
};
197196

@@ -381,17 +380,10 @@ mod tests {
381380
.expect_store_transactions()
382381
.returning(|_| Ok(()))
383382
.times(1);
384-
let transaction_retrieved = transactions.to_vec();
385-
let mut mock_transaction_retriever = MockTransactionRetriever::new();
386-
mock_transaction_retriever
387-
.expect_get_up_to()
388-
.return_once(|_| Ok(transaction_retrieved))
389-
.times(1);
390383

391384
let cardano_transaction_signable_builder = CardanoTransactionsSignableBuilder::new(
392385
Arc::new(DumbTransactionParser::new(transactions.to_vec())),
393386
Arc::new(mock_transaction_store),
394-
Arc::new(mock_transaction_retriever),
395387
Path::new("/tmp"),
396388
Logger::root(slog::Discard, slog::o!()),
397389
);

mithril-common/src/signable_builder/cardano_transactions.rs

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,10 @@ pub trait TransactionStore: Send + Sync {
3030
async fn store_transactions(&self, transactions: &[CardanoTransaction]) -> StdResult<()>;
3131
}
3232

33-
/// Cardano transactions retriever
34-
#[cfg_attr(test, automock)]
35-
#[async_trait]
36-
pub trait TransactionRetriever: Sync + Send {
37-
/// Get transactions up to given beacon using chronological order
38-
async fn get_up_to(&self, beacon: &Beacon) -> StdResult<Vec<CardanoTransaction>>;
39-
}
40-
4133
/// A [CardanoTransactionsSignableBuilder] builder
4234
pub struct CardanoTransactionsSignableBuilder {
4335
transaction_parser: Arc<dyn TransactionParser>,
4436
transaction_store: Arc<dyn TransactionStore>,
45-
transaction_retriever: Arc<dyn TransactionRetriever>,
4637
logger: Logger,
4738
dirpath: PathBuf,
4839
}
@@ -52,14 +43,12 @@ impl CardanoTransactionsSignableBuilder {
5243
pub fn new(
5344
transaction_parser: Arc<dyn TransactionParser>,
5445
transaction_store: Arc<dyn TransactionStore>,
55-
transaction_retriever: Arc<dyn TransactionRetriever>,
5646
dirpath: &Path,
5747
logger: Logger,
5848
) -> Self {
5949
Self {
6050
transaction_parser,
6151
transaction_store,
62-
transaction_retriever,
6352
logger,
6453
dirpath: dirpath.to_owned(),
6554
}
@@ -134,9 +123,6 @@ impl SignableBuilder<Beacon> for CardanoTransactionsSignableBuilder {
134123
.await?;
135124
}
136125

137-
// We temporarily retrieve all the transactions from the database after we have recorded them.
138-
// This avoids order side effects.
139-
let transactions = self.transaction_retriever.get_up_to(&beacon).await?;
140126
let mk_root = self.compute_merkle_root(&transactions)?;
141127

142128
let mut protocol_message = ProtocolMessage::new();
@@ -156,7 +142,7 @@ impl SignableBuilder<Beacon> for CardanoTransactionsSignableBuilder {
156142
#[cfg(test)]
157143
mod tests {
158144
use crate::cardano_transaction_parser::DumbTransactionParser;
159-
use crate::signable_builder::{MockTransactionRetriever, MockTransactionStore};
145+
use crate::signable_builder::MockTransactionStore;
160146

161147
use super::*;
162148
use slog::Drain;
@@ -185,7 +171,6 @@ mod tests {
185171
transactions_set_reference.clone(),
186172
)),
187173
Arc::new(MockTransactionStore::new()),
188-
Arc::new(MockTransactionRetriever::new()),
189174
Path::new("/tmp"),
190175
create_logger(),
191176
);
@@ -246,23 +231,15 @@ mod tests {
246231
CardanoTransaction::new("tx-hash-456", 2, 12),
247232
CardanoTransaction::new("tx-hash-789", 3, 13),
248233
];
249-
let transactions_clone = transactions.clone();
250234
let transaction_parser = Arc::new(DumbTransactionParser::new(transactions.clone()));
251235
let mut mock_transaction_store = MockTransactionStore::new();
252236
mock_transaction_store
253237
.expect_store_transactions()
254238
.returning(|_| Ok(()));
255239
let transaction_store = Arc::new(mock_transaction_store);
256-
let mut mock_transaction_retriever = MockTransactionRetriever::new();
257-
mock_transaction_retriever
258-
.expect_get_up_to()
259-
.times(1)
260-
.return_once(|_| Ok(transactions_clone));
261-
let transaction_retriever = Arc::new(mock_transaction_retriever);
262240
let cardano_transactions_signable_builder = CardanoTransactionsSignableBuilder::new(
263241
transaction_parser,
264242
transaction_store,
265-
transaction_retriever,
266243
Path::new("/tmp"),
267244
create_logger(),
268245
);
@@ -299,17 +276,9 @@ mod tests {
299276
.expect_store_transactions()
300277
.returning(|_| Ok(()));
301278
let transaction_store = Arc::new(mock_transaction_store);
302-
let transactions_retrieved = transactions.clone();
303-
let mut mock_transaction_retriever = MockTransactionRetriever::new();
304-
mock_transaction_retriever
305-
.expect_get_up_to()
306-
.return_once(|_| Ok(transactions_retrieved))
307-
.times(1);
308-
let transaction_retriever = Arc::new(mock_transaction_retriever);
309279
let cardano_transactions_signable_builder = CardanoTransactionsSignableBuilder::new(
310280
transaction_parser,
311281
transaction_store,
312-
transaction_retriever,
313282
Path::new("/tmp"),
314283
create_logger(),
315284
);

0 commit comments

Comments
 (0)