Skip to content

Commit a23ffad

Browse files
committed
feat: implement allow_unparsable_block in cardano_network
This function evaluate the possibility of validating the request to allow unparsable block or not, depending on the target Cardano network.
1 parent 820d937 commit a23ffad

File tree

1 file changed

+80
-1
lines changed

1 file changed

+80
-1
lines changed

mithril-common/src/entities/cardano_network.rs

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
22
use std::fmt::Display;
33
use thiserror::Error;
44

5-
use crate::MagicId;
5+
use crate::{MagicId, StdResult};
66

77
const MAINNET_MAGIC_ID: MagicId = 764824073;
88
const TESTNET_MAGIC_ID: MagicId = 1097911063;
@@ -74,6 +74,18 @@ impl CardanoNetwork {
7474
CardanoNetwork::TestNet(magic_id) => magic_id,
7575
}
7676
}
77+
78+
/// Evaluate the possibility of validating the request to allow unparsable block or not,
79+
/// depending on the target Cardano network
80+
pub fn allow_unparsable_block(&self, allow_unparsable_block: bool) -> StdResult<bool> {
81+
let allow_unparsable_block = match self {
82+
CardanoNetwork::MainNet => false,
83+
CardanoNetwork::TestNet(id) if *id == PREPROD_MAGIC_ID => false,
84+
_ => allow_unparsable_block,
85+
};
86+
87+
Ok(allow_unparsable_block)
88+
}
7789
}
7890

7991
impl Display for CardanoNetwork {
@@ -144,4 +156,71 @@ mod tests {
144156
);
145157
assert!(CardanoNetwork::from_code("private".to_string(), None).is_err());
146158
}
159+
160+
#[test]
161+
fn allow_unparsable_block_should_always_return_false_on_mainnet_and_preprod() {
162+
let allow_unparsable_block = CardanoNetwork::MainNet
163+
.allow_unparsable_block(false)
164+
.unwrap();
165+
assert!(!allow_unparsable_block);
166+
167+
let allow_unparsable_block = CardanoNetwork::MainNet
168+
.allow_unparsable_block(true)
169+
.unwrap();
170+
assert!(!allow_unparsable_block);
171+
172+
let allow_unparsable_block = CardanoNetwork::TestNet(PREPROD_MAGIC_ID)
173+
.allow_unparsable_block(false)
174+
.unwrap();
175+
assert!(!allow_unparsable_block);
176+
177+
let allow_unparsable_block = CardanoNetwork::TestNet(PREPROD_MAGIC_ID)
178+
.allow_unparsable_block(true)
179+
.unwrap();
180+
assert!(!allow_unparsable_block);
181+
}
182+
183+
#[test]
184+
fn allow_unparsable_block_should_return_value_passed_in_parameter_on_all_networks_other_than_mainnet_and_preprod(
185+
) {
186+
let allow_unparsable_block = CardanoNetwork::TestNet(PREVIEW_MAGIC_ID)
187+
.allow_unparsable_block(false)
188+
.unwrap();
189+
assert!(!allow_unparsable_block);
190+
191+
let allow_unparsable_block = CardanoNetwork::TestNet(PREVIEW_MAGIC_ID)
192+
.allow_unparsable_block(true)
193+
.unwrap();
194+
assert!(allow_unparsable_block);
195+
196+
let allow_unparsable_block = CardanoNetwork::TestNet(SANCHONET_MAGIC_ID)
197+
.allow_unparsable_block(false)
198+
.unwrap();
199+
assert!(!allow_unparsable_block);
200+
201+
let allow_unparsable_block = CardanoNetwork::TestNet(SANCHONET_MAGIC_ID)
202+
.allow_unparsable_block(true)
203+
.unwrap();
204+
assert!(allow_unparsable_block);
205+
206+
let allow_unparsable_block = CardanoNetwork::TestNet(TESTNET_MAGIC_ID)
207+
.allow_unparsable_block(false)
208+
.unwrap();
209+
assert!(!allow_unparsable_block);
210+
211+
let allow_unparsable_block = CardanoNetwork::TestNet(TESTNET_MAGIC_ID)
212+
.allow_unparsable_block(true)
213+
.unwrap();
214+
assert!(allow_unparsable_block);
215+
216+
let allow_unparsable_block = CardanoNetwork::DevNet(123)
217+
.allow_unparsable_block(false)
218+
.unwrap();
219+
assert!(!allow_unparsable_block);
220+
221+
let allow_unparsable_block = CardanoNetwork::DevNet(123)
222+
.allow_unparsable_block(true)
223+
.unwrap();
224+
assert!(allow_unparsable_block);
225+
}
147226
}

0 commit comments

Comments
 (0)