12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import { hexStr2byteArray, byteArray2hexStr } from './code.js';
- import { decodeBase58Address, getBase58CheckAddress, isAddressValid, pkToAddress } from './crypto.js';
- import { isHex, isString } from './validations.js';
- import { keccak256 } from './ethersUtils.js';
- export const ADDRESS_SIZE = 34;
- export const ADDRESS_PREFIX = '41';
- export const ADDRESS_PREFIX_BYTE = 0x41;
- export const ADDRESS_PREFIX_REGEX = /^(41)/;
- export const TRON_BIP39_PATH_PREFIX = "m/44'/195'";
- export const TRON_BIP39_PATH_INDEX_0 = TRON_BIP39_PATH_PREFIX + "/0'/0/0";
- export function fromHex(address) {
- if (!isHex(address))
- return address;
- return getBase58CheckAddress(hexStr2byteArray(address.replace(/^0x/, ADDRESS_PREFIX)));
- }
- export function toHex(address) {
- if (isHex(address))
- return address.toLowerCase().replace(/^0x/, ADDRESS_PREFIX);
- return byteArray2hexStr(decodeBase58Address(address)).toLowerCase();
- }
- function getChecksumAddress(address) {
- address = address.toLowerCase();
- const chars = address.substring(2).split('');
- const expanded = new Uint8Array(40);
- for (let i = 0; i < 40; i++) {
- expanded[i] = chars[i].charCodeAt(0);
- }
- const hashed = hexStr2byteArray(keccak256(expanded).slice(2));
- for (let i = 0; i < 40; i += 2) {
- if ((hashed[i >> 1] >> 4) >= 8) {
- chars[i] = chars[i].toUpperCase();
- }
- if ((hashed[i >> 1] & 0x0f) >= 8) {
- chars[i + 1] = chars[i + 1].toUpperCase();
- }
- }
- return ADDRESS_PREFIX + chars.join('');
- }
- export function toChecksumAddress(address) {
- if (!isAddress(address))
- throw new Error(`'${address}' is not a valid address string`);
- return getChecksumAddress(toHex(address));
- }
- export function isChecksumAddress(address) {
- if (!isHex(address) || address.length !== 42)
- return false;
- try {
- return toChecksumAddress(address) === address;
- }
- catch {
- return false;
- }
- }
- export function fromPrivateKey(privateKey, strict = false) {
- try {
- return pkToAddress(privateKey, strict);
- }
- catch {
- return false;
- }
- }
- export function isAddress(address) {
- if (!address || !isString(address))
- return false;
- // Convert HEX to Base58
- if (address.length === 42) {
- try {
- // it throws an error if the address starts with 0x
- return isAddress(getBase58CheckAddress(hexStr2byteArray(address)));
- }
- catch (err) {
- return false;
- }
- }
- try {
- return isAddressValid(address);
- }
- catch (err) {
- return false;
- }
- }
- //# sourceMappingURL=address.js.map
|