Занурюючись у глибини Web3, я шукав спосіб моніторити транзакції гаманця Solana в реальному часі. Згодом я створив бота для Discord, який надсилає вбудовані повідомлення про транзакції до вказаного каналу Discord.
Тепер давайте розглянемо код: почніть з створення нового проекту Node.js:
npm init -y your-project-name
Далі встановіть кілька корисних залежностей:
npm install @solana/web3.js nodemon
У вашому файлі package.json переконайтеся, що є хоча б один скрипт для запуску вашої програми, для цього нам також потрібно створити новий файл, який ми можемо назвати index.js. Потім додайте скрипт запуску до вашого файлу package.json:
{
"name": "you-project-name",
"version": "1.0.0",
"description": "crypto wallet watcher",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "nodemon index.js",
"start": "node index.js"
},
"author": {
"name": "Vincent Vitale",
"email": "[email protected]",
"url": "https://vincent-vitale.netlify.app/"
},
"engines": {
"node": "20.11.1"
},
"license": "ISC",
"dependencies": {
"@solana/web3.js": "^1.98.0",
"dotenv": "^16.4.7",
"nodemon": "^3.1.9",
}
}
Я зазвичай використовую команду npm run dev
, функція nodemon моніторить директорію вашого проєкту і автоматично перезапускає вашу Node.js програму, коли виявляє будь-які зміни.
У файлі index.js додайте потрібні залежності та код, що наведений нижче:
const { clusterApiUrl, Connection, PublicKey } = require("@solana/web3.js");
require("dotenv").config();
async function solWatch() {
try {
// Створення нового з'єднання з головним кластером Solana
// Підтверджена зобов'язаність отримує лише елементи, які були підтверджені в ланцюгу
const connection = new Connection(clusterApiUrl("mainnet-beta"), {
commitment: "confirmed",
maxSupportedTransactionVersion: 0
});
// ID гаманця користувача для моніторингу
let walletId = "suqh5sHtr8HyJ7q8scBimULPkPpA557prMG47xCHQfK";
// Перевірка, чи є гаманець дійсною адресою Solana
let isValid = PublicKey.isOnCurve(walletId); // Використовуємо isOnCurve для перевірки адреси
if (!isValid) {
console.error("Невірна адреса Solana");
return;
}
// Отримуємо хешовану адресу гаманця
const publicKey = new PublicKey(walletId);
// Підключення до мережі, з'єднання залишатиметься відкритим до переривання
connection.onLogs(publicKey, (logs, context) => {
// Отримання підпису журналу, це можна використовувати для отримання розібраної транзакції
// Або, якщо ви використовуєте сторонній сервіс, наприклад Helius, ви можете використовувати цей підпис для отримання деталей транзакції
console.log("ОТРИМАНО ЖУРНАЛ", logs.signature);
// Реалізуйте вашу логіку тут
});
} catch (error) {
console.error("Помилка при отриманні транзакцій:", error);
}
}
// Викликаємо функцію solWatch, щоб запустити її
solWatch();
Просто запустіть програму командою npm run dev
і чекайте, поки відбудеться транзакція! connection.onLogs
залишатиметься відкритим з'єднанням з мережею Solana до тих пір, поки з'єднання не буде перервано.
Дивіться в реальному часі тут: https://youtu.be/G2Bv62s950A
У своїй базовій функціональності це буде отримувати тисячі журналів транзакцій протягом дня, тепер у вас є всі можливості для отримання інформації про монети, типи дій та багато іншого!
Перекладено з: NodeJs Realtime Solana wallet transaction watcher