UNPKG

cipher-ethereum

Version:

An Ethereum library used by Cipher Browser, a mobile Ethereum client

86 lines (80 loc) 2.72 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Address = undefined; var _js = require('keccak/js'); var _js2 = _interopRequireDefault(_js); var _util = require('./util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Address = /** @class */function () { function Address(publicKey) { this._publicKey = (0, _util.decompressPublicKey)(publicKey); } Address.from = function (publicKey) { return new Address(publicKey); }; Address.checksumAddress = function (address) { var addrLowerCase = address.toLowerCase(); if (!Address.isValid(addrLowerCase)) { throw new Error('invalid address'); } var addr = addrLowerCase.startsWith('0x') ? addrLowerCase.slice(2) : addrLowerCase; var hash = (0, _js2.default)('keccak256').update(addr, 'ascii').digest('hex'); var newAddr = '0x'; for (var i = 0; i < addr.length; i++) { if (hash[i] >= '8') { newAddr += addr[i].toUpperCase(); } else { newAddr += addr[i]; } } return newAddr; }; Address.isValid = function (address) { var addr = address.match(/^0[xX]/) ? address.slice(2) : address; if (addr.length !== 40) { return false; } if (addr.match(/[0-9a-f]{40}/) || addr.match(/[0-9A-F]{40}/)) { return true; } var checksumAddress; try { checksumAddress = Address.checksumAddress(addr); } catch (_err) { return false; } return addr === checksumAddress.slice(2); }; Object.defineProperty(Address.prototype, "publicKey", { get: function () { return this._publicKey; }, enumerable: false, configurable: true }); Object.defineProperty(Address.prototype, "rawAddress", { get: function () { if (!this._rawAddress) { this._rawAddress = (0, _js2.default)('keccak256').update(this._publicKey.slice(1)).digest().slice(-20); } return this._rawAddress; }, enumerable: false, configurable: true }); Object.defineProperty(Address.prototype, "address", { get: function () { if (!this._address) { var rawAddress = this.rawAddress.toString('hex'); this._address = Address.checksumAddress(rawAddress); } return this._address; }, enumerable: false, configurable: true }); return Address; }(); exports.Address = Address;