Skip to content

Commit 073d2f4

Browse files
authored
Merge pull request #6409 from obycode/feat/principal-methods
feat: add `is_mainnet` and `is_multisig` to `StandardPrincipalData`
2 parents 10f96e0 + d4adb4e commit 073d2f4

File tree

1 file changed

+60
-1
lines changed

1 file changed

+60
-1
lines changed

clarity/src/vm/types/mod.rs

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,10 @@ pub use self::std_principals::StandardPrincipalData;
7171
mod std_principals {
7272
use std::fmt;
7373

74-
use stacks_common::address::c32;
74+
use stacks_common::address::{
75+
c32, C32_ADDRESS_VERSION_MAINNET_MULTISIG, C32_ADDRESS_VERSION_MAINNET_SINGLESIG,
76+
C32_ADDRESS_VERSION_TESTNET_MULTISIG,
77+
};
7578

7679
use crate::vm::errors::InterpreterError;
7780

@@ -118,6 +121,16 @@ mod std_principals {
118121
let Self(version, bytes) = self;
119122
(version, bytes)
120123
}
124+
125+
pub fn is_mainnet(self) -> bool {
126+
self.0 == C32_ADDRESS_VERSION_MAINNET_MULTISIG
127+
|| self.0 == C32_ADDRESS_VERSION_MAINNET_SINGLESIG
128+
}
129+
130+
pub fn is_multisig(self) -> bool {
131+
self.0 == C32_ADDRESS_VERSION_MAINNET_MULTISIG
132+
|| self.0 == C32_ADDRESS_VERSION_TESTNET_MULTISIG
133+
}
121134
}
122135

123136
impl fmt::Display for StandardPrincipalData {
@@ -1863,4 +1876,50 @@ mod test {
18631876
}));
18641877
let _ = buff.expect_buff(4).unwrap();
18651878
}
1879+
1880+
#[test]
1881+
fn principal_is_mainnet() {
1882+
let principal =
1883+
PrincipalData::parse_standard_principal("SPXACZ2NS34QHWCMAK1V2QJK0XB6WM6N5AB7RWYB")
1884+
.unwrap();
1885+
assert!(principal.is_mainnet());
1886+
1887+
let principal =
1888+
PrincipalData::parse_standard_principal("SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4")
1889+
.unwrap();
1890+
assert!(principal.is_mainnet());
1891+
1892+
let principal =
1893+
PrincipalData::parse_standard_principal("ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM")
1894+
.unwrap();
1895+
assert!(!principal.is_mainnet());
1896+
1897+
let principal =
1898+
PrincipalData::parse_standard_principal("SNBPC7AHXCBAQSW6RKGEXVG119H2933ZYR63HD32")
1899+
.unwrap();
1900+
assert!(!principal.is_mainnet());
1901+
}
1902+
1903+
#[test]
1904+
fn principal_is_multisig() {
1905+
let principal =
1906+
PrincipalData::parse_standard_principal("SPXACZ2NS34QHWCMAK1V2QJK0XB6WM6N5AB7RWYB")
1907+
.unwrap();
1908+
assert!(!principal.is_multisig());
1909+
1910+
let principal =
1911+
PrincipalData::parse_standard_principal("SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4")
1912+
.unwrap();
1913+
assert!(principal.is_multisig());
1914+
1915+
let principal =
1916+
PrincipalData::parse_standard_principal("ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM")
1917+
.unwrap();
1918+
assert!(!principal.is_multisig());
1919+
1920+
let principal =
1921+
PrincipalData::parse_standard_principal("SNBPC7AHXCBAQSW6RKGEXVG119H2933ZYR63HD32")
1922+
.unwrap();
1923+
assert!(principal.is_multisig());
1924+
}
18661925
}

0 commit comments

Comments
 (0)