UNPKG

@stellar/stellar-sdk

Version:

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

71 lines (68 loc) 2.28 kB
import types from './generated/curr_generated.js'; import { StrKey, decodeCheck, encodeCheck } from './strkey.js'; class SignerKey { /** * Decodes a StrKey address into an xdr.SignerKey instance. * * Only ED25519 public keys (G...), pre-auth transactions (T...), hashes * (H...), and signed payloads (P...) can be signer keys. * * @param address - a StrKey-encoded signer address */ static decodeAddress(address) { const vb = StrKey.getVersionByteForPrefix(address); if (vb === void 0) { throw new Error(`invalid signer key type (${vb})`); } const raw = decodeCheck(vb, address); switch (vb) { case "signedPayload": return types.SignerKey.signerKeyTypeEd25519SignedPayload( new types.SignerKeyEd25519SignedPayload({ ed25519: raw.subarray(0, 32), payload: raw.subarray(36, 36 + raw.readUInt32BE(32)) }) ); case "ed25519PublicKey": return types.SignerKey.signerKeyTypeEd25519(raw); case "preAuthTx": return types.SignerKey.signerKeyTypePreAuthTx(raw); case "sha256Hash": return types.SignerKey.signerKeyTypeHashX(raw); default: throw new Error(`invalid signer key type (${vb})`); } } /** * Encodes a signer key into its StrKey equivalent. * * @param signerKey - the signer */ static encodeSignerKey(signerKey) { let strkeyType; let raw; switch (signerKey.switch()) { case types.SignerKeyType.signerKeyTypeEd25519(): strkeyType = "ed25519PublicKey"; raw = signerKey.value(); break; case types.SignerKeyType.signerKeyTypePreAuthTx(): strkeyType = "preAuthTx"; raw = signerKey.value(); break; case types.SignerKeyType.signerKeyTypeHashX(): strkeyType = "sha256Hash"; raw = signerKey.value(); break; case types.SignerKeyType.signerKeyTypeEd25519SignedPayload(): strkeyType = "signedPayload"; raw = signerKey.ed25519SignedPayload().toXDR("raw"); break; default: throw new Error(`invalid SignerKey (type: ${signerKey.switch().name})`); } return encodeCheck(strkeyType, raw); } } export { SignerKey }; //# sourceMappingURL=signerkey.js.map