|
|
@@ -1,5 +1,7 @@
|
|
|
+use group::ff::PrimeField;
|
|
|
+
|
|
|
use super::types::DrkTokenId;
|
|
|
-use crate::{util::NetworkName, Result};
|
|
|
+use crate::{util::NetworkName, Error, Result};
|
|
|
|
|
|
pub fn generate_id(network: &NetworkName, token_str: &str) -> Result<DrkTokenId> {
|
|
|
let mut net_bytes: Vec<u8> = network.to_string().as_bytes().to_vec();
|
|
|
@@ -20,3 +22,18 @@ pub fn generate_id(network: &NetworkName, token_str: &str) -> Result<DrkTokenId>
|
|
|
|
|
|
Ok(DrkTokenId::from(u64::from_le_bytes(data)))
|
|
|
}
|
|
|
+
|
|
|
+/// Parse a `DrkTokenId` from a base58-encoded string
|
|
|
+pub fn parse_b58(s: &str) -> Result<DrkTokenId> {
|
|
|
+ let bytes = bs58::decode(s).into_vec()?;
|
|
|
+ if bytes.len() != 32 {
|
|
|
+ return Err(Error::ParseFailed("Failed parsing DrkTokenId from base58 string"))
|
|
|
+ }
|
|
|
+
|
|
|
+ let ret = DrkTokenId::from_repr(bytes.try_into().unwrap());
|
|
|
+ if ret.is_some().unwrap_u8() == 1 {
|
|
|
+ return Ok(ret.unwrap())
|
|
|
+ }
|
|
|
+
|
|
|
+ Err(Error::ParseFailed("Failed parsing DrkTokenId from base58 string"))
|
|
|
+}
|