Skip to content

Commit 5b5d4fe

Browse files
committed
feat(pactus): support validator string for testnet
1 parent 63e4521 commit 5b5d4fe

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

rust/chains/tw_pactus/src/types/address.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ impl fmt::Display for Address {
113113
return f.write_str(TREASURY_ADDRESS_STRING);
114114
}
115115

116-
let hrp = self.network.hrp().map_err(|_| fmt::Error)?;
116+
let hrp = self.network.address_hrp().map_err(|_| fmt::Error)?;
117117
let mut b32 = Vec::with_capacity(33);
118118

119119
b32.push(bech32::u5::try_from_u8(self.addr_type.clone() as u8).map_err(|_| fmt::Error)?);

rust/chains/tw_pactus/src/types/network.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ pub enum Network {
3434
const MAINNET_ADDRESS_HRP: &str = "pc";
3535
const TESTNET_ADDRESS_HRP: &str = "tpc";
3636

37+
pub const MAINNET_PUBLIC_KEY_HRP: &str = "public";
38+
pub const TESTNET_PUBLIC_KEY_HRP: &str = "tpublic";
39+
3740
impl Network {
3841
pub fn try_from_hrp(hrp: &str) -> Result<Self, AddressError> {
3942
match hrp {
@@ -43,11 +46,19 @@ impl Network {
4346
}
4447
}
4548

46-
pub fn hrp(&self) -> Result<&'static str, AddressError> {
49+
pub fn address_hrp(&self) -> Result<&'static str, AddressError> {
4750
match &self {
4851
Network::Mainnet => Ok(MAINNET_ADDRESS_HRP),
4952
Network::Testnet => Ok(TESTNET_ADDRESS_HRP),
5053
Network::Unknown => Err(AddressError::InvalidHrp),
5154
}
5255
}
56+
57+
pub fn public_key_hrp(&self) -> Result<&'static str, AddressError> {
58+
match &self {
59+
Network::Mainnet => Ok(MAINNET_PUBLIC_KEY_HRP),
60+
Network::Testnet => Ok(TESTNET_PUBLIC_KEY_HRP),
61+
Network::Unknown => Err(AddressError::InvalidHrp),
62+
}
63+
}
5364
}

rust/chains/tw_pactus/src/types/validator_public_key.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ use bech32::FromBase32;
55
use std::str::FromStr;
66
use tw_keypair::KeyPairError;
77

8+
use super::network::{MAINNET_PUBLIC_KEY_HRP, TESTNET_PUBLIC_KEY_HRP};
9+
810
pub const BLS_PUBLIC_KEY_SIZE: usize = 96;
9-
pub const PUBLIC_KEY_HRP: &str = "public";
1011

1112
#[derive(Debug)]
1213
pub struct ValidatorPublicKey(pub [u8; BLS_PUBLIC_KEY_SIZE]);
@@ -34,7 +35,7 @@ impl FromStr for ValidatorPublicKey {
3435

3536
fn from_str(s: &str) -> Result<Self, KeyPairError> {
3637
let (hrp, b32, _variant) = bech32::decode(s).map_err(|_| KeyPairError::InvalidPublicKey)?;
37-
if hrp != PUBLIC_KEY_HRP {
38+
if hrp != MAINNET_PUBLIC_KEY_HRP && hrp != TESTNET_PUBLIC_KEY_HRP {
3839
return Err(KeyPairError::InvalidPublicKey);
3940
}
4041

@@ -83,6 +84,11 @@ mod test {
8384
pub_key_str: "public1p4u8hfytl2pj6l9rj0t54gxcdmna4hq52ncqkkqjf3arha5mlk3x4mzpyjkhmdl20jae7f65aamjrvqcvf4sudcapz52ctcwc8r9wz3z2gwxs38880cgvfy49ta5ssyjut05myd4zgmjqstggmetyuyg7v5jhx47a",
8485
pub_key_data: "af0f74917f5065af94727ae9541b0ddcfb5b828a9e016b02498f477ed37fb44d5d882495afb6fd4f9773e4ea9deee436030c4d61c6e3a1151585e1d838cae1444a438d089ce77e10c492a55f6908125c5be9b236a246e4082d08de564e111e65",
8586
},
87+
TestCase {
88+
name: "OK",
89+
pub_key_str: "tpublic1p4u8hfytl2pj6l9rj0t54gxcdmna4hq52ncqkkqjf3arha5mlk3x4mzpyjkhmdl20jae7f65aamjrvqcvf4sudcapz52ctcwc8r9wz3z2gwxs38880cgvfy49ta5ssyjut05myd4zgmjqstggmetyuyg7v5fmv7tx",
90+
pub_key_data: "af0f74917f5065af94727ae9541b0ddcfb5b828a9e016b02498f477ed37fb44d5d882495afb6fd4f9773e4ea9deee436030c4d61c6e3a1151585e1d838cae1444a438d089ce77e10c492a55f6908125c5be9b236a246e4082d08de564e111e65",
91+
},
8692
];
8793

8894
for case in test_cases {

0 commit comments

Comments
 (0)