UNPKG

@stellar/stellar-sdk

Version:

A library for working with the Stellar network, including communication with the Horizon and Soroban RPC servers.

64 lines (61 loc) 2.31 kB
import { Buffer } from 'buffer'; import types from '../generated/curr_generated.js'; import { StrKey } from '../strkey.js'; function decodeAddressToMuxedAccount(address) { if (StrKey.isValidMed25519PublicKey(address)) { return _decodeAddressFullyToMuxedAccount(address); } return types.MuxedAccount.keyTypeEd25519( StrKey.decodeEd25519PublicKey(address) ); } function encodeMuxedAccountToAddress(muxedAccount) { if (muxedAccount.switch().value === types.CryptoKeyType.keyTypeMuxedEd25519().value) { return _encodeMuxedAccountFullyToAddress(muxedAccount); } return StrKey.encodeEd25519PublicKey(muxedAccount.ed25519()); } function encodeMuxedAccount(address, id) { if (!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 types.MuxedAccount.keyTypeMuxedEd25519( new types.MuxedAccountMed25519({ id: types.Uint64.fromString(id), ed25519: StrKey.decodeEd25519PublicKey(address) }) ); } function extractBaseAddress(address) { if (StrKey.isValidEd25519PublicKey(address)) { return address; } if (!StrKey.isValidMed25519PublicKey(address)) { throw new TypeError(`expected muxed account (M...), got ${address}`); } const muxedAccount = decodeAddressToMuxedAccount(address); return StrKey.encodeEd25519PublicKey(muxedAccount.med25519().ed25519()); } function _decodeAddressFullyToMuxedAccount(address) { const rawBytes = StrKey.decodeMed25519PublicKey(address); return types.MuxedAccount.keyTypeMuxedEd25519( new types.MuxedAccountMed25519({ id: types.Uint64.fromXDR(rawBytes.subarray(-8)), ed25519: rawBytes.subarray(0, -8) }) ); } function _encodeMuxedAccountFullyToAddress(muxedAccount) { if (muxedAccount.switch() === types.CryptoKeyType.keyTypeEd25519()) { return encodeMuxedAccountToAddress(muxedAccount); } const muxed = muxedAccount.med25519(); return StrKey.encodeMed25519PublicKey( Buffer.concat([muxed.ed25519(), muxed.id().toXDR("raw")]) ); } export { decodeAddressToMuxedAccount, encodeMuxedAccount, encodeMuxedAccountToAddress, extractBaseAddress }; //# sourceMappingURL=decode_encode_muxed_account.js.map