Skip to content
Closed
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
79b421d
Initial Multichain API docs
alexandratran Oct 9, 2024
3eff634
Merge branch 'main' into 1566-multichain
alexandratran Oct 9, 2024
5d85f55
Merge branch 'main' into 1566-multichain
alexandratran Oct 11, 2024
f1d72dc
edit content
alexandratran Oct 11, 2024
3ef9258
Merge branch 'main' into 1566-multichain
alexandratran Oct 11, 2024
d06c36f
fix typo
alexandratran Oct 15, 2024
45a7748
Merge branch 'main' into 1566-multichain
alexandratran Oct 22, 2024
f984b7d
edits
alexandratran Oct 22, 2024
e72193e
Merge branch 'main' into 1566-multichain
alexandratran Oct 22, 2024
6eee68f
Merge branch 'main' into 1566-multichain
joaniekube Oct 28, 2024
4be0757
Merge branch 'main' into 1566-multichain
alexandratran Oct 31, 2024
66b29ae
Merge branch '1566-multichain' of github.com:MetaMask/metamask-docs i…
alexandratran Oct 31, 2024
f83c96f
fixes
alexandratran Oct 31, 2024
ace1a08
Merge branch 'main' into 1566-multichain
alexandratran Nov 8, 2024
e752569
add how-to guide and edits
alexandratran Nov 8, 2024
9f3c5ba
minor fix
alexandratran Nov 12, 2024
290b796
Merge branch 'main' into 1566-multichain
alexandratran Nov 13, 2024
1fec541
Mention multichain tag
alexandratran Nov 13, 2024
118b981
update what's new
alexandratran Nov 13, 2024
19df454
Apply suggestions from code review
alexandratran Nov 25, 2024
4574202
Merge branch 'main' into 1566-multichain
alexandratran Nov 25, 2024
0d39c1b
address reviewer feedback
alexandratran Nov 25, 2024
6397c3d
Apply suggestions from code review
alexandratran Feb 6, 2025
401b459
Merge branch 'main' into 1566-multichain
alexandratran Feb 6, 2025
7a6aec0
feat: add multichain client docs
chakra-guy Feb 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
feat: add multichain client docs
  • Loading branch information
chakra-guy committed Feb 14, 2025
commit 7a6aec0880e5988fae295f50989bd2c41fbd4fd2
126 changes: 126 additions & 0 deletions sdk/reference/multichain-client.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
---
description: Multichain Package
---

# Multichain Package

A low-level TypeScript client for interacting with MetaMask's CAIP-25 compliant Multichain API. This package provides a standardized way to interact with multiple blockchain networks simultaneously through MetaMask.

:::warning
This package is currently in beta and subject to change.
:::

## Conceptual Overview

### Purpose and Scope

The MetaMask Multichain package simplifies interactions with multiple blockchain networks by providing:
- A unified client for managing multichain sessions
- Automatic transport handling (Chrome extension, injected provider)
- Type-safe method invocations across different networks

### Relationship with Wallet API

This package is built on top of MetaMask Wallet's [Multichain API](/wallet/concepts/multichain-api). While the Wallet API defines the protocol for multichain interactions, this package provides:
- A higher-level abstraction for managing sessions
- Automatic handling of different connection mechanisms
- TypeScript types for better development experience

## Technical Reference

### Installation

```bash
npm install @metamask/sdk-multichain
```

### Client Configuration

Create a MetaMask Multichain client with optional configuration:

```typescript
import { MultichainClient } from '@metamask/sdk-multichain';

const client = new MultichainClient();
```

### Methods

#### Connect & Disconnect
Establish connection with MetaMask:

```typescript
const connected = await client.connect({
extensionId: 'your-extension-id' // Required for Chrome extension
});
```

Disconnect from MetaMask:

```typescript
await client.disconnect();
```

#### Create Session
Create a multichain session with specified permissions:

```typescript
const session = await client.createSession({
requiredScopes: {
'eip155:1': { // Ethereum Mainnet
methods: ['eth_sendTransaction', 'personal_sign'],
notifications: ['accountsChanged', 'chainChanged'],
},
'eip155:137': { // Polygon
methods: ['eth_getBalance', 'eth_blockNumber'],
notifications: ['accountsChanged', 'chainChanged'],
}
}
});
```

#### Invoke Methods
Call methods on specific networks:

```typescript
// Sign a message on Ethereum
const signature = await client.invokeMethod({
scope: 'eip155:1',
request: {
method: 'personal_sign',
params: [message, address]
}
});

// Get balance on Polygon
const balance = await client.invokeMethod({
scope: 'eip155:137',
request: {
method: 'eth_getBalance',
params: [address, 'latest']
}
});
```

### Events

Listen for session and network events:

```typescript
// Session state changes
client.addListener('sessionChanged', (event) => {
console.log('Session event:', event.type); // 'created', 'updated', or 'revoked'
console.log('Session data:', event.session);
});

// Chain-specific notifications
client.addListener('notification', (notification) => {
if (notification?.method === 'wallet_sessionChanged') {
console.log('Session updated:', notification.params);
}
});
```

### Examples

For more examples, check out the [multichain + react + vite app](https://github.com/MetaMask/sdk-examples/tree/main/react-vite-app).
Loading