
Cara Mendapatkan Daftar Pemegang Token di Solana
Dalam panduan ini, kita akan mempelajari cara mendapatkan daftar semua pemegang token fungibel seperti USDC. Ini berguna ketika Anda ingin melacak pemegang token atau memberikan hadiah kepada mereka melalui airdrop.
Ringkasan
Mari kita lihat terlebih dahulu cara kerja token, khususnya token nonfungibel, di Solana. Saat membuat token, developer menggunakan program token untuk membuat akun mint. Akun mint ini menyimpan informasi tentang token tertentu, seperti nama, alamat token, dan gambar. Setelah akun mint dibuat, token dapat dicetak dan disimpan dalam akun token. Akun token adalah akun yang menyimpan informasi tentang token tertentu yang dimiliki oleh alamat tertentu. Informasi ini mencakup alamat mint, alamat pemilik, dan jumlah token tersebut di dalam akun. Sebagai contoh, alamat yang menyimpan sejumlah USDC (sebuah token SPL) akan memiliki akun token untuk USDC.
Setelah memahami cara kerja token dan akun token, kita dapat mencari semua pemegang token tertentu. Setiap wallet yang menyimpan token tertentu akan memiliki akun token untuk token tersebut. Artinya, token ini akan dikaitkan dengan akun token milik semua wallet yang menyimpannya. Dengan cara inilah kita akan mengetahui semua pemegangnya. Jika kita bisa mendapatkan semua akun token yang terkait dengan suatu token, lalu mendapatkan pemilik akun-akun tersebut, kita akan memiliki daftar semua pemegangnya!
Metode getTokenAccounts
Untungnya, metode API Helius getTokenAccounts memungkinkan kita melakukan hal tersebut. Kita dapat menyertakan alamat mint token apa pun dalam parameter panggilan API dan akan menerima daftar semua akun token yang telah dibuat untuk token tersebut. Selain itu, API juga mengembalikan pemilik setiap akun token. Pemilik inilah yang umumnya kita sebut sebagai pemegang token. Satu hal kecil yang perlu diperhatikan adalah bahwa satu akun dapat memiliki beberapa akun token untuk token yang sama. Ini bukan masalah besar; kita hanya perlu menyiapkan logika untuk menangani akun token yang memiliki pemilik yang sama.
Implementasi
Sekarang mari kita pelajari kode untuk melihat cara melakukannya. Anda memerlukan kunci API Helius untuk mengikuti panduan ini. Anda bisa mendapatkannya secara gratis dengan membuka dashboard Helius Anda dan mendaftarkan akun. Pertama, kita harus membuat file Javascript bernama getTokenHolders.js. Kita dapat memulainya dengan menambahkan URL Helius dan mengimpor library fs untuk menyimpan hasil ke file JSON.
const url = `https://mainnet.helius-rpc.com/?api-key=`;
const fs = require("fs");Selanjutnya, kita akan membuat metode untuk mengambil semua akun token yang terkait dengan token tertentu. Kita dapat memulainya dengan membuat metode bernama findHolders, yang akan menggunakan metode getTokenAccounts untuk mendapatkan data yang diperlukan. Anda dapat membaca informasi selengkapnya tentang metode getTokenAccounts di sini.
Satu hal penting yang perlu diperhatikan adalah setiap panggilan API hanya dapat mengembalikan maksimal 1.000 akun token. Sebagian besar token besar di Solana memiliki lebih dari 100.000 akun token. Untuk mengatasinya, kita akan menggunakan paginasi guna menelusuri semua akun token dan terus melakukan panggilan API hingga mendapatkan data yang berkaitan dengan semua akun token yang ada.
Dalam metode tersebut, kita akan menyertakan mint token dalam parameter panggilan getTokenAccounts. Saat melakukan iterasi pada semua akun token, kita akan menambahkan setiap pemilik akun token yang unik ke sebuah daftar. Setelah metode selesai dijalankan, kita akan menyimpan daftar ini ke file JSON yang berisi semua pemegang token.
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)
);
};Dalam contoh di atas, metode getTokenAccounts dipanggil beberapa kali selama proses paginasi semua akun token. Respons API akan memberikan data berikut untuk setiap akun token:
{
"address": "CVMR1nbxTcQ7Jpa1p137t5TyKFii3Y7Vazt9fFct3tk9",
"mint": "SHDWyBxihqiCj6YekG2GUr7wqKLeLAMK1gHZck9pL6y",
"owner": "CckxW6C1CjsxYcXSiDbk7NYfPLhfqAm3kSB5LEZunnSE",
"amount": 100000000,
"delegated_amount": 0,
"frozen": false
},Kita mengekstrak pemilik dari akun-akun token tersebut dan menambahkannya ke daftar. Jika diinginkan, kita juga dapat menyimpan jumlah token yang dimiliki setiap akun token untuk mengetahui pemegang terbesar.
Setelah selesai, kita hanya perlu memanggil metode tersebut:
findHolders();Kode lengkap dalam file getTokenHolders.js akan terlihat seperti ini:
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();Output
Output kode kita akan berupa daftar semua pemegang dan terlihat seperti ini:
[
"111An9SVxuPpgjnuXW9Ub7hcVmZpYNrYZF4edsGwJEW",
"11Mmng3DoMsq2Roq8LBcqdz6d4kw9oSD8oka9Pwfbj",
"112uNfcC8iwX9P2TkRdJKyPatg6a4GNcr9NC5mTc2z3",
"113uswn5HNgEfBUKfK4gVBmd2GpZYbxd1N6h1uUWReg",
"11CyvpdYTqFmCVWbJJeKFNX8F8RSjNSYW5VVUi8eX4P",
"11MANeaiHEy9S9pRQNu3nqKa2gpajzX2wrRJqWrf8dQ",
…
]Anda dapat mengujinya sendiri melalui contoh replit kami.
Kesimpulan
Sebagai penutup, kita telah membahas proses untuk mengidentifikasi pemegang token Solana melalui API Helius getTokenAccounts. Panduan ini akan membekali Anda dengan keterampilan yang diperlukan untuk berinteraksi langsung dengan komunitas token Anda, baik untuk airdrop, memperoleh wawasan, maupun interaksi lainnya. Jika memiliki pertanyaan, jangan ragu untuk menghubungi kami melalui Twitter atau Discord.
Artikel Terkait
Berlangganan Helius
Ikuti perkembangan terbaru dalam pengembangan Solana dan dapatkan pembaruan saat kami memublikasikan postingan


