chaingate
Version:
A complete TypeScript library for connecting to and making transactions on different blockchains
76 lines • 3.34 kB
JavaScript
;
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