
So rufst du Token-Inhaber auf Solana ab
Inhaltsverzeichnis
In diesem Leitfaden zeigen wir, wie du alle Inhaber eines fungiblen Tokens wie USDC abrufst. Das ist nützlich, wenn du die Inhaber eines Tokens verfolgen oder sie mit einem Airdrop belohnen möchtest.
Überblick
Sehen wir uns zunächst an, wie Tokens, insbesondere nicht fungible Tokens, auf Solana funktionieren. Wenn ein Entwickler einen Token erstellt, legt er über das Token-Programm einen Mint-Account an. Dieser Mint-Account enthält Informationen über einen bestimmten Token, etwa dessen Namen, Token-Adresse und Bild. Sobald der Mint-Account erstellt wurde, kann der Token geprägt und in einem Token-Account gespeichert werden. Ein Token-Account enthält Informationen über einen bestimmten Token, der einer bestimmten Adresse gehört. Dazu zählen die Mint-Adresse, die Adresse des Inhabers und die Menge des jeweiligen Tokens im Account. Eine Adresse, die beispielsweise USDC (einen SPL-Token) hält, besitzt einen Token-Account für USDC.
Nachdem wir verstanden haben, wie Tokens und Token-Accounts funktionieren, können wir alle Inhaber eines bestimmten Tokens ermitteln. Jede Wallet, die einen bestimmten Token hält, besitzt einen Token-Account für diesen Token. Der Token ist also mit den Token-Accounts aller Wallets verknüpft, die ihn halten. So finden wir heraus, wer die Inhaber sind. Wenn wir alle mit einem Token verknüpften Token-Accounts und anschließend deren Inhaber abrufen, erhalten wir eine Liste aller Token-Inhaber!
Methode getTokenAccounts
Zum Glück können wir mit der Helius getTokenAccounts API-Methode genau das tun. Wir geben die Mint-Adresse eines beliebigen Tokens in den Parametern des API-Aufrufs an und erhalten eine Liste aller Token-Accounts, die für diesen Token erstellt wurden. Die API gibt außerdem den Inhaber jedes Token-Accounts zurück. Diesen bezeichnen wir üblicherweise als Token-Inhaber. Beachte dabei, dass ein Account mehrere Token-Accounts für denselben Token besitzen kann. Das ist kein großes Problem. Wir brauchen lediglich eine Logik, die Token-Accounts mit demselben Inhaber verarbeitet.
Implementierung
Sehen wir uns nun im Code an, wie das funktioniert. Um den Schritten zu folgen, benötigst du einen Helius API-Schlüssel. Du erhältst ihn kostenlos, indem du dein Helius-Dashboard aufrufst und ein Konto erstellst. Erstelle zunächst eine JavaScript-Datei namens getTokenHolders.js. Füge dann deine Helius-URL hinzu und importiere die fs-Bibliothek, um die Ergebnisse in einer JSON-Datei zu speichern.
const url = `https://mainnet.helius-rpc.com/?api-key=`;
const fs = require("fs");Als Nächstes erstellen wir eine Methode, die alle mit dem jeweiligen Token verknüpften Token-Accounts abruft. Erstelle dazu eine Methode namens findHolders. Sie verwendet die Methode getTokenAccounts, um die benötigten Daten abzurufen. Mehr über die Methode getTokenAccounts erfährst du hier.
Wichtig ist, dass jeder API-Aufruf maximal 1.000 Token-Accounts zurückgeben kann. Die meisten großen Tokens auf Solana haben mehr als 100.000 Token-Accounts. Deshalb durchlaufen wir alle Token-Accounts per Paginierung und führen weitere API-Aufrufe aus, bis wir die Daten aller vorhandenen Token-Accounts abgerufen haben.
In der Methode geben wir den Token-Mint in den Parametern des Aufrufs von getTokenAccounts an. Während wir alle Token-Accounts durchlaufen, fügen wir jeden eindeutigen Inhaber eines Token-Accounts einer Liste hinzu. Sobald die Methode abgeschlossen ist, speichern wir diese Liste mit allen Token-Inhabern in einer JSON-Datei.
const findHolders = async () => {
// Pagination logic
let page = 1;
// allOwners will store all the addresses that hold the token
let allOwners = new Set();
while (true) {
const response = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonrpc: "2.0",
method: "getTokenAccounts",
id: "helius-test",
params: {
page: page,
limit: 1000,
displayOptions: {},
//mint address for the token we are interested in
mint: "CKfatsPMUf8SkiURsDXs7eK6GWb4Jsd6UDbs7twMCWxo",
},
}),
});
// Check if any error in the response
if (!response.ok) {
console.log(
`Error: ${response.status}, ${response.statusText}`
);
break;
}
const data = await response.json();
// Pagination logic.
if (!data.result || data.result.token_accounts.length === 0) {
console.log(`No more results. Total pages: ${page - 1}`);
break;
}
console.log(`Processing results from page ${page}`);
// Adding unique owners to a list of token owners.
data.result.token_accounts.forEach((account) =>
allOwners.add(account.owner)
);
page++;
}
fs.writeFileSync(
"output.json",
JSON.stringify(Array.from(allOwners), null, 2)
);
};Im obigen Beispiel wird die Methode getTokenAccounts während der Paginierung durch alle Token-Accounts mehrfach aufgerufen. Die API-Antwort liefert für jeden Token-Account die folgenden Daten:
{
"address": "CVMR1nbxTcQ7Jpa1p137t5TyKFii3Y7Vazt9fFct3tk9",
"mint": "SHDWyBxihqiCj6YekG2GUr7wqKLeLAMK1gHZck9pL6y",
"owner": "CckxW6C1CjsxYcXSiDbk7NYfPLhfqAm3kSB5LEZunnSE",
"amount": 100000000,
"delegated_amount": 0,
"frozen": false
},Wir haben den Inhaber aus diesen Token-Accounts extrahiert und unserer Liste hinzugefügt. Bei Bedarf könnten wir auch die Menge des Tokens speichern, die jeder Token-Account hält, um die größten Inhaber zu ermitteln.
Danach müssen wir nur noch die Methode aufrufen:
findHolders();Der vollständige Code in unserer Datei getTokenHolders.js sollte so aussehen:
const url = `https://mainnet.helius-rpc.com/?api-key=`;
const fs = require("fs");
const findHolders = async () => {
let page = 1;
let allOwners = new Set();
while (true) {
const response = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonrpc: "2.0",
method: "getTokenAccounts",
id: "helius-test",
params: {
page: page,
limit: 1000,
displayOptions: {},
mint: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
},
}),
});
// Check if any error in the response
if (!response.ok) {
console.log(
`Error: ${response.status}, ${response.statusText}`
);
break;
}
const data = await response.json();
if (!data.result || data.result.token_accounts.length === 0) {
console.log(`No more results. Total pages: ${page - 1}`);
break;
}
console.log(`Processing results from page ${page}`);
data.result.token_accounts.forEach((account) =>
allOwners.add(account.owner)
);
page++;
}
fs.writeFileSync(
"output.json",
JSON.stringify(Array.from(allOwners), null, 2)
);
};
findHolders();Ausgabe
Unser Code gibt eine Liste aller Inhaber aus, die ungefähr so aussieht:
[
"111An9SVxuPpgjnuXW9Ub7hcVmZpYNrYZF4edsGwJEW",
"11Mmng3DoMsq2Roq8LBcqdz6d4kw9oSD8oka9Pwfbj",
"112uNfcC8iwX9P2TkRdJKyPatg6a4GNcr9NC5mTc2z3",
"113uswn5HNgEfBUKfK4gVBmd2GpZYbxd1N6h1uUWReg",
"11CyvpdYTqFmCVWbJJeKFNX8F8RSjNSYW5VVUi8eX4P",
"11MANeaiHEy9S9pRQNu3nqKa2gpajzX2wrRJqWrf8dQ",
…
]Du kannst das mit unserem Replit-Beispiel selbst testen.
Fazit
Damit haben wir gezeigt, wie du über die Helius getTokenAccounts API Inhaber von Solana-Tokens ermittelst. Dieser Leitfaden vermittelt dir die nötigen Kenntnisse, um direkt mit deiner Token-Community zu interagieren – ob für Airdrops, Analysen oder andere Aktionen. Wenn du Fragen hast, kontaktiere uns gerne über Twitter oder Discord.
Ähnliche Artikel
Helius abonnieren
Bleib bei der Solana-Entwicklung auf dem Laufenden und erhalte Updates, wenn wir neue Beiträge veröffentlichen


