0.7.28 - final
This commit is contained in:
1318
kb_lib/src/dex/meteora_dlmm.rs
Normal file
1318
kb_lib/src/dex/meteora_dlmm.rs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -301,52 +301,10 @@ fn read_bool(data: &[u8], offset: usize) -> std::option::Option<bool> {
|
||||
}
|
||||
|
||||
fn decode_base58(input: &str) -> std::option::Option<std::vec::Vec<u8>> {
|
||||
let alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".as_bytes();
|
||||
let mut bytes: std::vec::Vec<u8> = std::vec::Vec::new();
|
||||
for input_byte in input.bytes() {
|
||||
let mut value_option = None;
|
||||
let mut alphabet_index = 0_usize;
|
||||
while alphabet_index < alphabet.len() {
|
||||
if alphabet[alphabet_index] == input_byte {
|
||||
value_option = Some(alphabet_index as u32);
|
||||
break;
|
||||
}
|
||||
alphabet_index += 1;
|
||||
}
|
||||
let mut carry = match value_option {
|
||||
Some(value) => value,
|
||||
None => return None,
|
||||
};
|
||||
let mut byte_index = bytes.len();
|
||||
while byte_index > 0 {
|
||||
byte_index -= 1;
|
||||
let value = (bytes[byte_index] as u32) * 58 + carry;
|
||||
bytes[byte_index] = (value & 0xff) as u8;
|
||||
carry = value >> 8;
|
||||
}
|
||||
while carry > 0 {
|
||||
bytes.insert(0, (carry & 0xff) as u8);
|
||||
carry >>= 8;
|
||||
}
|
||||
match bs58::decode(input).into_vec() {
|
||||
Ok(decoded) => return Some(decoded),
|
||||
Err(_) => return None,
|
||||
}
|
||||
let mut leading_zero_count = 0_usize;
|
||||
for input_byte in input.bytes() {
|
||||
if input_byte == b'1' {
|
||||
leading_zero_count += 1;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
let mut result = std::vec::Vec::new();
|
||||
let mut index = 0_usize;
|
||||
while index < leading_zero_count {
|
||||
result.push(0_u8);
|
||||
index += 1;
|
||||
}
|
||||
for byte in bytes {
|
||||
result.push(byte);
|
||||
}
|
||||
return Some(result);
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
Reference in New Issue
Block a user