UNPKG

@alchemy/aa-core

Version:

viem based SDK that enables interactions with ERC-4337 Smart Accounts. ABIs are based off the definitions generated in @account-abstraction/contracts

60 lines (52 loc) 1.52 kB
import { type HDAccount, type HDOptions, type Hex, type LocalAccount, type PrivateKeyAccount, type SignableMessage, type TypedData, type TypedDataDefinition, } from "viem"; import { mnemonicToAccount, privateKeyToAccount } from "viem/accounts"; import type { SmartAccountSigner } from "./types.js"; export class LocalAccountSigner< T extends HDAccount | PrivateKeyAccount | LocalAccount > implements SmartAccountSigner<T> { inner: T; signerType: string; constructor(inner: T) { this.inner = inner; this.signerType = inner.type; // type: "local" } readonly signMessage: (message: SignableMessage) => Promise<`0x${string}`> = ( message ) => { return this.inner.signMessage({ message }); }; readonly signTypedData = async < const TTypedData extends TypedData | { [key: string]: unknown }, TPrimaryType extends string = string >( params: TypedDataDefinition<TTypedData, TPrimaryType> ): Promise<Hex> => { return this.inner.signTypedData(params); }; readonly getAddress: () => Promise<`0x${string}`> = async () => { return this.inner.address; }; static mnemonicToAccountSigner( key: string, opts?: HDOptions ): LocalAccountSigner<HDAccount> { const signer = mnemonicToAccount(key, opts); return new LocalAccountSigner(signer); } static privateKeyToAccountSigner( key: Hex ): LocalAccountSigner<PrivateKeyAccount> { const signer = privateKeyToAccount(key); return new LocalAccountSigner(signer); } }