UNPKG

multichain-address-validator

Version:

Multichain address validator for Bitcoin and other blockchains.

36 lines (35 loc) 1.52 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const base_x_1 = __importDefault(require("base-x")); const utils_js_1 = __importDefault(require("../crypto/utils.js")); const helpers_js_1 = require("../helpers.js"); const ALLOWED_CHARS = 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'; const codec = (0, base_x_1.default)(ALLOWED_CHARS); const regexp = new RegExp('^r[' + ALLOWED_CHARS + ']{27,35}$'); exports.default = { /** * ripple address validation */ isValidAddress: function (address) { const addr = (0, helpers_js_1.getAddress)(address); const memo = (0, helpers_js_1.getMemo)(address); const validAddress = regexp.test(addr) && this.verifyChecksum(addr); return validAddress && this.verifyMemo(memo); }, verifyMemo(memo) { if (!memo) return true; // Optional const memoNumber = Number(memo); // A memo is a 32-bit unsigned integer. return /^[0-9]+$/.test(memo) && memoNumber >= 0 && memoNumber <= 4294967295; }, verifyChecksum(address) { const bytes = codec.decode(address); const computedChecksum = utils_js_1.default.sha256Checksum(utils_js_1.default.toHex(bytes.slice(0, -4))); const checksum = utils_js_1.default.toHex(bytes.slice(-4)); return computedChecksum === checksum; } };