UNPKG

@dioxide-js/web3.js

Version:

dioxide javascript API

29 lines (22 loc) 982 B
import base32Decode from 'base32-decode' import base32Encode from 'base32-encode' import crc32c from 'crc-32/crc32c.js' import { concat } from './buffer' export function isValidAddress(addr: string): boolean /* | undefined */ { try { const [addressStr] = addr.split(':') const address = new Uint8Array(base32Decode(addressStr, 'Crockford')) const publicKey = address.slice(0, 32) let errorCorrectingCode = crc32c.buf(publicKey, 3) errorCorrectingCode = (errorCorrectingCode & 0xfffffff0) | 0x3 errorCorrectingCode = errorCorrectingCode >>> 0 const buffer = new Int32Array([errorCorrectingCode]).buffer const errorCorrectingCodeBuffer = new Uint8Array(buffer) const mergedBuffer = concat(publicKey, errorCorrectingCodeBuffer) const encodedMergeBuffer = base32Encode(mergedBuffer, 'Crockford') return encodedMergeBuffer === addressStr.toUpperCase() } catch (error) { console.error('Exception ' + error) return false } }