UNPKG

@alephium/web3-wallet

Version:
66 lines 2.98 kB
import * as secp from '@noble/secp256k1'; import { SignerProviderSimple, utils, web3 } from '@alephium/web3'; import { publicKeyFromPrivateKey, addressFromPublicKey, groupOfAddress } from '@alephium/web3'; import { deriveHDWalletPrivateKey, deriveHDWalletPrivateKeyForGroup } from './hd-wallet.js'; export class PrivateKeyWallet extends SignerProviderSimple { get nodeProvider() { return this._nodeProvider ?? web3.getCurrentNodeProvider(); } get explorerProvider() { return this._explorerProvider ?? web3.getCurrentExplorerProvider(); } unsafeGetSelectedAccount() { return Promise.resolve(this.account); } getPublicKey(address) { if (address !== this.address) { throw Error('The signer address is invalid'); } return Promise.resolve(this.publicKey); } get account() { return { keyType: this.keyType, address: this.address, publicKey: this.publicKey, group: this.group }; } constructor({ privateKey, keyType, nodeProvider, explorerProvider }) { super(); this.keyType = keyType ?? 'default'; this.privateKey = privateKey; this.publicKey = publicKeyFromPrivateKey(privateKey, this.keyType); this.address = addressFromPublicKey(this.publicKey, this.keyType); this.group = groupOfAddress(this.address); this._nodeProvider = nodeProvider; this._explorerProvider = explorerProvider; } static Random(targetGroup, nodeProvider, keyType) { const privateKeyBytes = secp.utils.randomPrivateKey(); const wallet = new PrivateKeyWallet({ privateKey: utils.binToHex(privateKeyBytes), keyType, nodeProvider }); if (targetGroup === undefined || wallet.group === targetGroup) { return wallet; } else { return PrivateKeyWallet.Random(targetGroup, nodeProvider, keyType); } } static FromMnemonic({ mnemonic, keyType, addressIndex, passphrase, nodeProvider }) { const privateKey = deriveHDWalletPrivateKey(mnemonic, keyType ?? 'default', addressIndex ?? 0, passphrase); return new PrivateKeyWallet({ privateKey, keyType, nodeProvider }); } static FromMnemonicWithGroup(mnemonic, targetGroup, keyType, fromAddressIndex, passphrase, nodeProvider) { const [privateKey] = deriveHDWalletPrivateKeyForGroup(mnemonic, targetGroup, keyType ?? 'default', fromAddressIndex, passphrase); return new PrivateKeyWallet({ privateKey, keyType, nodeProvider }); } async signRaw(signerAddress, hexString) { if (signerAddress !== this.address) { throw Error('Unmatched signer address'); } return PrivateKeyWallet.sign(this.privateKey, hexString, this.keyType); } static sign(privateKey, hexString, _keyType) { return utils.sign(hexString, privateKey, _keyType); } } //# sourceMappingURL=privatekey-wallet.js.map