Mina Base58 Address
Version:2B || s: 32B || checksum: 4B 其中 Version 包括:
由于前2B是固定的, 所以 Base58 地址
(0x5a01 << 288) //(58**50) = 772
772 转成 Base58 为 EK
Version: 3B || x: 32B || y: is_odd 1B || checksum: 4B 共40B. 将这 40 B 数据转成 Base58 编码即可. 其中 Version 包括:
checksum 为 dsha256([0..36])[0..4].
代码如下:
fn into_address(x: &BaseField, is_odd: bool) -> String {
let mut raw: Vec<u8> = vec![
0xcb, // version for base58 check
0x01, // non_zero_curve_point version
0x01, // compressed_poly version
];
// pub key x-coordinate
raw.extend(x.to_bytes());
// pub key y-coordinate parity
raw.push(u8::from(is_odd));
// 4-byte checksum
let hash = Sha256::digest(&Sha256::digest(&raw[..])[..]);
raw.extend(&hash[..4]);
// The raw buffer is MINA_ADDRESS_RAW_LEN (= 40) bytes in length
bs58::encode(raw).into_string()
}
由于前3B是固定的, 所以 Base58 地址
(0xcb0101 << 296) //(58**51) = 1968046
1968046 转成 Base58 为 b62q
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!