Sha256: 05ecb78753ab55193b62225dd115fa4d3a07be4040faa3408443a5c7f1fe53c1

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

import { keccak, blake2b, base58Encode, base16Decode } from '@waves/ts-lib-crypto';
const validateEthAddress = (addr) => {
    return addr != null && addr.length == 42;
};
export default function ethAddress2waves(ethAddress, chainId) {
    if (validateEthAddress(ethAddress)) {
        ethAddress = ethAddress.substr(2);
    }
    else {
        throw `Invalid ethereum address: ${ethAddress} `;
    }
    const prefixBytes = new Uint8Array([0x01, chainId]);
    // Раскодировать HEX строку в байты (PK_HASH)
    const pkHashBytes = base16Decode(ethAddress);
    // Сделать чексумму CHECKSUM=keccak256(blake2b256([0x01, CHAIN_ID] + PK_HASH))
    const checksumBytes = new Uint8Array([
        ...prefixBytes,
        ...pkHashBytes
    ]);
    const checksum = keccak(blake2b(checksumBytes));
    // склеить [0x01, CHAIN_ID] (два байта) + PK_HASH (изначальные 20 байт) + CHECKSUM[1:4] (первые четыре байта чексуммы)
    const wavesBytes = new Uint8Array([
        ...prefixBytes,
        ...pkHashBytes.slice(0, 20),
        ...checksum.slice(0, 4)
    ]);
    // закодировать в base58
    const wavesAddress = base58Encode(wavesBytes);
    return wavesAddress;
}
//# sourceMappingURL=ethAddress2waves.js.map

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
waves_lib-0.1.0 js/node_modules/@waves/node-api-js/es/tools/adresses/ethAddress2waves.js