> ## Documentation Index
> Fetch the complete documentation index at: https://docs.glam.systems/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Wallet

## Default Initialization

Initialize `GlamClient` by setting the `ANCHOR_PROVIDER_URL` and `ANCHOR_WALLET` environment variables:

```typescript theme={null}
import { GlamClient, ClusterNetwork } from '@glamsystems/glam-sdk';

const glamClient = new GlamClient();
```

## Keypair Wallet

Alternatively, initialize `GlamClient` with an RPC URL and wallet keypair:

```typescript theme={null}
import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet";
import { AnchorProvider } from "@coral-xyz/anchor";
import { Connection, Keypair } from "@solana/web3.js";
import { GlamClient, ClusterNetwork } from "@glamsystems/glam-sdk";

const connection = new Connection("https://api.mainnet-beta.solana.com");
const keypairPath = "/path/to/wallet/keypair.json";

const loadWallet = (path: string) => {
  let keypair = Keypair.fromSecretKey(
    Buffer.from(
      JSON.parse(require("fs").readFileSync(path, { encoding: "utf-8" })),
    ),
  );
  return new NodeWallet(keypair);
};

const glamClient = new GlamClient({
  provider: new AnchorProvider(connection, loadWallet(keypairPath)),
  cluster: ClusterNetwork.Mainnet,
});
```

## Custom Wallet Implementation

Any custom wallet that implements the `Wallet` interface can be used with `GlamClient`.

### Read-Only Wallet

A read-only wallet allows querying vault data without signing transactions:

```typescript theme={null}
import { Wallet } from "@coral-xyz/anchor/dist/cjs/provider";
import { Connection, PublicKey, Transaction, VersionedTransaction } from "@solana/web3.js";
import { GlamClient, ClusterNetwork } from "@glamsystems/glam-sdk";

class ReadOnlyWallet implements Wallet {
  constructor(readonly pubkey: PublicKey) {}
  signTransaction<T extends Transaction | VersionedTransaction>(tx: T): Promise<T> {
    throw new Error("Method not implemented.");
  }
  signAllTransactions<T extends Transaction | VersionedTransaction>(txs: T[]): Promise<T[]> {
    throw new Error("Method not implemented.");
  }
  get publicKey(): PublicKey {
    return this.pubkey;
  }
}

const connection = new Connection("https://api.mainnet-beta.solana.com");
const wallet = new ReadOnlyWallet(new PublicKey("<ReadOnlyWalletPubkey>"));

const glamClient = new GlamClient({
  provider: new AnchorProvider(connection, wallet),
  cluster: ClusterNetwork.Mainnet,
  statePda: new PublicKey("<GlamStatePda>"),
});
```
