diff --git a/src/mapper/babbage.rs b/src/mapper/babbage.rs index d34c6812..16b91981 100644 --- a/src/mapper/babbage.rs +++ b/src/mapper/babbage.rs @@ -194,12 +194,10 @@ impl EventWriter { let record = self.to_post_alonzo_output_record(output)?; self.append(record.into())?; + let address = pallas::ledger::addresses::Address::from_bytes(&output.address)?; + let child = &self.child_writer(EventContext { - output_address: self - .utils - .bech32 - .encode_address(output.address.as_slice())? - .into(), + output_address: address.to_string().into(), ..EventContext::default() }); diff --git a/src/mapper/map.rs b/src/mapper/map.rs index 16c9bc2d..b83d62da 100644 --- a/src/mapper/map.rs +++ b/src/mapper/map.rs @@ -168,11 +168,10 @@ impl EventWriter { &self, output: &alonzo::TransactionOutput, ) -> Result { + let address = pallas::ledger::addresses::Address::from_bytes(&output.address)?; + Ok(TxOutputRecord { - address: self - .utils - .bech32 - .encode_address(output.address.as_slice())?, + address: address.to_string(), amount: get_tx_output_coin_value(&output.amount), assets: self.collect_asset_records(&output.amount).into(), datum_hash: output.datum_hash.map(|hash| hash.to_string()), @@ -183,11 +182,10 @@ impl EventWriter { &self, output: &babbage::PostAlonzoTransactionOutput, ) -> Result { + let address = pallas::ledger::addresses::Address::from_bytes(&output.address)?; + Ok(TxOutputRecord { - address: self - .utils - .bech32 - .encode_address(output.address.as_slice())?, + address: address.to_string(), amount: get_tx_output_coin_value(&output.value), assets: self.collect_asset_records(&output.value).into(), datum_hash: match &output.datum_option { diff --git a/src/mapper/shelley.rs b/src/mapper/shelley.rs index 84a42478..57464eb1 100644 --- a/src/mapper/shelley.rs +++ b/src/mapper/shelley.rs @@ -89,12 +89,10 @@ impl EventWriter { let record = self.to_legacy_output_record(output)?; self.append(record.into())?; + let address = pallas::ledger::addresses::Address::from_bytes(&output.address)?; + let child = &self.child_writer(EventContext { - output_address: self - .utils - .bech32 - .encode_address(output.address.as_slice())? - .into(), + output_address: address.to_string().into(), ..EventContext::default() }); diff --git a/src/utils/bech32.rs b/src/utils/bech32.rs deleted file mode 100644 index 30e1bdff..00000000 --- a/src/utils/bech32.rs +++ /dev/null @@ -1,68 +0,0 @@ -//! Bech32 encoding utils -//! -//! Provides artifacts for encoding different values into bech32 format taking -//! into account the context provided via configuration. - -use bech32::{self, ToBase32}; -use serde::Deserialize; - -use super::ChainWellKnownInfo; -use crate::Error; - -#[derive(Clone, Deserialize)] -pub struct Bech32Config { - pub address_hrp: String, -} - -impl Bech32Config { - pub(crate) fn from_well_known(info: &ChainWellKnownInfo) -> Self { - Self { - address_hrp: info.address_hrp.to_owned(), - } - } -} - -impl Default for Bech32Config { - fn default() -> Self { - Self { - address_hrp: "addr".to_string(), - } - } -} - -#[derive(Clone, Default)] -pub struct Bech32Provider(Bech32Config); - -impl Bech32Provider { - pub fn new(config: Bech32Config) -> Self { - Bech32Provider(config) - } - - pub fn encode_address(&self, data: &[u8]) -> Result { - let enc = bech32::encode( - &self.0.address_hrp, - data.to_base32(), - bech32::Variant::Bech32, - )?; - - Ok(enc) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn beach32_encodes_ok() { - let provider = Bech32Provider::new(Bech32Config { - address_hrp: "addr".to_string(), - }); - - let bytes = hex::decode("01ec6ad5daee9febbe300c6160a36d4daf0c5266ae2fe8245cbb581390629814d8165fd547b6f3f6f55842a5f042bcb113e8e86627bc071f37").unwrap(); - - let bech32 = provider.encode_address(bytes.as_slice()).unwrap(); - - assert_eq!(bech32, "addr1q8kx44w6a607h03sp3skpgmdfkhsc5nx4ch7sfzuhdvp8yrznq2ds9jl64rmdulk74vy9f0sg27tzylgapnz00q8rumsuhj834"); - } -} diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 6b67aa14..8d1cbfa7 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -15,13 +15,7 @@ pub const PREVIEW_MAGIC: u64 = 2; use serde::{Deserialize, Serialize}; -use crate::{ - model::Event, - utils::{ - bech32::{Bech32Config, Bech32Provider}, - time::NaiveProvider as NaiveTime, - }, -}; +use crate::{model::Event, utils::time::NaiveProvider as NaiveTime}; use crate::Error; @@ -29,7 +23,6 @@ pub mod cursor; pub mod metrics; pub mod throttle; -pub(crate) mod bech32; pub(crate) mod retry; pub(crate) mod time; @@ -174,7 +167,6 @@ impl Default for ChainWellKnownInfo { pub struct Utils { pub(crate) well_known: ChainWellKnownInfo, pub(crate) time: Option, - pub(crate) bech32: Bech32Provider, pub(crate) cursor: Option, pub(crate) metrics: Option, } @@ -184,7 +176,6 @@ impl Utils { pub fn new(well_known: ChainWellKnownInfo) -> Self { Self { time: NaiveTime::new(well_known.clone()).into(), - bech32: Bech32Provider::new(Bech32Config::from_well_known(&well_known)), well_known, cursor: None, metrics: None,