API JSON-RPC
Agar aplikasi perangkat lunak dapat berinteraksi dengan rantai blok Ethereum - baik dengan membaca data rantai blok atau mengirim transaksi ke jaringan - aplikasi tersebut harus terhubung ke node Ethereum.
Untuk tujuan ini, setiap klien Ethereum mengimplementasikan spesifikasi JSON-RPC (opens in a new tab), sehingga terdapat serangkaian metode seragam yang dapat diandalkan oleh aplikasi terlepas dari implementasi node atau klien tertentu.
JSON-RPC (opens in a new tab) adalah protokol pemanggilan prosedur jarak jauh (RPC) yang ringan dan stateless. Protokol ini mendefinisikan beberapa struktur data dan aturan seputar pemrosesannya. Protokol ini bersifat agnostik terhadap transportasi, yang berarti konsep-konsepnya dapat digunakan dalam proses yang sama, melalui soket, melalui HTTP, atau dalam berbagai lingkungan penyampaian pesan. Protokol ini menggunakan JSON (RFC 4627) sebagai format data.
Implementasi klien
Klien Ethereum masing-masing dapat menggunakan bahasa pemrograman yang berbeda saat mengimplementasikan spesifikasi JSON-RPC. Lihat dokumentasi klien masing-masing untuk detail lebih lanjut terkait bahasa pemrograman tertentu. Kami menyarankan untuk memeriksa dokumentasi setiap klien untuk informasi dukungan API terbaru.
Pustaka Praktis
Meskipun Anda dapat memilih untuk berinteraksi langsung dengan klien Ethereum melalui API JSON-RPC, sering kali ada opsi yang lebih mudah bagi pengembang dapp. Banyak pustaka JavaScript dan API backend yang ada untuk menyediakan pembungkus di atas API JSON-RPC. Dengan pustaka-pustaka ini, pengembang dapat menulis metode satu baris yang intuitif dalam bahasa pemrograman pilihan mereka untuk menginisialisasi permintaan JSON-RPC (di balik layar) yang berinteraksi dengan Ethereum.
API klien konsensus
Halaman ini terutama membahas tentang API JSON-RPC yang digunakan oleh klien eksekusi Ethereum. Namun, klien konsensus juga memiliki API RPC yang memungkinkan pengguna untuk meminta informasi tentang node, meminta blok Beacon, state Beacon, dan informasi terkait konsensus lainnya secara langsung dari sebuah node. API ini didokumentasikan di halaman web API Beacon (opens in a new tab).
API internal juga digunakan untuk komunikasi antar-klien di dalam sebuah node - yaitu, memungkinkan klien konsensus dan klien eksekusi untuk bertukar data. Ini disebut 'Engine API' dan spesifikasinya tersedia di GitHub (opens in a new tab).
Spesifikasi klien eksekusi
Baca spesifikasi lengkap API JSON-RPC di GitHub (opens in a new tab). API ini didokumentasikan di halaman web API Eksekusi (opens in a new tab) dan menyertakan Inspector untuk mencoba semua metode yang tersedia.
Konvensi
Pengodean nilai hex
Dua tipe data utama diteruskan melalui JSON: larik bita yang tidak diformat dan kuantitas. Keduanya diteruskan dengan pengodean hex tetapi dengan persyaratan pemformatan yang berbeda.
Kuantitas
Saat mengodekan kuantitas (bilangan bulat, angka): kodekan sebagai hex, beri awalan "0x", representasi paling ringkas (sedikit pengecualian: nol harus direpresentasikan sebagai "0x0").
Berikut adalah beberapa contoh:
- 0x41 (65 dalam desimal)
- 0x400 (1024 dalam desimal)
- SALAH: 0x (harus selalu memiliki setidaknya satu digit - nol adalah "0x0")
- SALAH: 0x0400 (tidak boleh ada angka nol di depan)
- SALAH: ff (harus diawali dengan 0x)
Data yang tidak diformat
Saat mengodekan data yang tidak diformat (larik bita, alamat akun, hash, larik kode bita): kodekan sebagai hex, beri awalan "0x", dua digit hex per bita.
Berikut adalah beberapa contoh:
- 0x41 (ukuran 1, "A")
- 0x004200 (ukuran 3, "0B0")
- 0x (ukuran 0, "")
- SALAH: 0xf0f0f (jumlah digit harus genap)
- SALAH: 004200 (harus diawali dengan 0x)
Parameter blok
Metode berikut memiliki parameter blok:
Saat permintaan dibuat yang menanyakan state Ethereum, parameter blok yang diberikan menentukan ketinggian blok.
Opsi berikut dimungkinkan untuk parameter blok:
HEX String- nomor blok bilangan bulatString "earliest"untuk blok paling awal/blok genesisString "latest"- untuk blok yang diusulkan terbaruString "safe"- untuk blok head aman terbaruString "finalized"- untuk blok yang difinalisasi terbaruString "pending"- untuk state/transaksi yang tertunda
Contoh
Di halaman ini kami menyediakan contoh cara menggunakan titik akhir API JSON_RPC individual menggunakan alat baris perintah, curl (opens in a new tab). Contoh titik akhir individual ini dapat ditemukan di bawah pada bagian Contoh curl. Lebih jauh ke bawah di halaman ini, kami juga menyediakan contoh ujung-ke-ujung (end-to-end) untuk mengkompilasi dan menyebarkan kontrak pintar menggunakan node Geth, API JSON_RPC, dan curl.
Contoh curl
Contoh penggunaan API JSON_RPC dengan membuat permintaan curl (opens in a new tab) ke node Ethereum disediakan di bawah ini. Setiap contoh mencakup deskripsi titik akhir tertentu, parameternya, jenis pengembalian, dan contoh praktis tentang cara penggunaannya.
Permintaan curl mungkin mengembalikan pesan kesalahan yang berkaitan dengan jenis konten. Hal ini karena opsi --data mengatur jenis konten menjadi application/x-www-form-urlencoded. Jika node Anda mengeluhkan hal ini, atur header secara manual dengan menempatkan -H "Content-Type: application/json" di awal panggilan. Contoh-contoh ini juga tidak menyertakan kombinasi URL/IP & port yang harus menjadi argumen terakhir yang diberikan ke curl (misalnya, 127.0.0.1:8545). Permintaan curl lengkap yang menyertakan data tambahan ini mengambil bentuk berikut:
curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545
Gossip, State, Riwayat
Beberapa metode inti JSON-RPC memerlukan data dari jaringan Ethereum, dan terbagi rapi ke dalam tiga kategori utama: Gossip, State, dan Riwayat. Gunakan tautan di bagian ini untuk melompat ke setiap metode, atau gunakan daftar isi untuk menjelajahi seluruh daftar metode.
Metode Gossip
Metode-metode ini melacak bagian terdepan dari rantai. Ini adalah cara transaksi menyebar di sekitar jaringan, masuk ke dalam blok, dan bagaimana klien mengetahui tentang blok baru.
Metode State
Metode yang melaporkan state saat ini dari semua data yang disimpan. "State" ini seperti satu bagian besar RAM yang digunakan bersama, dan mencakup saldo akun, data kontrak, dan estimasi gas.
Metode Riwayat
Mengambil catatan riwayat dari setiap blok kembali ke genesis. Ini seperti satu file besar yang hanya bisa ditambahkan (append-only), dan mencakup semua header blok, badan blok, blok paman (uncle block), dan tanda terima transaksi.
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getTransactionByHash
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
Playground API JSON-RPC
Anda dapat menggunakan alat playground (opens in a new tab) untuk menemukan dan mencoba metode-metode API. Alat ini juga menunjukkan kepada Anda metode dan jaringan mana yang didukung oleh berbagai penyedia node.
Metode API JSON-RPC
web3_clientVersion
Mengembalikan versi klien saat ini.
Parameter
Tidak ada
Kembalian
String - Versi klien saat ini
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'
// Hasil
{
"id":67,
"jsonrpc":"2.0",
"result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"
}
web3_sha3
Mengembalikan Keccak-256 (bukan SHA3-256 yang distandarisasi) dari data yang diberikan.
Parameter
DATA- Data yang akan dikonversi menjadi hash SHA3
params: ["0x68656c6c6f20776f726c64"]
Mengembalikan
DATA - Hasil SHA3 dari string yang diberikan.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'
// Hasil
{
"id":64,
"jsonrpc": "2.0",
"result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"
}
net_version
Mengembalikan id jaringan saat ini.
Parameter
Tidak ada
Mengembalikan
String - Id jaringan saat ini.
Daftar lengkap ID jaringan saat ini tersedia di chainlist.org (opens in a new tab). Beberapa yang umum adalah:
1: Mainnet Ethereum11155111: testnet Sepolia560048: Testnet Hoodi
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'
// Hasil
{
"id":67,
"jsonrpc": "2.0",
"result": "3"
}
net_listening
Mengembalikan true jika klien secara aktif mendengarkan koneksi jaringan.
Parameter
Tidak ada
Kembalian
Boolean - true saat mendengarkan, jika tidak false.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'
// Hasil
{
"id":67,
"jsonrpc":"2.0",
"result":true
}
net_peerCount
Mengembalikan jumlah peer yang saat ini terhubung ke klien.
Parameter
Tidak ada
Mengembalikan
QUANTITY - bilangan bulat dari jumlah peer yang terhubung.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'
// Hasil
{
"id":74,
"jsonrpc": "2.0",
"result": "0x2" // 2
}
eth_protocolVersion
Mengembalikan versi protokol Ethereum saat ini. Perhatikan bahwa metode ini tidak tersedia di Geth (opens in a new tab).
Parameter
Tidak ada
Mengembalikan
String - Versi protokol Ethereum saat ini
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'
// Hasil
{
"id":67,
"jsonrpc": "2.0",
"result": "54"
}
eth_syncing
Mengembalikan sebuah objek dengan data tentang status sinkronisasi atau false.
Parameter
Tidak ada
Kembalian
Data kembalian yang tepat bervariasi di antara implementasi klien. Semua klien mengembalikan False ketika node tidak melakukan sinkronisasi, dan semua klien mengembalikan bidang-bidang berikut.
Object|Boolean, Sebuah objek dengan data status sinkronisasi atau FALSE, ketika tidak melakukan sinkronisasi:
startingBlock:QUANTITY- Blok di mana impor dimulai (hanya akan diatur ulang, setelah sinkronisasi mencapai head-nya)currentBlock:QUANTITY- Blok saat ini, sama dengan eth_blockNumberhighestBlock:QUANTITY- Perkiraan blok tertinggi
Namun, masing-masing klien mungkin juga menyediakan data tambahan. Misalnya Geth mengembalikan yang berikut ini:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"currentBlock": "0x3cf522",
"healedBytecodeBytes": "0x0",
"healedBytecodes": "0x0",
"healedTrienodes": "0x0",
"healingBytecode": "0x0",
"healingTrienodes": "0x0",
"highestBlock": "0x3e0e41",
"startingBlock": "0x3cbed5",
"syncedAccountBytes": "0x0",
"syncedAccounts": "0x0",
"syncedBytecodeBytes": "0x0",
"syncedBytecodes": "0x0",
"syncedStorage": "0x0",
"syncedStorageBytes": "0x0"
}
}
Sedangkan Besu mengembalikan:
{
"jsonrpc": "2.0",
"id": 51,
"result": {
"startingBlock": "0x0",
"currentBlock": "0x1518",
"highestBlock": "0x9567a3",
"pulledStates": "0x203ca",
"knownStates": "0x200636"
}
}
Rujuk ke dokumentasi untuk klien spesifik Anda untuk detail lebih lanjut.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": {
startingBlock: '0x384',
currentBlock: '0x386',
highestBlock: '0x454'
}
}
// Atau saat tidak melakukan sinkronisasi
{
"id":1,
"jsonrpc": "2.0",
"result": false
}
eth_coinbase
Mengembalikan alamat coinbase klien.
Coba endpoint di playground (opens in a new tab)Catatan: Metode ini telah usang sejak v1.14.0 dan tidak lagi didukung. Mencoba menggunakan metode ini akan menghasilkan kesalahan "Method not supported".
Parameter
Tidak ada
Mengembalikan
DATA, 20 byte - alamat coinbase saat ini.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'
// Hasil
{
"id":64,
"jsonrpc": "2.0",
"result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"
}
eth_chainId
Mengembalikan ID rantai yang digunakan untuk penandatanganan transaksi yang dilindungi dari pemutaran ulang.
Coba endpoint di playground (opens in a new tab)Parameter
Tidak ada
Mengembalikan
chainId, nilai heksadesimal sebagai string yang mewakili bilangan bulat dari id rantai saat ini.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'
// Hasil
{
"id":67,
"jsonrpc": "2.0",
"result": "0x1"
}
eth_mining
Mengembalikan true jika klien sedang aktif menambang blok baru. Ini hanya dapat mengembalikan true untuk jaringan Bukti Kerja (PoW) dan mungkin tidak tersedia di beberapa klien sejak The Merge.
Parameter
Tidak ada
Mengembalikan
Boolean - mengembalikan true jika klien sedang menambang, jika tidak false.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'
//
{
"id":71,
"jsonrpc": "2.0",
"result": true
}
eth_hashrate
Mengembalikan jumlah hash per detik yang digunakan node saat melakukan penambangan. Ini hanya dapat mengembalikan true untuk jaringan Bukti Kerja (PoW) dan mungkin tidak tersedia di beberapa klien sejak The Merge.
Parameter
Tidak ada
Kembalian
QUANTITY - jumlah hash per detik.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'
// Hasil
{
"id":71,
"jsonrpc": "2.0",
"result": "0x38a"
}
eth_gasPrice
Mengembalikan perkiraan harga saat ini per gas dalam Wei. Misalnya, klien Besu memeriksa 100 blok terakhir dan mengembalikan harga satuan gas median secara default.
Coba endpoint di playground (opens in a new tab)Parameter
Tidak ada
Mengembalikan
QUANTITY - bilangan bulat dari harga gas saat ini dalam Wei.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'
// Hasil
{
"id":73,
"jsonrpc": "2.0",
"result": "0x1dfd14000" // 8049999872 Wei
}
eth_accounts
Mengembalikan daftar alamat yang dimiliki oleh klien.
Coba endpoint di playground (opens in a new tab)Parameter
Tidak ada
Kembalian
Array of DATA, 20 Byte - alamat yang dimiliki oleh klien.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
}
eth_blockNumber
Mengembalikan nomor dari blok terbaru.
Coba endpoint di playground (opens in a new tab)Parameter
Tidak ada
Mengembalikan
QUANTITY - bilangan bulat dari nomor blok saat ini pada klien.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'
// Hasil
{
"id":83,
"jsonrpc": "2.0",
"result": "0x4b7" // 1207
}
eth_getBalance
Mengembalikan saldo akun pada alamat yang diberikan.
Coba titik akhir di playground (opens in a new tab)Parameter
DATA, 20 Byte - alamat untuk memeriksa saldo.QUANTITY|TAG- nomor blok bilangan bulat, atau string"latest","earliest","pending","safe", atau"finalized", lihat parameter blok
params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]
Mengembalikan
QUANTITY - bilangan bulat dari saldo saat ini dalam Wei.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x0234c8a3397aab58" // 158972490234375000
}
eth_getStorageAt
Mengembalikan nilai dari posisi penyimpanan pada alamat tertentu.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 20 Byte - alamat penyimpanan.QUANTITY- bilangan bulat dari posisi di penyimpanan.QUANTITY|TAG- nomor blok bilangan bulat, atau string"latest","earliest","pending","safe","finalized", lihat parameter blok
Mengembalikan
DATA - nilai pada posisi penyimpanan ini.
Contoh
Menghitung posisi yang benar bergantung pada penyimpanan yang akan diambil. Pertimbangkan kontrak berikut yang disebarkan pada 0x295a70b2de5e3953354a6a8344e616ed314d7251 oleh alamat 0x391694e7e0b0cce554cb130d723a9d27458f9298.
contract Storage {
uint pos0;
mapping(address => uint) pos1;
constructor() {
pos0 = 1234;
pos1[msg.sender] = 5678;
}
}
Mengambil nilai pos0 cukup mudah:
curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}
Mengambil elemen dari peta (map) lebih sulit. Posisi elemen dalam peta dihitung dengan:
keccak(LeftPad32(key, 0), LeftPad32(map position, 0))
Ini berarti untuk mengambil penyimpanan pada pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] kita perlu menghitung posisinya dengan:
keccak(
decodeHex(
"000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +
"0000000000000000000000000000000000000000000000000000000000000001"
)
)
Konsol geth yang disertakan dengan pustaka Web3 dapat digunakan untuk melakukan perhitungan:
> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"
undefined
> web3.sha3(key, {"encoding": "hex"})
"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"
Sekarang untuk mengambil penyimpanan:
curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}
eth_getTransactionCount
Mengembalikan jumlah transaksi yang dikirim dari sebuah alamat.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 20 Byte - alamat.QUANTITY|TAG- nomor blok bilangan bulat, atau string"latest","earliest","pending","safe"atau"finalized", lihat parameter blok
params: [
"0x407d73d8a49eeb85d32cf465507dd71d507100c1",
"latest", // state pada blok terbaru
]
Mengembalikan
QUANTITY - bilangan bulat dari jumlah transaksi yang dikirim dari alamat ini.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x1" // 1
}
eth_getBlockTransactionCountByHash
Mengembalikan jumlah transaksi dalam sebuah blok dari blok yang cocok dengan hash blok yang diberikan.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 32 Byte - hash dari sebuah blok
params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]
Mengembalikan
QUANTITY - bilangan bulat dari jumlah transaksi dalam blok ini.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x8b" // 139
}
eth_getBlockTransactionCountByNumber
Mengembalikan jumlah transaksi dalam sebuah blok yang cocok dengan nomor blok yang diberikan.
Coba endpoint di playground (opens in a new tab)Parameter
QUANTITY|TAG- integer dari nomor blok, atau string"earliest","latest","pending","safe"atau"finalized", seperti pada parameter blok.
params: [
"0x13738ca", // 20396234
]
Mengembalikan
QUANTITY - integer dari jumlah transaksi dalam blok ini.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x8b" // 139
}
eth_getUncleCountByBlockHash
Mengembalikan jumlah uncle dalam sebuah blok dari blok yang cocok dengan hash blok yang diberikan.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 32 Byte - hash dari sebuah blok
params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]
Mengembalikan
QUANTITY - integer dari jumlah uncle dalam blok ini.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x1" // 1
}
eth_getUncleCountByBlockNumber
Mengembalikan jumlah uncle dalam sebuah blok dari blok yang cocok dengan nomor blok yang diberikan.
Coba endpoint di playground (opens in a new tab)Parameter
QUANTITY|TAG- bilangan bulat dari nomor blok, atau string"latest","earliest","pending","safe"atau"finalized", lihat parameter blok
params: [
"0xe8", // 232
]
Mengembalikan
QUANTITY - bilangan bulat dari jumlah uncle dalam blok ini.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x0" // 0
}
eth_getCode
Mengembalikan kode pada alamat yang diberikan.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 20 Byte - alamatQUANTITY|TAG- nomor blok bilangan bulat, atau string"latest","earliest","pending","safe"atau"finalized", lihat parameter blok
params: [
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"0x5daf3b", // 6139707
]
Mengembalikan
DATA - kode dari alamat yang diberikan.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"
}
eth_sign
Metode sign menghitung tanda tangan khusus Ethereum dengan: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).
Menambahkan awalan pada pesan membuat tanda tangan yang dihitung dapat dikenali sebagai tanda tangan khusus Ethereum. Hal ini mencegah penyalahgunaan di mana aplikasi terdesentralisasi (dapp) berbahaya dapat menandatangani data arbitrer (misalnya, transaksi) dan menggunakan tanda tangan tersebut untuk meniru korban.
Catatan: alamat yang digunakan untuk menandatangani harus tidak terkunci.
Parameter
DATA, 20 Byte - alamatDATA, N Byte - pesan untuk ditandatangani
Kembalian
DATA: Tanda tangan
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}
eth_signTransaction
Menandatangani transaksi yang dapat dikirimkan ke jaringan di lain waktu menggunakan eth_sendRawTransaction.
Parameter
Object- Objek transaksi
type:from:DATA, 20 Byte - Alamat asal pengiriman transaksi.to:DATA, 20 Byte - (opsional saat membuat kontrak baru) Alamat tujuan transaksi.gas:QUANTITY- (opsional, bawaan: 90000) Bilangan bulat dari gas yang disediakan untuk eksekusi transaksi. Ini akan mengembalikan gas yang tidak terpakai.gasPrice:QUANTITY- (opsional, bawaan: Akan Ditentukan) Bilangan bulat dari gasPrice yang digunakan untuk setiap gas yang dibayar, dalam Wei.value:QUANTITY- (opsional) Bilangan bulat dari nilai yang dikirim bersama transaksi ini, dalam Wei.data:DATA- Kode kompilasi dari sebuah kontrak ATAU hash dari tanda tangan metode yang dipanggil dan parameter yang dienkode.nonce:QUANTITY- (opsional) Bilangan bulat dari sebuah nonce. Ini memungkinkan untuk menimpa transaksi tertunda Anda sendiri yang menggunakan nonce yang sama.
Kembalian
DATA, Objek transaksi yang dienkode RLP yang ditandatangani oleh akun yang ditentukan.
Contoh
// Permintaan
curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'
// Hasil
{
"id": 1,
"jsonrpc": "2.0",
"result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}
eth_sendTransaction
Membuat transaksi panggilan pesan baru atau pembuatan kontrak, jika bidang data berisi kode, dan menandatanganinya menggunakan akun yang ditentukan dalam from.
Parameter
Object- Objek transaksi
from:DATA, 20 Byte - Alamat asal pengiriman transaksi.to:DATA, 20 Byte - (opsional saat membuat kontrak baru) Alamat tujuan transaksi.gas:QUANTITY- (opsional, bawaan: 90000) Bilangan bulat dari gas yang disediakan untuk eksekusi transaksi. Ini akan mengembalikan gas yang tidak terpakai.gasPrice:QUANTITY- (opsional, bawaan: Akan Ditentukan) Bilangan bulat dari gasPrice yang digunakan untuk setiap gas yang dibayar.value:QUANTITY- (opsional) Bilangan bulat dari nilai yang dikirim dengan transaksi ini.input:DATA- Kode kompilasi dari sebuah kontrak ATAU hash dari tanda tangan metode yang dipanggil dan parameter yang dienkode.nonce:QUANTITY- (opsional) Bilangan bulat dari sebuah nonce. Ini memungkinkan untuk menimpa transaksi tertunda Anda sendiri yang menggunakan nonce yang sama.
params: [
{
from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
gas: "0x76c0", // 30400
gasPrice: "0x9184e72a000", // 10000000000000
value: "0x9184e72a", // 2441406250
input:
"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
},
]
Kembalian
DATA, 32 Byte - hash transaksi, atau hash nol jika transaksi belum tersedia.
Gunakan eth_getTransactionReceipt untuk mendapatkan alamat kontrak, setelah transaksi diusulkan dalam sebuah blok, saat Anda membuat kontrak.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}
eth_sendRawTransaction
Membuat transaksi panggilan pesan baru atau pembuatan kontrak untuk transaksi yang ditandatangani.
Parameter
DATA, Data transaksi yang ditandatangani.
params: [
"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
]
Kembalian
DATA, 32 Byte - hash transaksi, atau hash nol jika transaksi belum tersedia.
Gunakan eth_getTransactionReceipt untuk mendapatkan alamat kontrak, setelah transaksi diusulkan dalam sebuah blok, saat Anda membuat kontrak.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}
eth_call
Mengeksekusi panggilan pesan baru dengan segera tanpa membuat transaksi di rantai blok. Sering digunakan untuk mengeksekusi fungsi kontrak pintar yang hanya-baca (read-only), misalnya balanceOf untuk kontrak ERC-20.
Parameter
Object- Objek panggilan transaksi
from:DATA, 20 Byte - (opsional) Alamat asal pengiriman transaksi.to:DATA, 20 Byte - Alamat tujuan pengiriman transaksi.gas:QUANTITY- (opsional) Integer dari gas yang disediakan untuk eksekusi transaksi. eth_call mengonsumsi nol gas, tetapi parameter ini mungkin dibutuhkan oleh beberapa eksekusi.gasPrice:QUANTITY- (opsional) Integer dari harga gas yang digunakan untuk setiap gas yang dibayarvalue:QUANTITY- (opsional) Integer dari nilai yang dikirim bersama transaksi iniinput:DATA- (opsional) Hash dari tanda tangan metode dan parameter yang dienkode. Untuk detailnya, lihat ABI Kontrak Ethereum dalam dokumentasi Solidity (opens in a new tab).
QUANTITY|TAG- integer nomor blok, atau string"latest","earliest","pending","safe"atau"finalized", lihat parameter blok
Kembalian
DATA - nilai kembalian dari kontrak yang dieksekusi.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x"
}
eth_estimateGas
Menghasilkan dan mengembalikan perkiraan berapa banyak gas yang diperlukan untuk memungkinkan transaksi selesai. Transaksi tidak akan ditambahkan ke rantai blok. Perhatikan bahwa perkiraan tersebut mungkin jauh lebih besar daripada jumlah gas yang sebenarnya digunakan oleh transaksi, karena berbagai alasan termasuk mekanika EVM dan kinerja node.
Coba endpoint di playground (opens in a new tab)Parameter
Lihat parameter eth_call, kecuali bahwa semua properti bersifat opsional. Jika tidak ada batas gas yang ditentukan, geth menggunakan batas gas blok dari blok yang tertunda sebagai batas atas. Akibatnya, perkiraan yang dikembalikan mungkin tidak cukup untuk mengeksekusi panggilan/transaksi ketika jumlah gas lebih tinggi dari batas gas blok yang tertunda.
Mengembalikan
QUANTITY - jumlah gas yang digunakan.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x5208" // 21000
}
eth_getBlockByHash
Mengembalikan informasi tentang sebuah blok berdasarkan hash.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 32 Byte - Hash dari sebuah blok.Boolean- Jikatrueini mengembalikan objek transaksi lengkap, jikafalsehanya hash dari transaksi tersebut.
params: [
"0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",
false,
]
Mengembalikan
Object - Sebuah objek blok, atau null ketika tidak ada blok yang ditemukan:
number:QUANTITY- nomor blok.nullketika ini adalah blok yang tertunda.hash:DATA, 32 Byte - hash dari blok.nullketika ini adalah blok yang tertunda.parentHash:DATA, 32 Byte - hash dari blok induk.nonce:DATA, 8 Byte - hash dari Bukti Kerja (PoW) yang dihasilkan.nullketika ini adalah blok yang tertunda,0x0untuk blok Bukti Kepemilikan (PoS) (sejak The Merge)sha3Uncles:DATA, 32 Byte - SHA3 dari data uncle di dalam blok.logsBloom:DATA, 256 Byte - filter bloom untuk log dari blok tersebut.nullketika ini adalah blok yang tertunda.transactionsRoot:DATA, 32 Byte - akar dari trie transaksi blok tersebut.stateRoot:DATA, 32 Byte - akar dari trie keadaan akhir blok tersebut.receiptsRoot:DATA, 32 Byte - akar dari trie tanda terima blok tersebut.miner:DATA, 20 Byte - alamat penerima manfaat yang diberikan imbalan blok.difficulty:QUANTITY- bilangan bulat dari kesulitan untuk blok ini.totalDifficulty:QUANTITY- bilangan bulat dari total kesulitan rantai hingga blok ini.extraData:DATA- bidang "data ekstra" dari blok ini.size:QUANTITY- bilangan bulat ukuran blok ini dalam byte.gasLimit:QUANTITY- gas maksimum yang diizinkan dalam blok ini.gasUsed:QUANTITY- total gas yang digunakan oleh semua transaksi dalam blok ini.timestamp:QUANTITY- stempel waktu unix untuk saat blok disusun.transactions:Array- Array objek transaksi, atau hash transaksi 32 Byte tergantung pada parameter terakhir yang diberikan.uncles:Array- Array dari hash uncle.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'
// Hasil
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"difficulty": "0x4ea3f27bc",
"extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",
"gasLimit": "0x1388",
"gasUsed": "0x0",
"hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",
"mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",
"nonce": "0x689056015818adbe",
"number": "0x1b4",
"parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x220",
"stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",
"timestamp": "0x55ba467c",
"totalDifficulty": "0x78ed983323d",
"transactions": [
],
"transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles": [
]
}
}
eth_getBlockByNumber
Mengembalikan informasi tentang sebuah blok berdasarkan nomor blok.
Coba endpoint di playground (opens in a new tab)Parameter
QUANTITY|TAG- integer dari nomor blok, atau string"earliest","latest","pending","safe"atau"finalized", seperti pada parameter blok.Boolean- Jikatrueakan mengembalikan objek transaksi secara lengkap, jikafalsehanya mengembalikan hash dari transaksi tersebut.
params: [
"0x1b4", // 436
true,
]
Nilai Kembalian Lihat eth_getBlockByHash
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'
Hasilnya lihat eth_getBlockByHash
eth_getTransactionByHash
Mengembalikan informasi tentang transaksi yang diminta berdasarkan hash transaksi.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 32 Byte - hash dari sebuah transaksi
params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]
Mengembalikan
Object - Sebuah objek transaksi, atau null jika tidak ada transaksi yang ditemukan:
blockHash:DATA, 32 Byte - hash dari blok tempat transaksi ini berada.nulljika statusnya tertunda.blockNumber:QUANTITY- nomor blok tempat transaksi ini berada.nulljika statusnya tertunda.from:DATA, 20 Byte - alamat pengirim.gas:QUANTITY- gas yang disediakan oleh pengirim.gasPrice:QUANTITY- harga gas yang disediakan oleh pengirim dalam Wei.hash:DATA, 32 Byte - hash transaksi.input:DATA- data yang dikirim bersama dengan transaksi.nonce:QUANTITY- jumlah transaksi yang dilakukan oleh pengirim sebelum transaksi ini.to:DATA, 20 Byte - alamat penerima.nulljika ini adalah transaksi pembuatan kontrak.transactionIndex:QUANTITY- bilangan bulat dari posisi indeks transaksi di dalam blok.nulljika statusnya tertunda.value:QUANTITY- nilai yang ditransfer dalam Wei.v:QUANTITY- id pemulihan ECDSAr:QUANTITY- tanda tangan ECDSA rs:QUANTITY- tanda tangan ECDSA s
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'
// Hasil
{
"jsonrpc":"2.0",
"id":1,
"result":{
"blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
"blockNumber":"0x5daf3b", // 6139707
"from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",
"gas":"0xc350", // 50000
"gasPrice":"0x4a817c800", // 20000000000
"hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",
"input":"0x68656c6c6f21",
"nonce":"0x15", // 21
"to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",
"transactionIndex":"0x41", // 65
"value":"0xf3dbb76162000", // 4290000000000000
"v":"0x25", // 37
"r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",
"s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"
}
}
eth_getTransactionByBlockHashAndIndex
Mengembalikan informasi tentang sebuah transaksi berdasarkan hash blok dan posisi indeks transaksi.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 32 Byte - hash dari sebuah blok.QUANTITY- bilangan bulat dari posisi indeks transaksi.
params: [
"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
"0x0", // 0
]
Mengembalikan Lihat eth_getTransactionByHash
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'
Hasil lihat eth_getTransactionByHash
eth_getTransactionByBlockNumberAndIndex
Mengembalikan informasi tentang sebuah transaksi berdasarkan nomor blok dan posisi indeks transaksi.
Coba endpoint di playground (opens in a new tab)Parameter
QUANTITY|TAG- nomor blok, atau string"earliest","latest","pending","safe"atau"finalized", seperti pada parameter blok.QUANTITY- posisi indeks transaksi.
params: [
"0x9c47cf", // 10241999
"0x24", // 36
]
Kembalian Lihat eth_getTransactionByHash
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}'
Hasil lihat eth_getTransactionByHash
eth_getTransactionReceipt
Mengembalikan tanda terima dari sebuah transaksi berdasarkan hash transaksi.
Catatan Bahwa tanda terima tidak tersedia untuk transaksi yang tertunda.
Parameter
DATA, 32 Byte - hash dari sebuah transaksi
params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]
Mengembalikan
Object - Sebuah objek tanda terima transaksi, atau null jika tidak ada tanda terima yang ditemukan:
transactionHash:DATA, 32 Byte - hash dari transaksi tersebut.transactionIndex:QUANTITY- bilangan bulat dari posisi indeks transaksi di dalam blok.blockHash:DATA, 32 Byte - hash dari blok tempat transaksi ini berada.blockNumber:QUANTITY- nomor blok tempat transaksi ini berada.from:DATA, 20 Byte - alamat pengirim.to:DATA, 20 Byte - alamat penerima. null jika ini adalah transaksi pembuatan kontrak.cumulativeGasUsed:QUANTITY- Jumlah total gas yang digunakan saat transaksi ini dieksekusi di dalam blok.effectiveGasPrice:QUANTITY- Jumlah dari biaya dasar dan tip yang dibayarkan per unit gas.gasUsed:QUANTITY- Jumlah gas yang digunakan oleh transaksi spesifik ini saja.contractAddress:DATA, 20 Byte - Alamat kontrak yang dibuat, jika transaksi tersebut adalah pembuatan kontrak, jika tidak makanull.logs:Array- Array dari objek log, yang dihasilkan oleh transaksi ini.logsBloom:DATA, 256 Byte - Filter Bloom untuk klien ringan agar dapat mengambil log terkait dengan cepat.type:QUANTITY- bilangan bulat dari jenis transaksi,0x0untuk transaksi lama (legacy),0x1untuk jenis daftar akses (access list),0x2untuk biaya dinamis.
Ini juga mengembalikan salah satu dari :
root:DATA32 byte dari akar state pasca-transaksi (sebelum Bizantium)status:QUANTITYbaik1(berhasil) atau0(gagal)
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'
// Hasil
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"blockHash":
"0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",
"blockNumber": "0xeff35f",
"contractAddress": null, // string dari alamat jika telah dibuat
"cumulativeGasUsed": "0xa12515",
"effectiveGasPrice": "0x5a9c688d4",
"from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",
"gasUsed": "0xb4c8",
"logs": [{
// Log seperti yang dikembalikan oleh getFilterLogs, dll.
}],
"logsBloom": "0x00...0", // filter bloom 256 byte
"status": "0x1",
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"transactionHash":
"0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",
"transactionIndex": "0x66",
"type": "0x2"
}
}
eth_getUncleByBlockHashAndIndex
Mengembalikan informasi tentang uncle dari sebuah blok berdasarkan hash dan posisi indeks uncle.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 32 Byte - Hash dari sebuah blok.QUANTITY- Posisi indeks uncle.
params: [
"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
"0x0", // 0
]
Mengembalikan Lihat eth_getBlockByHash
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'
Untuk hasil, lihat eth_getBlockByHash
Catatan: Sebuah uncle tidak berisi transaksi individual.
eth_getUncleByBlockNumberAndIndex
Mengembalikan informasi tentang uncle dari sebuah blok berdasarkan nomor dan posisi indeks uncle.
Coba endpoint di playground (opens in a new tab)Parameter
QUANTITY|TAG- nomor blok, atau string"earliest","latest","pending","safe","finalized", seperti pada parameter blok.QUANTITY- posisi indeks uncle.
params: [
"0x29c", // 668
"0x0", // 0
]
Mengembalikan Lihat eth_getBlockByHash
Catatan: Sebuah uncle tidak berisi transaksi individual.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'
Hasil lihat eth_getBlockByHash
eth_newFilter
Membuat objek filter, berdasarkan opsi filter, untuk memberi tahu saat state berubah (Log). Untuk memeriksa apakah state telah berubah, panggil eth_getFilterChanges.
Catatan tentang menentukan filter topik: Topik bergantung pada urutan. Sebuah transaksi dengan Log yang memiliki topik [A, B] akan dicocokkan oleh filter topik berikut:
[]"apa saja"[A]"A di posisi pertama (dan apa saja setelahnya)"[null, B]"apa saja di posisi pertama DAN B di posisi kedua (dan apa saja setelahnya)"[A, B]"A di posisi pertama DAN B di posisi kedua (dan apa saja setelahnya)"[[A, B], [A, B]]"(A ATAU B) di posisi pertama DAN (A ATAU B) di posisi kedua (dan apa saja setelahnya)"- Parameter
Object- Opsi filter:
fromBlock:QUANTITY|TAG- (opsional, bawaan:"latest") Nomor blok bilangan bulat, atau"latest"untuk blok yang terakhir diusulkan,"safe"untuk blok aman terbaru,"finalized"untuk blok terbaru yang difinalisasi, atau"pending","earliest"untuk transaksi yang belum ada di dalam blok.toBlock:QUANTITY|TAG- (opsional, bawaan:"latest") Nomor blok bilangan bulat, atau"latest"untuk blok yang terakhir diusulkan,"safe"untuk blok aman terbaru,"finalized"untuk blok terbaru yang difinalisasi, atau"pending","earliest"untuk transaksi yang belum ada di dalam blok.address:DATA|Array, 20 Byte - (opsional) Alamat kontrak atau daftar alamat tempat Log seharusnya berasal.topics:Array of DATA, - (opsional) Larik topikDATA32 Byte. Topik bergantung pada urutan. Setiap topik juga dapat berupa larik DATA dengan opsi "atau".
params: [
{
fromBlock: "0x1",
toBlock: "0x2",
address: "0x8888f1f195afa192cfee860698584c030f4c9db1",
topics: [
"0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
null,
[
"0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
"0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc",
],
],
},
]
Mengembalikan
QUANTITY - Sebuah id filter.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x1" // 1
}
eth_newBlockFilter
Membuat filter di node, untuk memberi tahu saat blok baru tiba. Untuk memeriksa apakah state telah berubah, panggil eth_getFilterChanges.
Parameter Tidak ada
Kembalian
QUANTITY - ID filter.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x1" // 1
}
eth_newPendingTransactionFilter
Membuat filter di dalam node, untuk memberi tahu ketika transaksi tertunda yang baru tiba. Untuk memeriksa apakah state telah berubah, panggil eth_getFilterChanges.
Parameter Tidak ada
Kembalian
QUANTITY - Sebuah ID filter.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": "0x1" // 1
}
eth_uninstallFilter
Mencopot pemasangan filter dengan id yang diberikan. Harus selalu dipanggil ketika pemantauan tidak lagi diperlukan. Selain itu, filter akan habis waktu (timeout) ketika tidak diminta dengan eth_getFilterChanges selama jangka waktu tertentu.
Parameter
QUANTITY- Id filter.
params: [
"0xb", // 11
]
Kembalian
Boolean - true jika filter berhasil dicopot pemasangannya, jika tidak false.
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'
// Hasil
{
"id":1,
"jsonrpc": "2.0",
"result": true
}
eth_getFilterChanges
Metode polling untuk sebuah filter, yang mengembalikan sebuah array log yang terjadi sejak polling terakhir.
Parameter
QUANTITY- id filter.
params: [
"0x16", // 22
]
Kembalian
Array - Array objek log, atau array kosong jika tidak ada yang berubah sejak polling terakhir.
-
Untuk filter yang dibuat dengan
eth_newBlockFilterkembaliannya adalah hash blok (DATA, 32 Byte), mis.,["0x3454645634534..."]. -
Untuk filter yang dibuat dengan
eth_newPendingTransactionFilterkembaliannya adalah hash transaksi (DATA, 32 Byte), mis.,["0x6345343454645..."]. -
Untuk filter yang dibuat dengan
eth_newFilterlog adalah objek dengan parameter berikut:removed:TAG-trueketika log dihapus, karena reorganisasi rantai.falsejika ini adalah log yang valid.logIndex:QUANTITY- bilangan bulat dari posisi indeks log di dalam blok.nullketika ini adalah log yang tertunda.transactionIndex:QUANTITY- bilangan bulat dari posisi indeks transaksi tempat log ini dibuat.nullketika ini adalah log yang tertunda.transactionHash:DATA, 32 Byte - hash transaksi tempat log ini dibuat.nullketika ini adalah log yang tertunda.blockHash:DATA, 32 Byte - hash blok tempat log ini berada.nullketika ini tertunda.nullketika ini adalah log yang tertunda.blockNumber:QUANTITY- nomor blok tempat log ini berada.nullketika ini tertunda.nullketika ini adalah log yang tertunda.address:DATA, 20 Byte - alamat asal log ini.data:DATA- data log tidak terindeks dengan panjang variabel. (Dalam Solidity: nol atau lebih argumen log tidak terindeks berukuran 32 Byte.)topics:Array of DATA- Array berisi 0 hingga 4DATAberukuran 32 Byte dari argumen log yang terindeks. (Dalam Solidity: Topik pertama adalah hash dari tanda tangan peristiwa (mis.,Deposit(address,bytes32,uint256)), kecuali Anda mendeklarasikan peristiwa tersebut dengan penentuanonymous.)
-
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'
// Hasil
{
"id":1,
"jsonrpc":"2.0",
"result": [{
"logIndex": "0x1", // 1
"blockNumber":"0x1b4", // 436
"blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",
"transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",
"transactionIndex": "0x0", // 0
"address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",
"data":"0x0000000000000000000000000000000000000000000000000000000000000000",
"topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]
},{
...
}]
}
eth_getFilterLogs
Mengembalikan sebuah array dari semua Log yang cocok dengan filter dengan id yang diberikan.
Parameter
QUANTITY- Id filter.
params: [
"0x16", // 22
]
Mengembalikan Lihat eth_getFilterChanges
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'
Hasil lihat eth_getFilterChanges
eth_getLogs
Mengembalikan sebuah array dari semua log yang cocok dengan objek filter yang diberikan.
Parameter
Object- Opsi filter:
fromBlock:QUANTITY|TAG- (opsional, bawaan:"latest") Nomor blok bilangan bulat, atau"latest"untuk blok yang terakhir diusulkan,"safe"untuk blok aman terbaru,"finalized"untuk blok terbaru yang difinalisasi, atau"pending","earliest"untuk transaksi yang belum ada di dalam blok.toBlock:QUANTITY|TAG- (opsional, bawaan:"latest") Nomor blok bilangan bulat, atau"latest"untuk blok yang terakhir diusulkan,"safe"untuk blok aman terbaru,"finalized"untuk blok terbaru yang difinalisasi, atau"pending","earliest"untuk transaksi yang belum ada di dalam blok.address:DATA|Array, 20 Byte - (opsional) Alamat kontrak atau daftar alamat yang menjadi asal log.topics:Array of DATA, - (opsional) Array topikDATA32 Byte. Topik bergantung pada urutan. Setiap topik juga dapat berupa array DATA dengan opsi "atau" ("or").blockHash:DATA, 32 Byte - (opsional, masa depan) Dengan penambahan EIP-234,blockHashakan menjadi opsi filter baru yang membatasi log yang dikembalikan ke blok tunggal dengan hash 32-byteblockHash. MenggunakanblockHashsetara denganfromBlock=toBlock= nomor blok dengan hashblockHash. JikablockHashada dalam kriteria filter, maka baikfromBlockmaupuntoBlocktidak diperbolehkan.
params: [
{
topics: [
"0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
],
},
]
Mengembalikan Lihat eth_getFilterChanges
Contoh
// Permintaan
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'
Hasil lihat eth_getFilterChanges
Contoh Penggunaan
Menyebarkan kontrak menggunakan JSON_RPC
Bagian ini mencakup demonstrasi tentang cara menyebarkan kontrak hanya dengan menggunakan antarmuka RPC. Ada rute alternatif untuk menyebarkan kontrak di mana kerumitan ini diabstraksikan—misalnya, menggunakan pustaka yang dibangun di atas antarmuka RPC seperti web3.js (opens in a new tab) dan web3.py (opens in a new tab). Abstraksi ini umumnya lebih mudah dipahami dan tidak rentan terhadap kesalahan, tetapi tetap bermanfaat untuk memahami bagaimana cara kerjanya secara teknis.
Berikut ini adalah kontrak pintar sederhana bernama Multiply7 yang akan disebarkan menggunakan antarmuka JSON-RPC ke node Ethereum. Tutorial ini mengasumsikan pembaca sudah menjalankan node Geth. Informasi lebih lanjut tentang node dan klien tersedia di sini. Silakan merujuk ke dokumentasi klien masing-masing untuk melihat cara memulai HTTP JSON-RPC untuk klien non-Geth. Sebagian besar klien secara default melayani di localhost:8545.
contract Multiply7 {
event Print(uint);
function multiply(uint input) returns (uint) {
Print(input * 7);
return input * 7;
}
}
Hal pertama yang harus dilakukan adalah memastikan antarmuka HTTP RPC diaktifkan. Ini berarti kita memberikan tanda --http pada Geth saat memulai. Dalam contoh ini kita menggunakan node Geth pada rantai pengembangan privat. Dengan menggunakan pendekatan ini, kita tidak memerlukan Ether di jaringan nyata.
geth --http --dev console 2>>geth.log
Ini akan memulai antarmuka HTTP RPC di http://localhost:8545.
Kita dapat memverifikasi bahwa antarmuka sedang berjalan dengan mengambil alamat Coinbase (dengan mendapatkan alamat pertama dari larik akun) dan saldo menggunakan curl (opens in a new tab). Harap perhatikan bahwa data dalam contoh ini akan berbeda pada node lokal Anda. Jika Anda ingin mencoba perintah ini, ganti parameter permintaan pada permintaan curl kedua dengan hasil yang dikembalikan dari yang pertama.
curl --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[], "id":1}' -H "Content-Type: application/json" localhost:8545
{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]}
curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545
{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"}
Karena angka dienkode dalam bentuk hex, saldo dikembalikan dalam Wei sebagai string hex. Jika kita ingin mendapatkan saldo dalam Ether sebagai angka, kita dapat menggunakan Web3 dari konsol Geth.
web3.fromWei("0x1639e49bba16280000", "ether")
// "410"
Sekarang setelah ada beberapa Ether di rantai pengembangan privat kita, kita dapat menyebarkan kontrak. Langkah pertama adalah mengkompilasi kontrak Multiply7 menjadi kode bita yang dapat dikirim ke EVM. Untuk menginstal solc, kompiler Solidity, ikuti dokumentasi Solidity (opens in a new tab). (Anda mungkin ingin menggunakan rilis solc yang lebih lama agar sesuai dengan versi kompiler yang digunakan untuk contoh kita (opens in a new tab).)
Langkah selanjutnya adalah mengkompilasi kontrak Multiply7 menjadi kode bita yang dapat dikirim ke EVM.
echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin
======= <stdin>:Multiply7 =======
Binary:
6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029
Sekarang setelah kita memiliki kode yang dikompilasi, kita perlu menentukan berapa banyak gas yang dibutuhkan untuk menyebarkannya. Antarmuka RPC memiliki metode eth_estimateGas yang akan memberi kita perkiraan.
curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545
{"jsonrpc":"2.0","id":5,"result":"0x1c31e"}
Dan terakhir menyebarkan kontrak.
curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545
{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"}
Transaksi diterima oleh node dan hash transaksi dikembalikan. Hash ini dapat digunakan untuk melacak transaksi. Langkah selanjutnya adalah menentukan alamat tempat kontrak kita disebarkan. Setiap transaksi yang dieksekusi akan membuat tanda terima. Tanda terima ini berisi berbagai informasi tentang transaksi seperti di blok mana transaksi tersebut disertakan dan berapa banyak gas yang digunakan oleh EVM. Jika sebuah transaksi
membuat kontrak, tanda terima tersebut juga akan berisi alamat kontrak. Kita dapat mengambil tanda terima dengan metode RPC eth_getTransactionReceipt.
curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545
{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}}
Kontrak kita dibuat di 0x4d03d617d700cf81935d7f797f4e2ae719648262. Hasil null alih-alih tanda terima berarti transaksi belum disertakan dalam blok. Tunggu sebentar dan periksa apakah klien konsensus Anda sedang berjalan lalu coba lagi.
Berinteraksi dengan kontrak pintar
Dalam contoh ini kita akan mengirimkan transaksi menggunakan eth_sendTransaction ke metode multiply dari kontrak.
eth_sendTransaction memerlukan beberapa argumen, khususnya from, to, dan data. From adalah alamat publik dari akun kita, dan to adalah alamat kontrak. Argumen data berisi muatan yang menentukan metode mana yang harus dipanggil dan dengan argumen apa. Di sinilah ABI (antarmuka biner aplikasi) (opens in a new tab) berperan. ABI adalah file JSON yang menentukan cara mendefinisikan dan mengenkode data untuk EVM.
Bita dari muatan menentukan metode mana dalam kontrak yang dipanggil. Ini adalah 4 bita pertama dari hash Keccak atas nama fungsi dan tipe argumennya, yang dienkode dalam bentuk hex. Fungsi multiply menerima uint yang merupakan alias untuk uint256. Ini memberi kita:
web3.sha3("multiply(uint256)").substring(0, 10)
// "0xc6888fa1"
Langkah selanjutnya adalah mengenkode argumen. Hanya ada satu uint256, katakanlah, nilainya 6. ABI memiliki bagian yang menentukan cara mengenkode tipe uint256.
int<M>: enc(X) adalah pengkodean komplemen dua big-endian dari X, yang diisi pada sisi orde lebih tinggi (kiri) dengan 0xff untuk X negatif dan dengan bita nol untuk X positif sehingga panjangnya merupakan kelipatan dari 32 bita.
Ini dienkode menjadi 0000000000000000000000000000000000000000000000000000000000000006.
Dengan menggabungkan pemilih fungsi dan argumen yang dienkode, data kita akan menjadi 0xc6888fa10000000000000000000000000000000000000000000000000000000000000006.
Ini sekarang dapat dikirim ke node:
curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545
{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"}
Karena transaksi telah dikirim, hash transaksi dikembalikan. Mengambil tanda terima akan memberikan:
{
blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",
blockNumber: 268,
contractAddress: null,
cumulativeGasUsed: 22631,
gasUsed: 22631,
logs: [{
address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d",
blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",
blockNumber: 268,
data: "0x000000000000000000000000000000000000000000000000000000000000002a",
logIndex: 0,
topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"],
transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",
transactionIndex: 0
}],
transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",
transactionIndex: 0
}
Tanda terima tersebut berisi Log. Log ini dihasilkan oleh EVM pada saat eksekusi transaksi dan disertakan dalam tanda terima. Fungsi multiply menunjukkan bahwa peristiwa Print dimunculkan dengan input dikali 7. Karena argumen untuk peristiwa Print adalah uint256, kita dapat mendekodenya sesuai dengan aturan ABI yang akan memberi kita desimal 42 yang diharapkan. Selain data, perlu dicatat bahwa topik dapat digunakan untuk menentukan peristiwa mana yang membuat Log:
web3.sha3("Print(uint256)")
// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"
Ini hanyalah pengantar singkat tentang beberapa tugas yang paling umum, yang mendemonstrasikan penggunaan langsung JSON-RPC.