Mina Learning - Base58 Address

  • longerd
  • 发布于 4天前
  • 阅读 34

Mina Base58 Address

SecretKey

Version:2B || s: 32B || checksum: 4B 其中 Version 包括:

  • 0x5a, // version for base58 check
  • 0x01, // scalar version

由于前2B是固定的, 所以 Base58 地址

(0x5a01 << 288) //(58**50) = 772

772 转成 Base58 为 EK

PublicKey

Version: 3B || x: 32B || y: is_odd 1B || checksum: 4B 共40B. 将这 40 B 数据转成 Base58 编码即可. 其中 Version 包括:

  • 0xcb, // version for base58 check
  • 0x01, // non_zero_curve_point version
  • 0x01, // compressed_poly version

checksum 为 dsha256([0..36])[0..4].

代码如下:

fn into_address(x: &BaseField, is_odd: bool) -> String {
    let mut raw: Vec&lt;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

Ref

  • 原创
  • 学分: 1
  • 分类: 公链
  • 标签:
点赞 1
收藏 0
分享

0 条评论

请先 登录 后评论
longerd
longerd
code longer