← Back to Plugins
Channels

Ledger Claw

YazhuEth By YazhuEth 👁 36 views ▲ 0 votes

Sign EVM transactions from Telegram using your Ledger Signer.

Homepage GitHub

Install

npm install
pnpm

Configuration Example

{
  "requireSigningAbove": "0.00",
  "wallets": [],
  "chains": {
    "arbitrum": { "enabled": true, "rpc": "https://arb1.arbitrum.io/rpc" },
    "ethereum": { "enabled": true, "rpc": "https://eth.llamarpc.com" },
    "optimism": { "enabled": true, "rpc": "https://mainnet.optimism.io" },
    "polygon": { "enabled": true, "rpc": "https://1rpc.io/matic" },
    "base": { "enabled": true, "rpc": "https://mainnet.base.org" }
  },
  "contacts": {}
}

README

<p align="center">
  <img src="banner.png" alt="Ledger Claw" />
</p>

<p align="center">
  Sign on-chain transactions from Telegram using your Ledger hardware wallet.
</p>

---

> **Disclaimer** — Ledger Claw is an independent community project, not an official Ledger product.

Ledger Claw is an [OpenClaw](https://github.com/openclaw/openclaw) extension that lets your AI agent trigger EVM payments directly in a Telegram conversation. When a transaction is needed, the agent sends a button — you tap it, connect your Ledger via WalletConnect, and sign. Your keys never leave the device.

## How it works

1. Your AI agent detects a payment is needed
2. It calls the `ledger_sign` tool — a button appears in your Telegram chat
3. You tap the button, which opens the Ledger Claw mini-app
4. Connect your Ledger via WalletConnect and confirm the transaction
5. The tx hash is sent back to the chat — the agent confirms it went through

## Supported chains

Arbitrum · Ethereum · Optimism · Polygon · Base

All chains are enabled by default. You can toggle them via the `ledger_claw_config` tool.

## Supported transaction types

Currently only **token transfers** are supported (ETH, POL, USDC, USDT). Swaps, bridges, and other transaction types will be added in future updates.

## Mini-app

The mini-app is deployed at `https://ledger-claw.vercel.app` and is used by default when the plugin sends a signing or connect request.

If you want full control, you can audit the source code in `packages/mini-app/`, deploy your own instance, and point the plugin to it via the `miniAppUrl` config in your OpenClaw plugin settings.

## Project structure

```
packages/
├── mini-app/              # Telegram Mini App (React + Vite)
├── ledger-claw-plugin/    # OpenClaw plugin (tools + config)
├── tests/                 # Unit tests (vitest)
└── test-bot/              # Dev-only Telegram bot for testing the mini-app
```

The `test-bot` is a development utility only — it simulates signing/connect requests to test the mini-app locally. It is not part of the plugin.

## Tests

```bash
pnpm test
```

Runs unit tests for the plugin's pure functions (validation, URL building, tx encoding, price lookup).

## Setup

### Prerequisites

- [OpenClaw](https://github.com/openclaw/openclaw) with Telegram channel configured
- A Ledger hardware wallet + Ledger Live on your phone
- Node.js 22+, pnpm

### Install the extension

```bash
openclaw plugins install @ledger-claw/plugin
```

The extension uses the `TELEGRAM_BOT_TOKEN` from your OpenClaw Telegram channel configuration.

### Run the mini-app locally (development)

```bash
git clone https://github.com/YazhuEth/Ledger-Claw.git
cd Ledger-Claw
pnpm install
pnpm dev:mini-app
```

Create a `.env` file at the root (see `.env.example`):

```
VITE_WALLETCONNECT_PROJECT_ID=your_project_id
```

Get a WalletConnect project ID at [cloud.walletconnect.com](https://cloud.walletconnect.com).

To also run the test-bot (`pnpm dev:test-bot`), add:

```
BOT_TOKEN=your_bot_token
MINI_APP_URL=https://ledger-claw.vercel.app
TEST_RECIPIENT=0x...
```

## Extension tools

| Tool | Description |
|---|---|
| `ledger_sign` | Send a transaction for Ledger signing |
| `ledger_connect` | Connect a Ledger to get the wallet address |
| `ledger_claw_config` | Read/update config (threshold, chains, RPCs, wallets) |
| `ledger_claw_contacts` | Manage saved contacts (add, remove, resolve by name) |
| `ledger_claw_rpc` | Check balance or verify a transaction on-chain |
| `get_token_price` | Get the current USD price of a token (ETH, POL, USDC, USDT) |
| `token_to_smallest_unit` | Convert a token amount to hex (ETH, POL, USDC, USDT) |

## Configuration

The extension stores its config in `~/.ledger-claw/config.json` (created automatically on first use):

```json
{
  "requireSigningAbove": "0.00",
  "wallets": [],
  "chains": {
    "arbitrum": { "enabled": true, "rpc": "https://arb1.arbitrum.io/rpc" },
    "ethereum": { "enabled": true, "rpc": "https://eth.llamarpc.com" },
    "optimism": { "enabled": true, "rpc": "https://mainnet.optimism.io" },
    "polygon": { "enabled": true, "rpc": "https://1rpc.io/matic" },
    "base": { "enabled": true, "rpc": "https://mainnet.base.org" }
  },
  "contacts": {}
}
```

- `requireSigningAbove` — ETH threshold for requiring Ledger signing (`"0.00"` = always sign)
- `wallets` — saved wallets for balance checks (e.g. `[{ "label": "Main", "address": "0x..." }]`). Optional — not required for signing.
- `chains` — per-chain config: `enabled` to toggle, `rpc` for the RPC endpoint (changeable if one goes down)
- `contacts` — saved contacts for quick transfers (e.g. `{ "Jean": { "address": "0x..." } }`)

All settings can be modified by the AI via the `ledger_claw_config` and `ledger_claw_contacts` tools, or manually in the file.

## Contributing

Contributions are welcome! Feel free to open issues and pull requests.

## License

MIT
channels

Comments

Sign in to leave a comment

Loading comments...