UNPKG

@okxweb3/coin-stellar

Version:

@ok/coin-stellar is a Stellar SDK for building Web3 wallets and applications. It supports Stellar and PI blockchains, enabling private key management, address generation, transaction signing, trustline creation, and asset transfers

62 lines 2.98 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractBaseAddress = exports.encodeMuxedAccount = exports.encodeMuxedAccountToAddress = exports.decodeAddressToMuxedAccount = void 0; const xdr_1 = __importDefault(require("../xdr")); const strkey_1 = require("../strkey"); function decodeAddressToMuxedAccount(address) { if (strkey_1.StrKey.isValidMed25519PublicKey(address)) { return _decodeAddressFullyToMuxedAccount(address); } return xdr_1.default.MuxedAccount.keyTypeEd25519(strkey_1.StrKey.decodeEd25519PublicKey(address)); } exports.decodeAddressToMuxedAccount = decodeAddressToMuxedAccount; function encodeMuxedAccountToAddress(muxedAccount) { if (muxedAccount.switch().value === xdr_1.default.CryptoKeyType.keyTypeMuxedEd25519().value) { return _encodeMuxedAccountFullyToAddress(muxedAccount); } return strkey_1.StrKey.encodeEd25519PublicKey(muxedAccount.ed25519()); } exports.encodeMuxedAccountToAddress = encodeMuxedAccountToAddress; function encodeMuxedAccount(address, id) { if (!strkey_1.StrKey.isValidEd25519PublicKey(address)) { throw new Error('address should be a Stellar account ID (G...)'); } if (typeof id !== 'string') { throw new Error('id should be a string representing a number (uint64)'); } return xdr_1.default.MuxedAccount.keyTypeMuxedEd25519(new xdr_1.default.MuxedAccountMed25519({ id: xdr_1.default.Uint64.fromString(id), ed25519: strkey_1.StrKey.decodeEd25519PublicKey(address) })); } exports.encodeMuxedAccount = encodeMuxedAccount; function extractBaseAddress(address) { if (strkey_1.StrKey.isValidEd25519PublicKey(address)) { return address; } if (!strkey_1.StrKey.isValidMed25519PublicKey(address)) { throw new TypeError(`expected muxed account (M...), got ${address}`); } const muxedAccount = decodeAddressToMuxedAccount(address); return strkey_1.StrKey.encodeEd25519PublicKey(muxedAccount.med25519().ed25519()); } exports.extractBaseAddress = extractBaseAddress; function _decodeAddressFullyToMuxedAccount(address) { const rawBytes = strkey_1.StrKey.decodeMed25519PublicKey(address); return xdr_1.default.MuxedAccount.keyTypeMuxedEd25519(new xdr_1.default.MuxedAccountMed25519({ id: xdr_1.default.Uint64.fromXDR(rawBytes.subarray(-8)), ed25519: rawBytes.subarray(0, -8) })); } function _encodeMuxedAccountFullyToAddress(muxedAccount) { if (muxedAccount.switch() === xdr_1.default.CryptoKeyType.keyTypeEd25519()) { return encodeMuxedAccountToAddress(muxedAccount); } const muxed = muxedAccount.med25519(); return strkey_1.StrKey.encodeMed25519PublicKey(Buffer.concat([muxed.ed25519(), muxed.id().toXDR('raw')])); } //# sourceMappingURL=decode_encode_muxed_account.js.map