UNPKG

@gear-js/api

Version:

A JavaScript library that provides functionality to connect GEAR Component APIs.

82 lines (79 loc) 3.01 kB
import { isString, isU8a, hexToU8a, u8aToHex, stringToU8a } from '@polkadot/util'; import { mnemonicGenerate, mnemonicToMiniSecret } from '@polkadot/util-crypto'; import { Keyring } from '@polkadot/api'; import { waitReady } from '@polkadot/wasm-crypto'; import './utils/generate.js'; import '@polkadot/types'; import { decodeAddress } from './utils/address.js'; import 'assert'; import './default/index.js'; import './metadata/programMetadata.js'; import { VARA_SS58_FORMAT } from './consts.js'; class GearKeyring { static unlock(keyring, passphrase) { if (keyring.isLocked) { keyring.unlock(passphrase); } return keyring; } static async fromSuri(suri, name, ss58Format = VARA_SS58_FORMAT) { const keyring = new Keyring({ type: 'sr25519', ss58Format }); await waitReady(); const keyPair = keyring.addFromUri(suri, { name }); return keyPair; } static fromKeyPair(pair, name, ss58Format = VARA_SS58_FORMAT) { const keyring = new Keyring({ type: 'sr25519', ss58Format }); return GearKeyring.unlock(keyring.addFromPair(pair, { name })); } static fromJson(keypairJson, passphrase, ss58Format = VARA_SS58_FORMAT) { const json = isString(keypairJson) ? JSON.parse(keypairJson) : keypairJson; const keyring = new Keyring({ type: 'sr25519', ss58Format }).addFromJson(json); return GearKeyring.unlock(keyring, passphrase); } static async fromSeed(seed, name, ss58Format = VARA_SS58_FORMAT) { const keyring = new Keyring({ type: 'sr25519', ss58Format }); await waitReady(); const keypair = isU8a(seed) ? keyring.addFromSeed(seed, { name }) : keyring.addFromSeed(hexToU8a(seed), { name }); return keypair; } static async fromMnemonic(mnemonic, name, ss58Format = VARA_SS58_FORMAT) { return await GearKeyring.fromSuri(mnemonic, name, ss58Format); } static toJson(keyring, passphrase) { return keyring.toJson(passphrase); } static async create(name, passphrase, ss58Format = VARA_SS58_FORMAT) { const mnemonic = mnemonicGenerate(); const seed = mnemonicToMiniSecret(mnemonic); const keyring = await GearKeyring.fromSeed(seed, name, ss58Format); return { keyring, mnemonic: mnemonic, seed: u8aToHex(seed), json: keyring.toJson(passphrase), }; } static generateMnemonic() { return mnemonicGenerate(); } static generateSeed(mnemonic) { if (!mnemonic) { mnemonic = mnemonicGenerate(); } return { seed: u8aToHex(mnemonicToMiniSecret(mnemonic)), mnemonic }; } static sign(keyring, message) { return keyring.sign(stringToU8a(message)); } static checkPublicKey(publicKey) { try { decodeAddress(publicKey); } catch (_) { return false; } return true; } } export { GearKeyring };