@gear-js/api
Version:
A JavaScript library that provides functionality to connect GEAR Component APIs.
82 lines (79 loc) • 3.01 kB
JavaScript
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 };