Pelajari Topik Dasar Ethereum dengan SQL
Banyak tutorial Ethereum menargetkan pengembang, tetapi ada kekurangan sumber daya pendidikan untuk analis data atau untuk orang-orang yang ingin melihat data onchain tanpa menjalankan klien atau node.
Tutorial ini membantu pembaca memahami konsep dasar Ethereum termasuk transaksi, blok, dan gas dengan melakukan kueri data onchain menggunakan structured query language (SQL) melalui antarmuka yang disediakan oleh Dune Analytics (opens in a new tab).
Data onchain dapat membantu kita memahami Ethereum, jaringan, dan sebagai ekonomi untuk daya komputasi serta harus berfungsi sebagai dasar untuk memahami tantangan yang dihadapi Ethereum saat ini (misalnya, kenaikan harga gas) dan, yang lebih penting, diskusi seputar solusi peningkatan.
Transaksi
Perjalanan pengguna di Ethereum dimulai dengan menginisialisasi akun yang dikendalikan pengguna atau entitas dengan saldo ETH. Ada dua jenis akun - yang dikendalikan pengguna atau kontrak pintar (lihat ethereum.org).
Setiap akun dapat dilihat di penjelajah blok seperti Etherscan (opens in a new tab) atau Blockscout (opens in a new tab). Penjelajah blok adalah portal ke data Ethereum. Mereka menampilkan, secara real-time, data tentang blok, transaksi, penambang, akun, dan aktivitas onchain lainnya (lihat di sini).
Namun, pengguna mungkin ingin melakukan kueri data secara langsung untuk merekonsiliasi informasi yang disediakan oleh penjelajah blok eksternal. Dune Analytics (opens in a new tab) menyediakan kemampuan ini kepada siapa saja yang memiliki sedikit pengetahuan tentang SQL.
Sebagai referensi, akun kontrak pintar untuk Ethereum Foundation (EF) dapat dilihat di Blockscout (opens in a new tab).
Satu hal yang perlu diperhatikan adalah bahwa semua akun, termasuk milik EF, memiliki alamat publik yang dapat digunakan untuk mengirim dan menerima transaksi.
Saldo akun di Etherscan terdiri dari transaksi reguler dan transaksi internal. Transaksi internal, terlepas dari namanya, bukanlah transaksi sebenarnya yang mengubah status rantai. Mereka adalah transfer nilai yang diinisiasi dengan mengeksekusi kontrak (sumber (opens in a new tab)). Karena transaksi internal tidak memiliki tanda tangan, mereka tidak disertakan di blockchain dan tidak dapat dikueri dengan Dune Analytics.
Oleh karena itu, tutorial ini akan berfokus pada transaksi reguler. Ini dapat dikueri seperti ini:
1WITH temp_table AS (2SELECT3 hash,4 block_number,5 block_time,6 "from",7 "to",8 value / 1e18 AS ether,9 gas_used,10 gas_price / 1e9 AS gas_price_gwei11FROM ethereum."transactions"12WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'13ORDER BY block_time DESC14)15SELECT16 hash,17 block_number,18 block_time,19 "from",20 "to",21 ether,22 (gas_used * gas_price_gwei) / 1e9 AS txn_fee23FROM temp_tableTampilkan semuaIni akan menghasilkan informasi yang sama seperti yang disediakan di halaman transaksi Etherscan. Sebagai perbandingan, berikut adalah kedua sumber tersebut:
Etherscan
Halaman kontrak EF di Blockscout. (opens in a new tab)
Dune Analytics
Anda dapat menemukan dasbor di sini (opens in a new tab). Klik pada tabel untuk melihat kueri (lihat juga di atas).
Menguraikan Transaksi
Transaksi yang dikirimkan mencakup beberapa informasi termasuk (sumber):
- Penerima: Alamat penerima (dikueri sebagai "to")
- Tanda Tangan: Meskipun kunci pribadi pengirim menandatangani transaksi, apa yang dapat kita kueri dengan SQL adalah alamat publik pengirim ("from").
- Nilai: Ini adalah jumlah ETH yang ditransfer (lihat kolom
ether). - Data: Ini adalah data arbitrer yang telah di-hash (lihat kolom
data) - gasLimit – jumlah maksimum unit gas yang dapat dikonsumsi oleh transaksi. Unit gas mewakili langkah-langkah komputasi
- maxPriorityFeePerGas - jumlah maksimum gas yang akan disertakan sebagai tip kepada penambang
- maxFeePerGas - jumlah maksimum gas yang bersedia dibayarkan untuk transaksi (termasuk baseFeePerGas dan maxPriorityFeePerGas)
Kita dapat mengkueri informasi spesifik ini untuk transaksi ke alamat publik Ethereum Foundation:
1SELECT2 "to",3 "from",4 value / 1e18 AS ether,5 data,6 gas_limit,7 gas_price / 1e9 AS gas_price_gwei,8 gas_used,9 ROUND(((gas_used / gas_limit) * 100),2) AS gas_used_pct10FROM ethereum."transactions"11WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'12ORDER BY block_time DESCTampilkan semuaBlok
Setiap transaksi akan mengubah status Mesin Virtual Ethereum (EVM) (sumber). Transaksi disiarkan ke jaringan untuk diverifikasi dan disertakan dalam sebuah blok. Setiap transaksi dikaitkan dengan nomor blok. Untuk melihat datanya, kita dapat mengkueri nomor blok tertentu: 12396854 (blok terbaru di antara transaksi Ethereum Foundation pada saat penulisan ini, 11/5/21).
Selain itu, ketika kita mengkueri dua blok berikutnya, kita dapat melihat bahwa setiap blok berisi hash dari blok sebelumnya (yaitu, hash induk), yang mengilustrasikan bagaimana blockchain terbentuk.
Setiap blok berisi referensi ke blok induknya. Ini ditunjukkan di bawah ini antara kolom hash dan parent_hash (sumber):
Berikut adalah kueri (opens in a new tab) di Dune Analytics:
1SELECT2 time,3 number,4 hash,5 parent_hash,6 nonce7FROM ethereum."blocks"8WHERE "number" = 12396854 OR "number" = 12396855 OR "number" = 123968569LIMIT 10Tampilkan semuaKita dapat memeriksa sebuah blok dengan mengkueri waktu, nomor blok, kesulitan, hash, hash induk, dan nonce.
Satu-satunya hal yang tidak dicakup oleh kueri ini adalah daftar transaksi yang memerlukan kueri terpisah di bawah ini dan akar status (state root). Node penuh atau arsip akan menyimpan semua transaksi dan transisi status, memungkinkan klien untuk mengkueri status rantai kapan saja. Karena ini membutuhkan ruang penyimpanan yang besar, kita dapat memisahkan data rantai dari data status:
- Data rantai (daftar blok, transaksi)
- Data status (hasil dari transisi status setiap transaksi)
Akar status termasuk dalam yang terakhir dan merupakan data implisit (tidak disimpan onchain), sedangkan data rantai bersifat eksplisit dan disimpan di rantai itu sendiri (sumber (opens in a new tab)).
Untuk tutorial ini, kita akan berfokus pada data onchain yang dapat dikueri dengan SQL melalui Dune Analytics.
Seperti yang dinyatakan di atas, setiap blok berisi daftar transaksi, kita dapat mengkuerinya dengan memfilter blok tertentu. Kita akan mencoba blok terbaru, 12396854:
1SELECT * FROM ethereum."transactions"2WHERE block_number = 123968543ORDER BY block_time DESC`Berikut adalah keluaran SQL di Dune:
Satu blok ini yang ditambahkan ke rantai mengubah status Mesin Virtual Ethereum (EVM). Puluhan, terkadang ratusan transaksi diverifikasi sekaligus. Dalam kasus khusus ini, 222 transaksi disertakan.
Untuk melihat berapa banyak yang benar-benar berhasil, kita akan menambahkan filter lain untuk menghitung transaksi yang berhasil:
1WITH temp_table AS (2 SELECT * FROM ethereum."transactions"3 WHERE block_number = 12396854 AND success = true4 ORDER BY block_time DESC5)6SELECT7 COUNT(success) AS num_successful_txn8FROM temp_tableUntuk blok 12396854, dari total 222 transaksi, 204 berhasil diverifikasi:
Permintaan transaksi terjadi puluhan kali per detik, tetapi blok dikomit kira-kira setiap 15 detik sekali (sumber).
Untuk melihat bahwa ada satu blok yang diproduksi kira-kira setiap 15 detik, kita dapat mengambil jumlah detik dalam sehari (86400) dibagi 15 untuk mendapatkan perkiraan jumlah rata-rata blok per hari (~ 5760).
Grafik untuk blok Ethereum yang diproduksi per hari (2016 - sekarang) adalah:
Jumlah rata-rata blok yang diproduksi setiap hari selama periode waktu ini adalah ~5.874:
Kuerinya adalah:
1# query to visualize number of blocks produced daily since 201623SELECT4 DATE_TRUNC('day', time) AS dt,5 COUNT(*) AS block_count6FROM ethereum."blocks"7GROUP BY dt8OFFSET 1910# average number of blocks produced per day1112WITH temp_table AS (13SELECT14 DATE_TRUNC('day', time) AS dt,15 COUNT(*) AS block_count16FROM ethereum."blocks"17GROUP BY dt18OFFSET 119)20SELECT21 AVG(block_count) AS avg_block_count22FROM temp_tableTampilkan semuaJumlah rata-rata blok yang diproduksi per hari sejak 2016 sedikit di atas angka tersebut yaitu 5.874. Sebagai alternatif, membagi 86400 detik dengan rata-rata 5874 blok menghasilkan 14,7 detik atau kira-kira satu blok setiap 15 detik.
Gas
Blok dibatasi ukurannya. Ukuran blok maksimum bersifat dinamis dan bervariasi sesuai dengan permintaan jaringan antara 12.500.000 dan 25.000.000 unit. Batasan diperlukan untuk mencegah ukuran blok yang terlalu besar membebani node penuh dalam hal ruang disk dan persyaratan kecepatan (sumber).
Salah satu cara untuk mengonseptualisasikan batas gas blok adalah dengan menganggapnya sebagai pasokan ruang blok yang tersedia untuk mengelompokkan transaksi. Batas gas blok dapat dikueri dan divisualisasikan dari tahun 2016 hingga saat ini:
1SELECT2 DATE_TRUNC('day', time) AS dt,3 AVG(gas_limit) AS avg_block_gas_limit4FROM ethereum."blocks"5GROUP BY dt6OFFSET 1Kemudian ada gas aktual yang digunakan setiap hari untuk membayar komputasi yang dilakukan di rantai Ethereum (misalnya, mengirim transaksi, memanggil kontrak pintar, melakukan mint NFT). Ini adalah permintaan untuk ruang blok Ethereum yang tersedia:
1SELECT2 DATE_TRUNC('day', time) AS dt,3 AVG(gas_used) AS avg_block_gas_used4FROM ethereum."blocks"5GROUP BY dt6OFFSET 1Kita juga dapat menyandingkan kedua grafik ini bersama-sama untuk melihat bagaimana permintaan dan pasokan sejajar:
Oleh karena itu kita dapat memahami harga gas sebagai fungsi dari permintaan untuk ruang blok Ethereum, mengingat pasokan yang tersedia.
Terakhir, kita mungkin ingin mengkueri rata-rata harga gas harian untuk rantai Ethereum, namun, melakukan hal itu akan menghasilkan waktu kueri yang sangat lama, jadi kita akan memfilter kueri kita ke jumlah rata-rata gas yang dibayarkan per transaksi oleh Ethereum Foundation.
Kita dapat melihat harga gas yang dibayarkan untuk semua transaksi yang dilakukan ke alamat Ethereum Foundation selama bertahun-tahun. Berikut adalah kuerinya:
1SELECT2 block_time,3 gas_price / 1e9 AS gas_price_gwei,4 value / 1e18 AS eth_sent5FROM ethereum."transactions"6WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'7ORDER BY block_time DESCRingkasan
Dengan tutorial ini, kita memahami konsep dasar Ethereum dan bagaimana blockchain Ethereum bekerja dengan mengkueri dan merasakan data onchain.
Dasbor yang menyimpan semua kode yang digunakan dalam tutorial ini dapat ditemukan di sini (opens in a new tab).
Untuk penggunaan data lebih lanjut dalam menjelajahi web3 temukan saya di Twitter (opens in a new tab).
Pembaruan terakhir halaman: 26 Februari 2026










