UNPKG

chaingate

Version:

A complete TypeScript library for connecting to and making transactions on different blockchains

76 lines 3.34 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BitcoinCashUtils = void 0; const UtxoCurrencyUtils_1 = require("../abstract/UtxoCurrencyUtils/UtxoCurrencyUtils"); const CurrencyInfo_1 = require("../../CurrencyInfo"); const PublicKey_1 = require("../../../Wallet/entities/PublicKey"); const bitcore_lib_cash_1 = __importDefault(require("bitcore-lib-cash")); const Utils_1 = require("../../../InternalUtils/Utils"); const bchaddrjs_1 = require("bchaddrjs"); const MessageSigner_1 = require("../../CurrencyWallet/abstract/UtxoWallet/MessageSigner"); const sha256_1 = require("@noble/hashes/sha256"); const base_1 = require("@scure/base"); class BitcoinCashUtils extends UtxoCurrencyUtils_1.UtxoCurrencyUtils { constructor(client, markets) { super(client, CurrencyInfo_1.BitcoinCashInfo, markets, 'bitcoincash', { bech32: 'bitcoincash', // HRP usado en direcciones CashAddr pubKeyHash: 0x00, scriptHash: 0x05, wif: 0x80, }, '\x18Bitcoin Signed Message:\n'); } identifyAddressType(address) { const base58check = (0, base_1.createBase58check)(sha256_1.sha256); // Detect CashAddr format if (/^(bitcoincash:|bchtest:)?([qp])[0-9a-z]{41}$/i.test(address)) { return 'cashaddr'; } // Try to decode as base58check try { const [version] = base58check.decode(address); if ([0, 5].includes(version)) return 'legacy'; if ([28, 40].includes(version)) return 'bitpay'; } catch { return 'unknown'; } return 'unknown'; } publicKeyToAddress(publicKey, addressType = 'cashaddr') { const publicKeyBch = new bitcore_lib_cash_1.default.PublicKey((0, Utils_1.bytesToHex)(publicKey.raw, false)); const bchAddr = bitcore_lib_cash_1.default.Address.fromPublicKey(publicKeyBch, bitcore_lib_cash_1.default.Networks.mainnet).toCashAddress(); switch (addressType) { case 'legacy': return (0, bchaddrjs_1.toLegacyAddress)(bchAddr); case 'cashaddr': return bchAddr; case 'bitpay': return (0, bchaddrjs_1.toCashAddress)(bchAddr); } } signMessage(message, privateKey) { return (0, MessageSigner_1.signMessage)(message, privateKey, this.signHeader); } async verifySignedMessage(message, signature, address) { const publicKeyRaw = await (0, MessageSigner_1.getSignedMessagePublicKey)(message, signature, this.signHeader); const publicKey = new PublicKey_1.PublicKey(publicKeyRaw); const addressType = this.identifyAddressType(address); const supportedTypes = ['legacy', 'cashaddr', 'bitpay']; if (!supportedTypes.includes(addressType)) return false; try { const derivedAddress = this.publicKeyToAddress(publicKey, addressType); return derivedAddress === address; } catch { return false; } } } exports.BitcoinCashUtils = BitcoinCashUtils; //# sourceMappingURL=BitcoinCashUtils.js.map