make bip21 schema lowercase

The spec RFC3986 specifies the scheme is case insensitive and we were uppercasing
to optimize QR code representation.
Unfortunately, common platform such as Android seems to fail to recognize
uppercase schema, so for compatibility reason we use lowercase.
This commit is contained in:
Riccardo Casatta 2023-05-10 19:19:34 +02:00
parent 4fc6a6a145
commit 8835d5d2f1
No known key found for this signature in database
GPG Key ID: FD986A969E450397
1 changed files with 4 additions and 8 deletions

View File

@ -955,8 +955,8 @@ impl Address {
/// Creates a URI string *bitcoin:address* optimized to be encoded in QR codes. /// Creates a URI string *bitcoin:address* optimized to be encoded in QR codes.
/// ///
/// If the address is bech32, both the schema and the address become uppercase. /// If the address is bech32, the address becomes uppercase.
/// If the address is base58, the schema is lowercase and the address is left mixed case. /// If the address is base58, the address is left mixed case.
/// ///
/// Quoting BIP 173 "inside QR codes uppercase SHOULD be used, as those permit the use of /// Quoting BIP 173 "inside QR codes uppercase SHOULD be used, as those permit the use of
/// alphanumeric mode, which is 45% more compact than the normal byte mode." /// alphanumeric mode, which is 45% more compact than the normal byte mode."
@ -981,11 +981,7 @@ impl Address {
/// # assert_eq!(writer, ADDRESS); /// # assert_eq!(writer, ADDRESS);
/// ``` /// ```
pub fn to_qr_uri(&self) -> String { pub fn to_qr_uri(&self) -> String {
let schema = match self.payload() { format!("bitcoin:{:#}", self)
Payload::WitnessProgram { .. } => "BITCOIN",
_ => "bitcoin",
};
format!("{}:{:#}", schema, self)
} }
/// Returns true if the given pubkey is directly related to the address payload. /// Returns true if the given pubkey is directly related to the address payload.
@ -1604,7 +1600,7 @@ mod tests {
.iter() .iter()
{ {
let addr = Address::from_str(el).unwrap().assume_checked(); let addr = Address::from_str(el).unwrap().assume_checked();
assert_eq!(addr.to_qr_uri(), format!("BITCOIN:{}", el.to_ascii_uppercase())); assert_eq!(addr.to_qr_uri(), format!("bitcoin:{}", el.to_ascii_uppercase()));
} }
} }