Skip to content

Commit

Permalink
add back hex
Browse files Browse the repository at this point in the history
  • Loading branch information
SWvheerden committed Jun 24, 2024
1 parent 539c5c3 commit 9186c9b
Show file tree
Hide file tree
Showing 5 changed files with 261 additions and 37 deletions.
33 changes: 9 additions & 24 deletions applications/minotari_console_wallet/src/ui/state/app_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
use std::{
collections::{HashMap, VecDeque},
path::PathBuf,
str::FromStr,
sync::Arc,
time::{Duration, Instant},
};
Expand Down Expand Up @@ -61,7 +62,7 @@ use tari_core::transactions::{
weight::TransactionWeight,
};
use tari_shutdown::ShutdownSignal;
use tari_utilities::hex::{from_hex, Hex};
use tari_utilities::hex::Hex;
use tokio::{
sync::{broadcast, watch, RwLock},
task,
Expand Down Expand Up @@ -229,11 +230,7 @@ impl AppState {
pub async fn upsert_contact(&mut self, alias: String, tari_emoji: String) -> Result<(), UiError> {
let mut inner = self.inner.write().await;

let address = match TariAddress::from_emoji_string(&tari_emoji) {
Ok(address) => address,
Err(_) => TariAddress::from_bytes(&from_hex(&tari_emoji).map_err(|_| UiError::PublicKeyParseError)?)
.map_err(|_| UiError::PublicKeyParseError)?,
};
let address = TariAddress::from_str(&tari_emoji).map_err(|_| UiError::PublicKeyParseError)?;

let contact = Contact::new(alias, address, None, None, false);
inner.wallet.contacts_service.upsert_contact(contact).await?;
Expand All @@ -246,26 +243,22 @@ impl AppState {

// Return alias or pub key if the contact is not in the list.
pub fn get_alias(&self, address: &TariAddress) -> String {
let address_hex = address.to_base58();
let address_string = address.to_base58();

match self
.cached_data
.contacts
.iter()
.find(|&contact| contact.address.eq(&address_hex))
.find(|&contact| contact.address.eq(&address_string))
{
Some(contact) => contact.alias.clone(),
None => address_hex,
None => address_string,
}
}

pub async fn delete_contact(&mut self, tari_emoji: String) -> Result<(), UiError> {
let mut inner = self.inner.write().await;
let address = match TariAddress::from_emoji_string(&tari_emoji) {
Ok(address) => address,
Err(_) => TariAddress::from_bytes(&from_hex(&tari_emoji).map_err(|_| UiError::PublicKeyParseError)?)
.map_err(|_| UiError::PublicKeyParseError)?,
};
let address = TariAddress::from_str(&tari_emoji).map_err(|_| UiError::PublicKeyParseError)?;

inner.wallet.contacts_service.remove_contact(address).await?;

Expand Down Expand Up @@ -301,11 +294,7 @@ impl AppState {
result_tx: watch::Sender<UiTransactionSendStatus>,
) -> Result<(), UiError> {
let inner = self.inner.write().await;
let address = match TariAddress::from_emoji_string(&address) {
Ok(address) => address,
Err(_) => TariAddress::from_bytes(&from_hex(&address).map_err(|_| UiError::PublicKeyParseError)?)
.map_err(|_| UiError::PublicKeyParseError)?,
};
let address = TariAddress::from_str(&address).map_err(|_| UiError::PublicKeyParseError)?;

let output_features = OutputFeatures { ..Default::default() };

Expand Down Expand Up @@ -336,11 +325,7 @@ impl AppState {
result_tx: watch::Sender<UiTransactionSendStatus>,
) -> Result<(), UiError> {
let inner = self.inner.write().await;
let address = match TariAddress::from_emoji_string(&address) {
Ok(address) => address,
Err(_) => TariAddress::from_bytes(&from_hex(&address).map_err(|_| UiError::PublicKeyParseError)?)
.map_err(|_| UiError::PublicKeyParseError)?,
};
let address = TariAddress::from_str(&address).map_err(|_| UiError::PublicKeyParseError)?;
let payment_id_u64: u64 = payment_id_hex
.parse::<u64>()
.map_err(|_| UiError::HexError("Could not convert payment_id to bytes".to_string()))?;
Expand Down
55 changes: 55 additions & 0 deletions base_layer/common_types/src/tari_address/dual_address.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ use std::convert::TryFrom;
use serde::{Deserialize, Serialize};
use tari_common::configuration::Network;
use tari_crypto::tari_utilities::ByteArray;
use tari_utilities::hex::{from_hex, Hex};

use crate::{
dammsum::{compute_checksum, validate_checksum},
Expand Down Expand Up @@ -187,6 +188,18 @@ impl DualAddress {
network.push_str(&rest);
network
}

/// Convert Tari dual Address to hex
pub fn to_hex(&self) -> String {
let buf = self.to_bytes();
buf.to_hex()
}

/// Creates Tari dual Address from hex
pub fn from_hex(hex_str: &str) -> Result<DualAddress, TariAddressError> {
let buf = from_hex(hex_str).map_err(|_| TariAddressError::CannotRecoverPublicKey)?;
DualAddress::from_bytes(buf.as_slice())
}
}

#[cfg(test)]
Expand Down Expand Up @@ -296,6 +309,8 @@ mod test {

let buff = address.to_bytes();
let base58 = address.to_base58();
let hex = address.to_hex();
let emoji = address.to_emoji_string();

let address_buff = DualAddress::from_bytes(&buff).unwrap();
assert_eq!(address_buff.public_spend_key(), address.public_spend_key());
Expand All @@ -309,6 +324,18 @@ mod test {
assert_eq!(address_base58.network(), address.network());
assert_eq!(address_base58.features(), address.features());

let address_hex = DualAddress::from_hex(&hex).unwrap();
assert_eq!(address_hex.public_spend_key(), address.public_spend_key());
assert_eq!(address_hex.public_view_key(), address.public_view_key());
assert_eq!(address_hex.network(), address.network());
assert_eq!(address_hex.features(), address.features());

let address_emoji = DualAddress::from_emoji_string(&emoji).unwrap();
assert_eq!(address_emoji.public_spend_key(), address.public_spend_key());
assert_eq!(address_emoji.public_view_key(), address.public_view_key());
assert_eq!(address_emoji.network(), address.network());
assert_eq!(address_emoji.features(), address.features());

let view_key = PublicKey::from_secret_key(&PrivateKey::random(&mut rng));
let spend_key = PublicKey::from_secret_key(&PrivateKey::random(&mut rng));

Expand All @@ -322,6 +349,8 @@ mod test {

let buff = address.to_bytes();
let base58 = address.to_base58();
let hex = address.to_hex();
let emoji = address.to_emoji_string();

let address_buff = DualAddress::from_bytes(&buff).unwrap();
assert_eq!(address_buff.public_spend_key(), address.public_spend_key());
Expand All @@ -335,6 +364,18 @@ mod test {
assert_eq!(address_base58.network(), address.network());
assert_eq!(address_base58.features(), address.features());

let address_hex = DualAddress::from_hex(&hex).unwrap();
assert_eq!(address_hex.public_spend_key(), address.public_spend_key());
assert_eq!(address_hex.public_view_key(), address.public_view_key());
assert_eq!(address_hex.network(), address.network());
assert_eq!(address_hex.features(), address.features());

let address_emoji = DualAddress::from_emoji_string(&emoji).unwrap();
assert_eq!(address_emoji.public_spend_key(), address.public_spend_key());
assert_eq!(address_emoji.public_view_key(), address.public_view_key());
assert_eq!(address_emoji.network(), address.network());
assert_eq!(address_emoji.features(), address.features());

let view_key = PublicKey::from_secret_key(&PrivateKey::random(&mut rng));
let spend_key = PublicKey::from_secret_key(&PrivateKey::random(&mut rng));

Expand All @@ -348,6 +389,8 @@ mod test {

let buff = address.to_bytes();
let base58 = address.to_base58();
let hex = address.to_hex();
let emoji = address.to_emoji_string();

let address_buff = DualAddress::from_bytes(&buff).unwrap();
assert_eq!(address_buff.public_spend_key(), address.public_spend_key());
Expand All @@ -360,6 +403,18 @@ mod test {
assert_eq!(address_base58.public_view_key(), address.public_view_key());
assert_eq!(address_base58.network(), address.network());
assert_eq!(address_base58.features(), address.features());

let address_hex = DualAddress::from_hex(&hex).unwrap();
assert_eq!(address_hex.public_spend_key(), address.public_spend_key());
assert_eq!(address_hex.public_view_key(), address.public_view_key());
assert_eq!(address_hex.network(), address.network());
assert_eq!(address_hex.features(), address.features());

let address_emoji = DualAddress::from_emoji_string(&emoji).unwrap();
assert_eq!(address_emoji.public_spend_key(), address.public_spend_key());
assert_eq!(address_emoji.public_view_key(), address.public_view_key());
assert_eq!(address_emoji.network(), address.network());
assert_eq!(address_emoji.features(), address.features());
}

#[test]
Expand Down
Loading

0 comments on commit 9186c9b

Please sign in to comment.