What changed, and why it matters
This commit only rewrites the abbreviation 'iff' (meaning 'if and only if') to its full phrase in four documentation/comments files. No code logic, APIs, or behavior changed. There is no security relevance.
No action required; this is a documentation-only wording change with no security impact.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff is purely cosmetic: CONTRIBUTING.md and three Rust source files had comments/docstrings containing ‘iff’ replaced with ‘if and only if’. No executable code, type signatures, control flow, or cryptographic operations were modified.
Changed components
Inspect captured patch +5 / −5
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index bf35defc..8e4cb090 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -328,7 +328,7 @@ More specifically an error should
- be `non_exhaustive` unless we _really_ never want to change it.
- have private fields unless we are very confident they won't change.
-- derive `Debug, Clone, PartialEq, Eq` (and `Copy` iff not `non_exhaustive`).
+- derive `Debug, Clone, PartialEq, Eq` (and `Copy` if and only if not `non_exhaustive`).
- implement Display using `write_err!()` macro if a variant contains an inner error source.
- have `Error` suffix on error types (structs and enums).
- not have `Error` suffix on enum variants.
diff --git a/bitcoin/src/blockdata/script/mod.rs b/bitcoin/src/blockdata/script/mod.rs
index 226e9b9a..c427aa34 100644
--- a/bitcoin/src/blockdata/script/mod.rs
+++ b/bitcoin/src/blockdata/script/mod.rs
@@ -11,7 +11,7 @@
//!
//! Scripts define Bitcoin's digital signature scheme: a signature is formed
//! from a script (the second half of which is defined by a coin to be spent,
-//! and the first half provided by the spending transaction), and is valid iff
+//! and the first half provided by the spending transaction), and is valid if and only if
//! the script leaves `TRUE` on the stack after being evaluated. Bitcoin's
//! script is a stack-based assembly language similar in spirit to [Forth].
//!
diff --git a/bitcoin/src/merkle_tree/mod.rs b/bitcoin/src/merkle_tree/mod.rs
index 82801fdd..32eca42e 100644
--- a/bitcoin/src/merkle_tree/mod.rs
+++ b/bitcoin/src/merkle_tree/mod.rs
@@ -51,7 +51,7 @@ pub trait MerkleNode: Copy {
/// Given an iterator of leaves, compute the Merkle root.
///
- /// Returns `None` iff the iterator was empty.
+ /// Returns `None` if and only if the iterator was empty.
fn calculate_root<I: Iterator<Item = Self::Leaf>>(iter: I) -> Option<Self> {
let mut stack = Vec::<(usize, Self)>::with_capacity(32);
// Start with a standard Merkle tree root computation...
diff --git a/bitcoin/src/taproot/mod.rs b/bitcoin/src/taproot/mod.rs
index 5c284ce8..99dc27fb 100644
--- a/bitcoin/src/taproot/mod.rs
+++ b/bitcoin/src/taproot/mod.rs
@@ -794,7 +794,7 @@ impl TryFrom<TaprootBuilder> for TapTree {
///
/// # Returns
///
- /// A [`TapTree`] iff the `builder` is complete, otherwise return [`IncompleteBuilderError`]
+ /// A [`TapTree`] if and only if the `builder` is complete, otherwise return [`IncompleteBuilderError`]
/// error with the content of incomplete `builder` instance.
fn try_from(builder: TaprootBuilder) -> Result<Self, Self::Error> {
builder.try_into_tap_tree()
@@ -808,7 +808,7 @@ impl TryFrom<NodeInfo> for TapTree {
///
/// # Returns
///
- /// A [`TapTree`] iff the [`NodeInfo`] has no hidden nodes, otherwise return
+ /// A [`TapTree`] if and only if the [`NodeInfo`] has no hidden nodes, otherwise return
/// [`HiddenNodesError`] error with the content of incomplete [`NodeInfo`] instance.
fn try_from(node_info: NodeInfo) -> Result<Self, Self::Error> {
if node_info.has_hidden_nodes {
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.