Skip to main content

Module 0xb::crypto

use 0x2::ecdsa_k1;
use 0x2::hash;

Function ecdsa_pub_key_to_eth_address

public(friend) fun ecdsa_pub_key_to_eth_address(compressed_pub_key: &vector<u8>): vector<u8>
Click to open
Implementation
public(package) fun ecdsa_pub_key_to_eth_address(compressed_pub_key: &vector<u8>): vector<u8> {
    // Decompress pub key
    let decompressed = ecdsa_k1::decompress_pubkey(compressed_pub_key);

    // Skip the first byte
    let (mut i, mut decompressed_64) = (1, vector[]);
    while (i < 65) {
        decompressed_64.push_back(decompressed[i]);
        i = i + 1;
    };

    // Hash
    let hash = keccak256(&decompressed_64);

    // Take last 20 bytes
    let mut address = vector[];
    let mut i = 12;
    while (i < 32) {
        address.push_back(hash[i]);
        i = i + 1;
    };
    address
}