MetaMask ist die standardmäßige Einstiegsstelle zu Ethereum für zig Millionen von Nutzern, und wenn Sie eine dApp betreiben, ist die MetaMask API die Schnittstelle zwischen Ihrer Benutzeroberfläche und ihren Signierschlüsseln. Die „MetaMask API“ besteht im Grunde aus zwei Dingen: dem injizierten window.ethereum-Provider, der durch EIP-1193 definiert ist, und dem MetaMask SDK, das dieselbe Oberfläche auf mobile Apps, React Native und Node.js-Backends erweitert. Wenn Sie den Provider beherrschen, haben Sie 80 % jeder Wallet-Integration im Web gelernt.
Dieser Leitfaden führt Sie durch die Erkennung des Providers, die Anforderung von Konten, das Auslesen der aktuellen Chain, das Signieren von Nachrichten mit personal_sign und EIP-712, das Senden von Transaktionen, das Hinzufügen oder Wechseln von Chains und die Verwendung des MetaMask SDK, wenn Sie sich außerhalb einer Browser-Erweiterung befinden. Sie werden auch sehen, wo ethers.js v6 und viem als Wrapper auf höherer Ebene passen und wo Apidog in den Workflow eingreift, wenn Sie die zugrunde liegenden JSON-RPC-Aufrufe testen möchten, ohne Einweg-Frontend-Code zu schreiben.
button
Wenn Sie etwas entwickeln, das mit Wallets zu tun hat, speichern Sie diesen Leitfaden zusammen mit unserem Leitfaden zur besten Krypto-Wallet-API als Lesezeichen, um einen breiteren Überblick über die Provider-Landschaft zu erhalten.
TL;DR
- Die MetaMask API ist der EIP-1193-Provider, der in Browsern unter
window.ethereumverfügbar ist, plus das MetaMask SDK für Mobilgeräte und Node. - Beginnen Sie mit
eth_requestAccounts, um den Benutzer zur Verbindung aufzufordern, und lauschen Sie dann aufaccountsChangedundchainChanged. - Signieren Sie Nachrichten mit
personal_signund strukturierte Daten miteth_signTypedData_v4(EIP-712). - Wechseln Sie Netzwerke mit
wallet_switchEthereumChain(EIP-3326) und fügen Sie neue hinzu mitwallet_addEthereumChain(EIP-3085). - Bibliotheken auf höherer Ebene wie ethers.js v6, viem und wagmi umschließen den rohen Provider; Snaps erweitern MetaMask selbst.
- Verwenden Sie Apidog, um JSON-RPC-Endpunkte zu testen, Transaktionsantworten zu simulieren und Signaturen vor der Bereitstellung zu debuggen.
Was ist die MetaMask API?
Die MetaMask API ist die Schnittstelle, die MetaMask Webseiten und Apps zur Interaktion mit Ethereum und EVM-kompatiblen Chains bereitstellt. In einem Browser injiziert die Erweiterung ein Provider-Objekt unter window.ethereum, und dieses Objekt folgt dem EIP-1193-Standard. Jede dApp, die diesen Standard verwendet, funktioniert mit MetaMask, Coinbase Wallet, Rabby, Frame und Dutzenden anderer Wallets ohne Code-Änderungen.
Außerhalb des Browsers bietet das MetaMask SDK dieselbe Provider-Struktur in React Native, reinem Node.js, Desktop-Electron-Apps und sogar serverseitigen Skripten. Das SDK übernimmt das Deep-Linking und den QR-Code-Prozess, der es einer mobilen MetaMask-Wallet ermöglicht, Transaktionen zu signieren, die von einem Desktop- oder Backend-Prozess angefordert werden. Unter der Haube spricht es immer noch EIP-1193, sodass sich Ihr App-Code kaum ändert.
MetaMask liefert auch Snaps, ein Plugin-System, das es Dritten ermöglicht, die Wallet mit neuen Chains, benutzerdefinierten RPC-Methoden und Kontotypen zu erweitern. Snaps sind hier nicht Gegenstand der Erörterung, aber wissenswert, wenn Sie Nicht-EVM-Chains oder benutzerdefinierte Signaturabläufe innerhalb von MetaMask selbst unterstützen möchten.
Authentifizierung und Einrichtung
Es gibt keine API-Schlüssel für den Provider selbst. Die Authentifizierung erfolgt, indem der Benutzer jede Anfrage in seiner Wallet-Benutzeroberfläche genehmigt. Sie benötigen zwei Dinge: eine Möglichkeit, den Provider zu erkennen, und eine Möglichkeit, auf Änderungen zu reagieren.
Beginnen Sie mit der Erkennung. Der Helfer @metamask/detect-provider behandelt Sonderfälle wie die Installation mehrerer Wallets, aber Sie können auch direkt prüfen.
// Vanilla JS detection
import detectEthereumProvider from '@metamask/detect-provider';
const provider = await detectEthereumProvider({ mustBeMetaMask: true });
if (!provider) {
alert('Please install MetaMask');
} else {
console.log('MetaMask detected');
}
Sobald Sie den Provider haben, richten Sie Event-Listener ein, bevor Sie etwas anfordern. Das Verpassen des accountsChanged-Events ist der häufigste MetaMask-Integrationsfehler.
window.ethereum.on('accountsChanged', (accounts) => {
if (accounts.length === 0) {
console.log('User disconnected');
} else {
console.log('Active account:', accounts[0]);
}
});
window.ethereum.on('chainChanged', (chainId) => {
// Best practice: reload the page on chain change
window.location.reload();
});
Für React-Apps übernimmt wagmi all dies für Sie und erkennt MetaMask automatisch über seinen injizierten Connector.
Kern-Endpunkte
Alle Provider-Aufrufe erfolgen über window.ethereum.request({ method, params }). Der Methodenname ist ein JSON-RPC-String, und params ist ein Array oder Objekt, je nach Methode. Hier sind die Aufrufe, die 95 % der dApp-Integrationen abdecken.
Konten anfordern und Chain auslesen
// Prompt the user to connect
const accounts = await window.ethereum.request({
method: 'eth_requestAccounts',
});
const account = accounts[0];
// Read the current chain
const chainId = await window.ethereum.request({
method: 'eth_chainId',
});
console.log(account, chainId); // '0x...' '0x1' (Ethereum mainnet)
Der äquivalente rohe JSON-RPC-Aufruf, den Sie an jeden Ethereum-Node senden können, sieht mit curl folgendermaßen aus.
curl https://mainnet.infura.io/v3/YOUR_KEY \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
Für reine Lesezugriffe benötigen Sie MetaMask überhaupt nicht; Node-Provider wie Alchemy oder Infura bieten dieselbe RPC. Weitere Informationen zu gehosteten Ethereum-Nodes finden Sie in unserem Alchemy API-Leitfaden.
Eine einfache Nachricht signieren
personal_sign ist die klassische, menschenlesbare Signatur. Sie präfixiert die Nachricht, damit Benutzer nicht dazu verleitet werden können, beliebige Transaktions-Bytes zu signieren.
const message = 'Sign in to Apidog at ' + new Date().toISOString();
const signature = await window.ethereum.request({
method: 'personal_sign',
params: [message, account],
});
Strukturierte Daten mit EIP-712 signieren
Für alles Komplexe, wie eine Genehmigung oder eine Anmelde-Challenge, verwenden Sie eth_signTypedData_v4. MetaMask rendert die Felder übersichtlich im Bestätigungs-Popup, was sowohl Benutzer schützt als auch Vertrauen aufbaut.
const typedData = {
domain: { name: 'Apidog Demo', version: '1', chainId: 1 },
types: {
EIP712Domain: [
{ name: 'name', type: 'string' },
{ name: 'version', type: 'string' },
{ name: 'chainId', type: 'uint256' },
],
Login: [
{ name: 'wallet', type: 'address' },
{ name: 'nonce', type: 'uint256' },
],
},
primaryType: 'Login',
message: { wallet: account, nonce: 42 },
};
const sig = await window.ethereum.request({
method: 'eth_signTypedData_v4',
params: [account, JSON.stringify(typedData)],
});
Eine Transaktion senden
Transaktionen verwenden eth_sendTransaction. MetaMask übernimmt die Gas-Schätzung und das Nonce-Management automatisch.
const txHash = await window.ethereum.request({
method: 'eth_sendTransaction',
params: [{
from: account,
to: '0xRecipientAddressHere',
value: '0x38d7ea4c68000', // 0.001 ETH in wei, hex
}],
});
Eine Chain wechseln oder hinzufügen
EIP-3326 und EIP-3085 decken den Wechsel zu einer bekannten Chain und das Hinzufügen einer neuen ab.
// Switch to Polygon (chainId 137 = 0x89)
try {
await window.ethereum.request({
method: 'wallet_switchEthereumChain',
params: [{ chainId: '0x89' }],
});
} catch (err) {
if (err.code === 4902) {
// Chain not added yet
await window.ethereum.request({
method: 'wallet_addEthereumChain',
params: [{
chainId: '0x89',
chainName: 'Polygon',
rpcUrls: ['https://polygon-rpc.com'],
nativeCurrency: { name: 'MATIC', symbol: 'MATIC', decimals: 18 },
}],
});
}
}
React mit dem MetaMask SDK
Das SDK funktioniert auch gut in regulärem React, wenn Sie einen einzigen Integrationspfad wünschen, der Desktop-Erweiterung, mobiles Deep-Link und In-App-Browser abdeckt.
import { MetaMaskProvider, useSDK } from '@metamask/sdk-react';
function Connect() {
const { sdk, connected, account } = useSDK();
return (
sdk?.connect()}>
{connected ? account : 'Connect MetaMask'}
);
}
export default function App() {
return (
);
}
Für Produktions-Apps umschließen Sie den rohen Provider in ethers.js v6 oder viem. Diese bieten Ihnen typisierte Contracts, ABI-Decoder und bessere Fehlermeldungen, während sie weiterhin dieselbe MetaMask API darunter verwenden. Wenn Sie auch E-Mail- oder Social-Login als Fallback benötigen, kombinieren Sie MetaMask mit einer eingebetteten Wallet über unseren Privy API-Leitfaden.
Häufige Fehler und Ratenbegrenzungen
MetaMask gibt standardmäßige JSON-RPC-Fehlercodes zurück. Diejenigen, denen Sie am häufigsten begegnen werden:
4001: Benutzer hat die Anfrage abgelehnt. Zeigen Sie eine freundliche „Verbindung abgebrochen“-Toast-Nachricht an und versuchen Sie es nicht automatisch erneut.4100: Nicht autorisiert. Das Konto ist nicht verbunden; rufen Sie zuersteth_requestAccountsauf.4200: Methode wird nicht unterstützt. Selten, aber bestätigen Sie, dass es sich um MetaMask handelt, bevor Sie herstellerspezifische Methoden aufrufen.4902: Chain nicht hinzugefügt. Fügen Sie sie anschließend mitwallet_addEthereumChainhinzu.-32002: Anfrage bereits ausstehend. Benutzer klicken manchmal zweimal auf die Schaltfläche; entprellen Sie auf Ihrer Seite.
Der Provider selbst hat keine Ratenbegrenzung, aber die zugrunde liegende RPC schon. Wenn Sie Lesezugriffe über Infura oder Alchemy proxien, sind Sie an deren Tarif gebunden. Für Fiat-Flüsse wie die ETH-zu-USD-Konvertierung kombinieren die meisten Teams diese Integration mit einer Fiat On-Ramp- und Off-Ramp-API, damit Benutzer Guthaben aufladen können, ohne die dApp zu verlassen.
MetaMask API-Preise
Die MetaMask-Erweiterung und das SDK sind kostenlos. Es fallen keine Kosten pro Verbindung, pro Signatur oder pro Transaktion an. MetaMask erzielt Einnahmen durch Swap-Gebühren, wenn Benutzer innerhalb der Wallet handeln, und durch die MetaMask Card, nicht von dApp-Entwicklern.
Kosten entstehen Ihnen durch den RPC-Endpunkt, den Ihre dApp für Lesezugriffe verwendet. Ein kostenloser Alchemy- oder Infura-Tarif deckt die meisten kleinen Apps ab; Produktions-dApps liegen in der Regel zwischen 49 und 299 US-Dollar pro Monat für dedizierten Durchsatz.
Testen der MetaMask API mit Apidog
Browserbasiertes Signieren ist schwer zu debuggen, da der Anfragefluss eine Erweiterung, eine Seite und manchmal ein mobiles Deep-Link umfasst. Hier verdient sich Apidog seinen Platz im Wallet-Entwickler-Toolkit. Sie können den rohen JSON-RPC-Endpunkt Ihrer dApp ansteuern, bestätigen, dass eth_chainId und eth_getBalance das zurückgeben, was Sie erwarten, und den gesamten Ablauf als Testsuite speichern.
Importieren Sie die Ethereum JSON-RPC-Spezifikation, legen Sie Ihre Node-URL als Umgebungsvariable fest, und Sie haben eine wiederverwendbare Sammlung für jede EVM-Chain. Apidog simuliert auch Antworten, sodass Ihre Frontend-Entwickler gegen einen gefälschten eth_sendTransaction entwickeln können, während der Smart Contract noch geprüft wird. Für CI können Sie dieselbe Sammlung von der Befehlszeile ausführen und den Build fehlschlagen lassen, wenn sich die Antwortstruktur ändert. Wenn Sie mit Postman-Sammlungen gekämpft haben, die sich nie teamübergreifend synchronisieren, erklärt unser Leitfaden zum API-Testen ohne Postman im Jahr 2026, warum Apidog Multi-Protokoll-dApp-Tests besser handhabt.
Laden Sie Apidog herunter, um loszulegen.
FAQ
- Funktioniert die MetaMask API auf Mobilgeräten?Ja. Verwenden Sie das MetaMask SDK, das über Deep-Links zur mobilen App für die Signatur führt. Die Provider-Oberfläche ist identisch mit der Browser-Erweiterung, sodass Ihr Code gleich bleibt. Für einen tieferen Vergleich mit anderen mobilen Wallet-SDKs siehe unsere Übersicht der besten Krypto-Wallet-APIs.
- Was ist der Unterschied zwischen
eth_sign,personal_signundeth_signTypedData_v4?eth_signsigniert rohe Bytes und ist gefährlich; MetaMask warnt Benutzer aggressiv.personal_signpräfixiert eine menschenlesbare Nachricht.eth_signTypedData_v4signiert strukturierte EIP-712-Daten und zeigt die Felder übersichtlich in der MetaMask-Benutzeroberfläche an. Verwenden Sie die letzten beiden; vermeiden Sieeth_sign. - Benötige ich einen separaten API-Schlüssel von MetaMask?Nein. Der Provider ist kostenlos und schlüssellos. Sie benötigen jedoch einen RPC-Provider wie Alchemy oder Infura für Lesezugriffe außerhalb der Wallet, die ihre eigenen Schlüssel haben.
- Kann ich ethers.js oder viem mit MetaMask verwenden?Ja, beide umschließen den
window.ethereum-Provider. Ethers v6 stelltBrowserProvider(window.ethereum)bereit, und viem bietetcreateWalletClient({ transport: custom(window.ethereum) }). Die meisten Produktions-dApps verwenden einen der beiden. - Was passiert, wenn ein Benutzer mehrere Wallets installiert hat?MetaMask implementiert EIP-6963, sodass dApps alle installierten Wallets erkennen können, anstatt um
window.ethereumzu konkurrieren. Wagmi und RainbowKit handhaben dies automatisch. - Ist MetaMask Snaps produktionsreif?Ja, Snaps wurde 2024 allgemein verfügbar. Der größte Teil der Produktionsnutzung dient der Unterstützung von Nicht-EVM-Chains, benutzerdefinierten Transaktionseinblicken und Hardware-Wallet-Integrationen.
