diff --git a/zcash_client_backend/Cargo.toml b/zcash_client_backend/Cargo.toml
index 562d1a50e..b7dd7b731 100644
--- a/zcash_client_backend/Cargo.toml
+++ b/zcash_client_backend/Cargo.toml
@@ -13,6 +13,7 @@ edition = "2018"
[dependencies]
bech32 = "0.7"
+bs58 = { version = "0.3", features = ["check"] }
ff = { version = "0.6", path = "../ff" }
hex = "0.3"
pairing = { version = "0.16", path = "../pairing" }
diff --git a/zcash_client_backend/src/constants/mainnet.rs b/zcash_client_backend/src/constants/mainnet.rs
index f3f020dc5..db932fa56 100644
--- a/zcash_client_backend/src/constants/mainnet.rs
+++ b/zcash_client_backend/src/constants/mainnet.rs
@@ -28,3 +28,13 @@ pub const HRP_SAPLING_EXTENDED_FULL_VIEWING_KEY: &str = "zxviews";
/// [`PaymentAddress`]: zcash_primitives::primitives::PaymentAddress
/// [Zcash Protocol Specification]: https://github.com/zcash/zips/blob/master/protocol/protocol.pdf
pub const HRP_SAPLING_PAYMENT_ADDRESS: &str = "zs";
+
+/// The prefix for a Base58Check-encoded mainnet [`TransparentAddress::PublicKey`].
+///
+/// [`TransparentAddress::PublicKey`]: zcash_primitives::legacy::TransparentAddress::PublicKey
+pub const B58_PUBKEY_ADDRESS_PREFIX: [u8; 2] = [0x1c, 0xb8];
+
+/// The prefix for a Base58Check-encoded mainnet [`TransparentAddress::Script`].
+///
+/// [`TransparentAddress::Script`]: zcash_primitives::legacy::TransparentAddress::Script
+pub const B58_SCRIPT_ADDRESS_PREFIX: [u8; 2] = [0x1c, 0xbd];
diff --git a/zcash_client_backend/src/constants/testnet.rs b/zcash_client_backend/src/constants/testnet.rs
index 5379d5abd..d39a11d53 100644
--- a/zcash_client_backend/src/constants/testnet.rs
+++ b/zcash_client_backend/src/constants/testnet.rs
@@ -28,3 +28,13 @@ pub const HRP_SAPLING_EXTENDED_FULL_VIEWING_KEY: &str = "zxviewtestsapling";
/// [`PaymentAddress`]: zcash_primitives::primitives::PaymentAddress
/// [Zcash Protocol Specification]: https://github.com/zcash/zips/blob/master/protocol/protocol.pdf
pub const HRP_SAPLING_PAYMENT_ADDRESS: &str = "ztestsapling";
+
+/// The prefix for a Base58Check-encoded testnet [`TransparentAddress::PublicKey`].
+///
+/// [`TransparentAddress::PublicKey`]: zcash_primitives::legacy::TransparentAddress::PublicKey
+pub const B58_PUBKEY_ADDRESS_PREFIX: [u8; 2] = [0x1d, 0x25];
+
+/// The prefix for a Base58Check-encoded testnet [`TransparentAddress::Script`].
+///
+/// [`TransparentAddress::Script`]: zcash_primitives::legacy::TransparentAddress::Script
+pub const B58_SCRIPT_ADDRESS_PREFIX: [u8; 2] = [0x1c, 0xba];
diff --git a/zcash_client_backend/src/encoding.rs b/zcash_client_backend/src/encoding.rs
index ba999126c..91522fd50 100644
--- a/zcash_client_backend/src/encoding.rs
+++ b/zcash_client_backend/src/encoding.rs
@@ -6,9 +6,12 @@
//! [`constants`]: crate::constants
use bech32::{self, Error, FromBase32, ToBase32};
+use bs58::{self, decode::Error as Bs58Error};
use pairing::bls12_381::Bls12;
+use std::convert::TryInto;
use std::io::{self, Write};
use zcash_primitives::{
+ legacy::TransparentAddress,
primitives::PaymentAddress,
zip32::{ExtendedFullViewingKey, ExtendedSpendingKey},
JUBJUB,
@@ -176,6 +179,108 @@ pub fn decode_payment_address(hrp: &str, s: &str) -> Result