BARU: Helius mengakuisisi Light Protocol
Cara Memantau Pool Likuiditas Raydium
Blog/Pengembangan

Cara Memantau Pool Likuiditas Raydium

Engineer Pengalaman DeveloperAnam Ansari di XAnam Ansari di LinkedIn
Bacaan 7 menit
Daftar Isi

    Dalam keuangan tradisional, pembeli dan penjual menyediakan likuiditas untuk suatu aset melalui pasar terpusat. Keuangan terdesentralisasi (DeFi) menggunakan pool likuiditas sebagai gantinya. Pool likuiditas adalah smart contract yang memungkinkan pengguna membeli dan menjual kripto di bursa terdesentralisasi dan platform DeFi lainnya. Dengan memantau pool likuiditas, Anda dapat melacak kinerja aset tertentu dan mengambil keputusan yang tepat tentang kapan harus membeli, menjual, atau melakukan swap. Memantau pembuatan pool likuiditas baru juga dapat membantu Anda menemukan token yang baru diluncurkan.

    Artikel ini akan membahas dua pendekatan untuk memantau pool likuiditas: webhook dan WebSocket. Kita juga akan mempelajari cara menyiapkan webhook dan WebSocket untuk memantau peristiwa yang terjadi di pool likuiditas. Sebelum mempelajari cara kerja platform ini, Anda memerlukan Helius API Key. Anda dapat memperolehnya dengan mudah melalui Dasbor Helius. Daftar menggunakan akun GitHub, Solana Wallet, atau Google Anda, lalu buka bagian API Keys di bilah sisi kiri.

    Melalui Webhook

    Untuk membuatnya melalui webhook, kita perlu mengikuti tiga langkah utama. Pertama, kita akan menyiapkan Cloudflare Worker. Kedua, kita akan menyiapkan webhook Helius dan menambahkan URL Cloudflare Worker. Webhook akan memicu worker setiap kali transaksi dalam pool likuiditas terdeteksi. Terakhir, kita akan mengedit kode worker untuk menangani notifikasi ini dan mencatat responsnya.

    Menyiapkan Cloudflare Worker

    Kita akan menyiapkan worker yang dipicu oleh webhook. Kita akan menambahkan kode ke worker untuk menangani pemicu yang diterima dari webhook. Cloudflare Workers memungkinkan kita menerapkan kode serverless. Masuk atau daftar di situs web Cloudflare, lalu pilih Workers & Pages dari panel kiri di halaman utama.

    ‍Klik tombol Create application.

    ‍Selanjutnya, klik Create Worker.

    ‍Sekarang, klik Deploy.

    ‍Worker telah berhasil diterapkan. Salin tautan worker karena tautan ini akan digunakan untuk menyiapkan webhook kita.

    Menyiapkan Webhook

    Kita akan memantau Raydium, AMM pertama yang dibangun di Solana dan memanfaatkan central limit order book yang sepenuhnya terdesentralisasi. Central limit order book adalah metode eksekusi bergaya bursa yang umum digunakan di pasar ekuitas dan mencocokkan semua penawaran beli serta jual berdasarkan prioritas harga dan waktu. Central limit order book (CLOB) terdesentralisasi adalah sistem bursa yang beroperasi pada jaringan node terdistribusi, bukan melalui satu entitas pusat. 

    Kita akan membuat webhook menggunakan Helius. Webhook memungkinkan Anda memantau peristiwa on-chain dan memicu tindakan tertentu saat peristiwa tersebut terjadi. Kita akan mengonfigurasi webhook untuk memantau jenis transaksi tertentu dalam pool likuiditas Raydium yang ditentukan. Saat ini, Helius mendukung jenis transaksi berikut untuk Raydium: 

    Kode
    "RAYDIUM": [
       "WITHDRAW_LIQUIDITY"
       "ADD_LIQUIDITY"
       "CREATE_POOL"
       "SWAP"
     ]

    Webhook dapat dibuat menggunakan Dasbor Helius atau referensi API. Untuk membuatnya melalui Dasbor, buka bagian Webhooks di panel kiri, lalu klik New Webhook.

    Kemudian, konfigurasikan webhook dengan memberikan detail seperti:

    1. Jaringan: Mainnet/Devnet
    2. Jenis Webhook: Untuk memperoleh data yang diinginkan, pilih jenis webhook Enhanced, Raw, atau Discord. Jika Anda menginginkan data yang mudah dibaca, pilih Enhanced; kita akan memilih opsi ini. Namun, jika Anda memilih Discord, Anda harus mengirimkan URL Webhook, lalu bot akan memformat dan mengirimkan notifikasi secara langsung. Untuk mendapatkan bantuan, lihat artikel ini guna mempelajari cara menyiapkan webhook untuk Discord Bot. Jika memilih Raw, perlu diketahui bahwa Anda tidak dapat menentukan jenis transaksi.
    3. Jenis Transaksi: Pilih jenis transaksi yang ditampilkan pada gambar di bawah*.* Anda dapat menemukan jenis transaksi lain yang didukung oleh Program di sini. 
    4. URL Webhook: Tambahkan URL worker yang telah kita siapkan di Cloudflare (Jika Anda memilih Discord, Anda perlu memberikan URL Webhook untuk bot)
    5. Header Autentikasi: Masukkan header autentikasi yang akan disertakan dalam permintaan POST untuk webhook Anda. Perlu diketahui bahwa ini bersifat opsional.
    6. Alamat Account: Alamat Program AMM Raydium adalah: 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8. Anda juga dapat menambahkan lebih dari satu alamat account jika diperlukan. Anda juga dapat menyertakan alamat aset untuk memantaunya. 

    Setelah Anda mengeklik Confirm, webhook akan memberi tahu Cloudflare worker kita.

    Langkah berikutnya adalah menulis kode yang sesuai untuk menangani notifikasi tersebut.

    Menangani Notifikasi Webhook di Worker

    Kita perlu menginstal Wrangler CLI untuk menambahkan kode ke worker agar dapat menangani data dengan benar saat dipicu.

    Masuk ke akun Cloudflare Anda agar Wrangler dapat menerapkan skrip Anda ke Cloudflare.

    Buka command prompt/terminal, lalu masukkan perintah berikut:

    Kode
    wrangler login

    Saat Wrangler secara otomatis membuka browser Anda untuk menampilkan layar persetujuan Cloudflare, klik tombol Allow. Tindakan ini akan mengirimkan API Token ke Wrangler.‍

    Inisialisasi proyek baru dari Worker yang dibuat melalui Dasbor Cloudflare:

    Kode
    wrangler init --from-dash <worker-name>

    Periksa bagian Metrics untuk menemukan nama worker:

    ‍Perintah di atas akan membuat folder yang berisi konfigurasi dan kode worker. Selanjutnya, ganti kode dalam file src/index.js dengan kode yang disediakan di bawah ini. Pastikan Anda menambahkan API key. Sebaiknya ikuti praktik terbaik berikut untuk menyembunyikan API key Anda.

    Sekarang, kita akan menggunakan kode berikut di worker:

    Kode
    const HELIUS_API_KEY = API_KEY;
    const HELIUS_RPC_URL = `https://mainnet.helius-rpc.com/?api-key=${HELIUS_API_KEY}`;
    
    addEventListener('fetch', event => {
        event.respondWith(handleRequest(event.request))
    })
    
    async function handleRequest(request) {
        if (request.method === 'POST') {
            const requestBody = await request.json();
            console.log(requestBody[0].description);
    
            return new Response('Logged POST request body.', { status: 200 });
        } else {
            return new Response('Method not allowed.', { status: 405 });
        }
    }

    ‍Dalam kode ini, kita hanya mencatat deskripsi notifikasi. Notifikasi respons memiliki format transaksi yang telah diuraikan. Perlu diketahui bahwa data keuangan seperti informasi harga tidak disediakan. Anda dapat menggunakan platform seperti Jupiter dan Birdeye untuk memperoleh informasi keuangan.‍

    Terapkan proyek Anda ke jaringan global Cloudflare:

    Kode
    wrangler publish

    Setelah kode berhasil dipublikasikan, mari periksa log.

    Kembali ke situs web Cloudflare, lalu buka bagian Logs:

    ‍Klik tombol Begin Log Stream.

    ‍Anda dapat melihat data yang dicatat di bawah "message" dengan membuka detail log yang diterima.

    Melalui WebSocket

    WebSocket adalah protokol komunikasi yang memungkinkan pertukaran data secara real-time antara klien dan server. Ini berbeda dengan metode tradisional, yaitu klien mengirimkan permintaan dan menunggu respons dari server. Dengan WebSocket, koneksi tetap terbuka dan data terus dipertukarkan. Kita akan menggunakan WebSocket untuk memantau pool likuiditas Raydium.

    Untuk mendapatkan kecepatan respons yang lebih tinggi dalam proyek, kita akan menggunakan metode transactionSubscribe yang ditingkatkan Geyser dan tersedia sebagai fitur beta. Perlu diketahui bahwa metode ini hanya tersedia untuk paket Business atau Professional. WebSocket Geyser Enhanced lebih cepat daripada metode WebSocket RPC standar. Untuk memulai, mari buat proyek JavaScript dasar dan folder baru bernama websocket-test. Kemudian, kita perlu membuat file package.json.

    Kode
    {
        "name": "websocket-test",
        "version": "1.0.0",
        "description": "",
        "main": "index.js",
        "scripts": {
            "test": "echo \"Error: no test specified\" && exit 1",
            "start": "ts-node src/index.js"
        },
        "keywords": [],
        "author": "",
        "license": "ISC",
        "devDependencies": {
            "@types/bn.js": "^5.1.0",
            "ts-node": "^10.7.0",
            "typescript": "^4.6.3"
        },
        "dependencies": {
            "@solana/web3.js": "^1.41.3",
            "dotenv": "^16.0.0"
        }
    }
    

    Buat folder bernama src, lalu tambahkan file bernama index.js.

    Salin dan tempel kode berikut ke dalam file, lalu ganti <your-api-key> dengan Helius API Key Anda. 

    Kode
    const WebSocket = require('ws');
    
    // Function to send a request to the WebSocket server
    function sendRequest(ws) {
        const request = {
            jsonrpc: "2.0",
            id: 420,
            method: "transactionSubscribe",
            params: [{
                    failed: false,
                    accountInclude: ["675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"]
                },
                {
                    commitment: "processed",
                    encoding: "base64",
                    transactionDetails: "full",
                    showRewards: true,
                    maxSupportedTransactionVersion: 0
                }
            ]
        };
        ws.send(JSON.stringify(request));
    }
    
    function websocketHandler() {
        // Create a WebSocket connection
        let ws = new WebSocket('wss://atlas-mainnet.helius-rpc.com?api-key=<your-api-key>');
    
        // Define WebSocket event handlers
    
        ws.on('open', function open() {
            console.log('WebSocket is open');
            sendRequest(ws); // Send a request once the WebSocket is open
        });
    
        ws.on('message', function incoming(data) {
            const messageStr = data.toString('utf8');
            console.log('Received:', messageStr);
        });
    
        ws.on('error', function error(err) {
            console.error('WebSocket error:', err);
        });
    
        ws.on('close', function close() {
            console.log('WebSocket is closed');
            // connection closed, discard old websocket and create a new one in 5s
            ws = null
            setTimeout(startWebsocket, 5000)
        });
    }
    
    websocketHandler();

    Kita telah menambahkan Alamat Program AMM Raydium 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 dalam parameter array accountInclude pada permintaan. Anda dapat menambahkan parameter yang sesuai untuk memperoleh data yang diperlukan. 

    Kode ini terhubung ke WebSocket dan mencatat seluruh respons di konsol. WebSocket akan tertutup setelah tidak ada aktivitas selama ~5 menit. Untuk mencegahnya, logika koneksi ulang ditambahkan dalam handler onClose. 

    Jalankan perintah ini di command prompt/terminal: 

    Kode
    npm install && npm start

    Anda akan mulai melihat log seperti ini muncul di konsol:

    Kesimpulan

    Selesai! Menyiapkan webhook untuk memantau pool likuiditas sangatlah mudah. Sebagai alternatif, Anda dapat menggunakan metode WebSocket yang ditingkatkan Geyser untuk memperoleh respons lebih cepat. Setelah menyelesaikan penyiapan, Anda dapat membuat frontend yang sesuai untuk menampilkan data. Anda dapat menggunakan node khusus dengan plugin Geyser RPC untuk mendapatkan koneksi khusus yang lebih cepat. Jika mengalami masalah atau memerlukan bantuan, jangan ragu untuk menghubungi kami di Discord!

    Pastikan Anda memasukkan alamat email di bawah agar tidak melewatkan informasi terbaru tentang Solana. Siap mempelajari lebih lanjut? Jelajahi artikel terbaru di blog Helius dan lanjutkan perjalanan Solana Anda hari ini.

    Referensi

    ‍

    Berlangganan Helius

    Ikuti perkembangan terbaru dalam pengembangan Solana dan dapatkan pembaruan saat kami memublikasikan postingan

    Gambar diperbesar