Merge rust-bitcoin/rust-bitcoin#3943: Add `µBTC` as a recognized `str` form of a MicroBitcoin Denomination

4dcdf73cfa Add `µBTC` and `µbtc` to tests (Jamil Lambert, PhD)
afba28e188 Change `uBTC` to `µBTC` in rustdocs (Jamil Lambert, PhD)
2ca24f00f2 Add `µBTC` as a recognized `str` form of `uBTC` (Jamil Lambert, PhD)

Pull request description:

  `µ` is the correct letter for the SI unit micro but is not on most standard keyboards.  `u` was used instead because it looks similar.

  Add `µBTC` to the list of recognized strings for MicroBitcoin.  This is an addition only, `uBTC` still works as normal.

  Change `uBTC` to `µBTC` in the rustdocs.  The examples have been left as `uBTC` since this is easier for most people to use.

  Add `µBTC` and `µbtc` to the tests.

  Close #3941

ACKs for top commit:
  apoelstra:
    ACK 4dcdf73cfa896b2c095cda9064c6e0a0e9aeec2b; successfully ran local tests
  storopoli:
    ACK 4dcdf73cfa
  tcharding:
    ACK 4dcdf73cfa

Tree-SHA512: 0f6e8b8b9c04f1a4dc6536c0420b2ded568ab96d2301b7d488807cb26003b91a787a6cf9023705c731682580f73ae5247f3f3b1e8646e4eb720c5a65da582933
This commit is contained in:
merge-script 2025-01-23 03:44:59 +00:00
commit 67f3d498af
No known key found for this signature in database
GPG Key ID: C588D63CE41B97C1
2 changed files with 8 additions and 6 deletions

View File

@ -42,7 +42,7 @@ pub use self::{
/// ///
/// # Accepted Denominations /// # Accepted Denominations
/// ///
/// All upper or lower case, excluding SI prefix (c, m, u) which must be lower case. /// All upper or lower case, excluding SI prefixes c, m and u (or µ) which must be lower case.
/// - Singular: BTC, cBTC, mBTC, uBTC /// - Singular: BTC, cBTC, mBTC, uBTC
/// - Plural or singular: sat, satoshi, bit /// - Plural or singular: sat, satoshi, bit
/// ///
@ -67,6 +67,7 @@ pub use self::{
/// ``` /// ```
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
#[non_exhaustive] #[non_exhaustive]
#[allow(clippy::doc_markdown)]
pub enum Denomination { pub enum Denomination {
/// BTC (1 BTC = 100,000,000 satoshi). /// BTC (1 BTC = 100,000,000 satoshi).
Bitcoin, Bitcoin,
@ -74,9 +75,9 @@ pub enum Denomination {
CentiBitcoin, CentiBitcoin,
/// mBTC (1 mBTC = 100,000 satoshi). /// mBTC (1 mBTC = 100,000 satoshi).
MilliBitcoin, MilliBitcoin,
/// uBTC (1 uBTC = 100 satoshi). /// µBTC (1 µBTC = 100 satoshi).
MicroBitcoin, MicroBitcoin,
/// bits (bits = uBTC). /// bits (bits = µBTC).
Bit, Bit,
/// satoshi (1 BTC = 100,000,000 satoshi). /// satoshi (1 BTC = 100,000,000 satoshi).
Satoshi, Satoshi,
@ -119,7 +120,7 @@ impl Denomination {
"BTC" | "btc" => Some(Denomination::Bitcoin), "BTC" | "btc" => Some(Denomination::Bitcoin),
"cBTC" | "cbtc" => Some(Denomination::CentiBitcoin), "cBTC" | "cbtc" => Some(Denomination::CentiBitcoin),
"mBTC" | "mbtc" => Some(Denomination::MilliBitcoin), "mBTC" | "mbtc" => Some(Denomination::MilliBitcoin),
"uBTC" | "ubtc" => Some(Denomination::MicroBitcoin), "uBTC" | "ubtc" | "µBTC" | "µbtc" => Some(Denomination::MicroBitcoin),
"bit" | "bits" | "BIT" | "BITS" => Some(Denomination::Bit), "bit" | "bits" | "BIT" | "BITS" => Some(Denomination::Bit),
"SATOSHI" | "satoshi" | "SATOSHIS" | "satoshis" | "SAT" | "sat" | "SATS" | "sats" => "SATOSHI" | "satoshi" | "SATOSHIS" | "satoshis" | "SAT" | "sat" | "SATS" | "sats" =>
Some(Denomination::Satoshi), Some(Denomination::Satoshi),

View File

@ -1057,8 +1057,9 @@ fn checked_sum_amounts() {
fn denomination_string_acceptable_forms() { fn denomination_string_acceptable_forms() {
// Exhaustive list of valid forms. // Exhaustive list of valid forms.
let valid = [ let valid = [
"BTC", "btc", "cBTC", "cbtc", "mBTC", "mbtc", "uBTC", "ubtc", "bit", "bits", "BIT", "BITS", "BTC", "btc", "cBTC", "cbtc", "mBTC", "mbtc", "uBTC", "ubtc", "µBTC", "µbtc", "bit",
"SATOSHI", "satoshi", "SATOSHIS", "satoshis", "SAT", "sat", "SATS", "sats", "bits", "BIT", "BITS", "SATOSHI", "satoshi", "SATOSHIS", "satoshis", "SAT", "sat", "SATS",
"sats",
]; ];
for denom in valid { for denom in valid {
assert!(denom.parse::<Denomination>().is_ok()); assert!(denom.parse::<Denomination>().is_ok());