multiversx_sdk/
bech32.rs

1//! Duplicated between sdk and scnearios.
2//!
3//! TODO: de-duplicate, place in chain core crate, if possible.
4
5use bech32::{Bech32, Hrp};
6use multiversx_chain_core::types::Address;
7
8pub fn decode(bech32_address: &str) -> Address {
9    let (_hrp, dest_address_bytes) = bech32::decode(bech32_address)
10        .unwrap_or_else(|err| panic!("bech32 decode error for {bech32_address}: {err}"));
11    if dest_address_bytes.len() != 32 {
12        panic!("Invalid address length after decoding")
13    }
14
15    Address::from_slice(&dest_address_bytes)
16}
17
18pub fn encode(address: &Address) -> String {
19    let hrp = Hrp::parse("erd").expect("invalid hrp");
20    bech32::encode::<Bech32>(hrp, address.as_bytes()).expect("bech32 encode error")
21}