tronewb
Version:
JavaScript SDK that encapsulates the TRON HTTP API
91 lines • 3.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TRON_BIP39_PATH_INDEX_0 = exports.TRON_BIP39_PATH_PREFIX = exports.ADDRESS_PREFIX_REGEX = exports.ADDRESS_PREFIX_BYTE = exports.ADDRESS_PREFIX = exports.ADDRESS_SIZE = void 0;
exports.fromHex = fromHex;
exports.toHex = toHex;
exports.toChecksumAddress = toChecksumAddress;
exports.isChecksumAddress = isChecksumAddress;
exports.fromPrivateKey = fromPrivateKey;
exports.isAddress = isAddress;
const code_js_1 = require("./code.js");
const crypto_js_1 = require("./crypto.js");
const validations_js_1 = require("./validations.js");
const ethersUtils_js_1 = require("./ethersUtils.js");
exports.ADDRESS_SIZE = 34;
exports.ADDRESS_PREFIX = '41';
exports.ADDRESS_PREFIX_BYTE = 0x41;
exports.ADDRESS_PREFIX_REGEX = /^(41)/;
exports.TRON_BIP39_PATH_PREFIX = "m/44'/195'";
exports.TRON_BIP39_PATH_INDEX_0 = exports.TRON_BIP39_PATH_PREFIX + "/0'/0/0";
function fromHex(address) {
if (!(0, validations_js_1.isHex)(address))
return address;
return (0, crypto_js_1.getBase58CheckAddress)((0, code_js_1.hexStr2byteArray)(address.replace(/^0x/, exports.ADDRESS_PREFIX)));
}
function toHex(address) {
if ((0, validations_js_1.isHex)(address))
return address.toLowerCase().replace(/^0x/, exports.ADDRESS_PREFIX);
return (0, code_js_1.byteArray2hexStr)((0, crypto_js_1.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 = (0, code_js_1.hexStr2byteArray)((0, ethersUtils_js_1.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 exports.ADDRESS_PREFIX + chars.join('');
}
function toChecksumAddress(address) {
if (!isAddress(address))
throw new Error(`'${address}' is not a valid address string`);
return getChecksumAddress(toHex(address));
}
function isChecksumAddress(address) {
if (!(0, validations_js_1.isHex)(address) || address.length !== 42)
return false;
try {
return toChecksumAddress(address) === address;
}
catch {
return false;
}
}
function fromPrivateKey(privateKey, strict = false) {
try {
return (0, crypto_js_1.pkToAddress)(privateKey, strict);
}
catch {
return false;
}
}
function isAddress(address) {
if (!address || !(0, validations_js_1.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((0, crypto_js_1.getBase58CheckAddress)((0, code_js_1.hexStr2byteArray)(address)));
}
catch (err) {
return false;
}
}
try {
return (0, crypto_js_1.isAddressValid)(address);
}
catch (err) {
return false;
}
}
//# sourceMappingURL=address.js.map