import { Wallet } from "@coral-xyz/anchor"; import { PublicKey, Transaction, VersionedTransaction, Keypair, } from "@solana/web3.js"; export class CustomWallet implements Wallet { constructor(readonly payer: Keypair) { this.payer = payer; } async signTransaction( tx: T ): Promise { if (isVersionedTransaction(tx)) { tx.sign([this.payer]); } else { tx.partialSign(this.payer); } return tx; } async signAllTransactions( txs: T[] ): Promise { return txs.map((t) => { if (isVersionedTransaction(t)) { t.sign([this.payer]); } else { t.partialSign(this.payer); } return t; }); } get publicKey(): PublicKey { return this.payer.publicKey; } } function isVersionedTransaction( tx: Transaction | VersionedTransaction ): tx is VersionedTransaction { return "version" in tx; }