multichain-address-validator
Version:
Multichain address validator for Bitcoin and other blockchains.
36 lines (35 loc) • 1.52 kB
JavaScript
;
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;
}
};