@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
JavaScript
;
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