Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 02a92d8

Browse files
committedSep 15, 2024·
fix: zero sequence check for from_height
1 parent 286fa88 commit 02a92d8

File tree

6 files changed

+47
-34
lines changed

6 files changed

+47
-34
lines changed
 

‎src/interpreter/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1211,7 +1211,7 @@ mod tests {
12111211
assert_eq!(
12121212
older_satisfied.unwrap(),
12131213
vec![SatisfiedConstraint::RelativeTimelock {
1214-
n: crate::RelLockTime::from_height(1000).into()
1214+
n: crate::RelLockTime::from_height(1000).unwrap().into()
12151215
}]
12161216
);
12171217

‎src/miniscript/mod.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -1191,10 +1191,10 @@ mod tests {
11911191
let mut abs = miniscript.lift().unwrap();
11921192
assert_eq!(abs.n_keys(), 5);
11931193
assert_eq!(abs.minimum_n_keys(), Some(2));
1194-
abs = abs.at_age(RelLockTime::from_height(10000).into());
1194+
abs = abs.at_age(RelLockTime::from_height(10000).unwrap().into());
11951195
assert_eq!(abs.n_keys(), 5);
11961196
assert_eq!(abs.minimum_n_keys(), Some(2));
1197-
abs = abs.at_age(RelLockTime::from_height(9999).into());
1197+
abs = abs.at_age(RelLockTime::from_height(9999).unwrap().into());
11981198
assert_eq!(abs.n_keys(), 3);
11991199
assert_eq!(abs.minimum_n_keys(), Some(3));
12001200
abs = abs.at_age(RelLockTime::ZERO.into());
@@ -1554,28 +1554,28 @@ mod tests {
15541554
(
15551555
format!("or_d(pk({}),and_v(v:pk({}),older(12960)))", key_missing, key_present),
15561556
None,
1557-
Some(RelLockTime::from_height(12960)),
1557+
Some(RelLockTime::from_height(12960).unwrap()),
15581558
),
15591559
(
15601560
format!(
15611561
"thresh(3,pk({}),s:pk({}),snl:older(10),snl:after(11))",
15621562
key_present, key_missing
15631563
),
15641564
Some(AbsLockTime::from_consensus(11).unwrap()),
1565-
Some(RelLockTime::from_height(10)),
1565+
Some(RelLockTime::from_height(10).unwrap()),
15661566
),
15671567
(
15681568
format!("and_v(v:and_v(v:pk({}),older(10)),older(20))", key_present),
15691569
None,
1570-
Some(RelLockTime::from_height(20)),
1570+
Some(RelLockTime::from_height(20).unwrap()),
15711571
),
15721572
(
15731573
format!(
15741574
"andor(pk({}),older(10),and_v(v:pk({}),older(20)))",
15751575
key_present, key_missing
15761576
),
15771577
None,
1578-
Some(RelLockTime::from_height(10)),
1578+
Some(RelLockTime::from_height(10).unwrap()),
15791579
),
15801580
];
15811581

‎src/policy/compiler.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1379,7 +1379,7 @@ mod tests {
13791379
(
13801380
1,
13811381
Arc::new(Concrete::And(vec![
1382-
Arc::new(Concrete::Older(RelLockTime::from_height(10000))),
1382+
Arc::new(Concrete::Older(RelLockTime::from_height(10000).unwrap())),
13831383
Arc::new(Concrete::Thresh(
13841384
Threshold::from_iter(2, key_pol[5..8].iter().map(|p| (p.clone()).into()))
13851385
.unwrap(),
@@ -1409,10 +1409,10 @@ mod tests {
14091409
let mut abs = policy.lift().unwrap();
14101410
assert_eq!(abs.n_keys(), 8);
14111411
assert_eq!(abs.minimum_n_keys(), Some(2));
1412-
abs = abs.at_age(RelLockTime::from_height(10000).into());
1412+
abs = abs.at_age(RelLockTime::from_height(10000).unwrap().into());
14131413
assert_eq!(abs.n_keys(), 8);
14141414
assert_eq!(abs.minimum_n_keys(), Some(2));
1415-
abs = abs.at_age(RelLockTime::from_height(9999).into());
1415+
abs = abs.at_age(RelLockTime::from_height(9999).unwrap().into());
14161416
assert_eq!(abs.n_keys(), 5);
14171417
assert_eq!(abs.minimum_n_keys(), Some(3));
14181418
abs = abs.at_age(RelLockTime::ZERO.into());
@@ -1442,15 +1442,15 @@ mod tests {
14421442
assert!(ms.satisfy(no_sat).is_err());
14431443
assert!(ms.satisfy(&left_sat).is_ok());
14441444
assert!(ms
1445-
.satisfy((&right_sat, RelLockTime::from_height(10001)))
1445+
.satisfy((&right_sat, RelLockTime::from_height(10001).unwrap(),))
14461446
.is_ok());
14471447
//timelock not met
14481448
assert!(ms
1449-
.satisfy((&right_sat, RelLockTime::from_height(9999)))
1449+
.satisfy((&right_sat, RelLockTime::from_height(9999).unwrap()))
14501450
.is_err());
14511451

14521452
assert_eq!(
1453-
ms.satisfy((left_sat, RelLockTime::from_height(9999)))
1453+
ms.satisfy((left_sat, RelLockTime::from_height(9999).unwrap()))
14541454
.unwrap(),
14551455
vec![
14561456
// sat for left branch
@@ -1462,7 +1462,7 @@ mod tests {
14621462
);
14631463

14641464
assert_eq!(
1465-
ms.satisfy((right_sat, RelLockTime::from_height(10000)))
1465+
ms.satisfy((right_sat, RelLockTime::from_height(10000).unwrap()))
14661466
.unwrap(),
14671467
vec![
14681468
// sat for right branch

‎src/policy/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ mod tests {
357357
Semantic::Thresh(Threshold::or(
358358
Arc::new(Semantic::Thresh(Threshold::and(
359359
Arc::new(Semantic::Key(key_a)),
360-
Arc::new(Semantic::Older(RelLockTime::from_height(42)))
360+
Arc::new(Semantic::Older(RelLockTime::from_height(42).unwrap()))
361361
))),
362362
Arc::new(Semantic::Key(key_b))
363363
)),

‎src/policy/semantic.rs

+29-18
Original file line numberDiff line numberDiff line change
@@ -725,26 +725,33 @@ mod tests {
725725
assert_eq!(
726726
policy
727727
.clone()
728-
.at_age(RelLockTime::from_height(10000).into()),
728+
.at_age(RelLockTime::from_height(10000).unwrap().into()),
729729
policy
730730
);
731731
assert_eq!(policy.n_keys(), 1);
732732
assert_eq!(policy.minimum_n_keys(), Some(1));
733733

734734
let policy = StringPolicy::from_str("older(1000)").unwrap();
735-
assert_eq!(policy, Policy::Older(RelLockTime::from_height(1000)));
735+
assert_eq!(policy, Policy::Older(RelLockTime::from_height(1000).unwrap()));
736736
assert_eq!(policy.absolute_timelocks(), vec![]);
737737
assert_eq!(policy.relative_timelocks(), vec![1000]);
738738
assert_eq!(policy.clone().at_age(RelLockTime::ZERO.into()), Policy::Unsatisfiable);
739739
assert_eq!(
740-
policy.clone().at_age(RelLockTime::from_height(999).into()),
740+
policy
741+
.clone()
742+
.at_age(RelLockTime::from_height(999).unwrap().into()),
741743
Policy::Unsatisfiable
742744
);
743-
assert_eq!(policy.clone().at_age(RelLockTime::from_height(1000).into()), policy);
744745
assert_eq!(
745746
policy
746747
.clone()
747-
.at_age(RelLockTime::from_height(10000).into()),
748+
.at_age(RelLockTime::from_height(1000).unwrap().into()),
749+
policy
750+
);
751+
assert_eq!(
752+
policy
753+
.clone()
754+
.at_age(RelLockTime::from_height(10000).unwrap().into()),
748755
policy
749756
);
750757
assert_eq!(policy.n_keys(), 0);
@@ -755,24 +762,28 @@ mod tests {
755762
policy,
756763
Policy::Thresh(Threshold::or(
757764
Policy::Key("".to_owned()).into(),
758-
Policy::Older(RelLockTime::from_height(1000)).into(),
765+
Policy::Older(RelLockTime::from_height(1000).unwrap()).into(),
759766
))
760767
);
761768
assert_eq!(policy.relative_timelocks(), vec![1000]);
762769
assert_eq!(policy.absolute_timelocks(), vec![]);
763770
assert_eq!(policy.clone().at_age(RelLockTime::ZERO.into()), Policy::Key("".to_owned()));
764771
assert_eq!(
765-
policy.clone().at_age(RelLockTime::from_height(999).into()),
772+
policy
773+
.clone()
774+
.at_age(RelLockTime::from_height(999).unwrap().into()),
766775
Policy::Key("".to_owned())
767776
);
768777
assert_eq!(
769-
policy.clone().at_age(RelLockTime::from_height(1000).into()),
778+
policy
779+
.clone()
780+
.at_age(RelLockTime::from_height(1000).unwrap().into()),
770781
policy.clone().normalized()
771782
);
772783
assert_eq!(
773784
policy
774785
.clone()
775-
.at_age(RelLockTime::from_height(10000).into()),
786+
.at_age(RelLockTime::from_height(10000).unwrap().into()),
776787
policy.clone().normalized()
777788
);
778789
assert_eq!(policy.n_keys(), 1);
@@ -816,11 +827,11 @@ mod tests {
816827
Threshold::new(
817828
2,
818829
vec![
819-
Policy::Older(RelLockTime::from_height(1000)).into(),
820-
Policy::Older(RelLockTime::from_height(10000)).into(),
821-
Policy::Older(RelLockTime::from_height(1000)).into(),
822-
Policy::Older(RelLockTime::from_height(2000)).into(),
823-
Policy::Older(RelLockTime::from_height(2000)).into(),
830+
Policy::Older(RelLockTime::from_height(1000).unwrap()).into(),
831+
Policy::Older(RelLockTime::from_height(10000).unwrap()).into(),
832+
Policy::Older(RelLockTime::from_height(1000).unwrap()).into(),
833+
Policy::Older(RelLockTime::from_height(2000).unwrap()).into(),
834+
Policy::Older(RelLockTime::from_height(2000).unwrap()).into(),
824835
]
825836
)
826837
.unwrap()
@@ -843,9 +854,9 @@ mod tests {
843854
Threshold::new(
844855
2,
845856
vec![
846-
Policy::Older(RelLockTime::from_height(1000)).into(),
847-
Policy::Older(RelLockTime::from_height(10000)).into(),
848-
Policy::Older(RelLockTime::from_height(1000)).into(),
857+
Policy::Older(RelLockTime::from_height(1000).unwrap()).into(),
858+
Policy::Older(RelLockTime::from_height(10000).unwrap()).into(),
859+
Policy::Older(RelLockTime::from_height(1000).unwrap()).into(),
849860
Policy::Unsatisfiable.into(),
850861
Policy::Unsatisfiable.into(),
851862
]
@@ -967,7 +978,7 @@ mod tests {
967978
.entails(
968979
liquid_pol
969980
.clone()
970-
.at_age(RelLockTime::from_height(4095).into())
981+
.at_age(RelLockTime::from_height(4095).unwrap().into())
971982
)
972983
.unwrap());
973984

‎src/primitives/relative_locktime.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ impl RelLockTime {
4848
pub fn to_consensus_u32(self) -> u32 { self.0.to_consensus_u32() }
4949

5050
/// Takes a 16-bit number of blocks and produces a relative locktime from it.
51-
pub fn from_height(height: u16) -> Self { RelLockTime(Sequence::from_height(height)) }
51+
pub fn from_height(height: u16) -> Result<Self, RelLockTimeError> {
52+
convert::TryFrom::try_from(Sequence::from_height(height))
53+
}
5254

5355
/// Takes a 16-bit number of 512-second time intervals and produces a relative locktime from it.
5456
pub fn from_512_second_intervals(time: u16) -> Self {

0 commit comments

Comments
 (0)
Please sign in to comment.