API JSON-RPC
Pembaruan terakhir halaman: 23 Februari 2026
Agar aplikasi perangkat lunak dapat berinteraksi dengan blockchain Ethereum - baik dengan membaca data blockchain atau mengirim transaksi ke jaringan - aplikasi tersebut harus terhubung ke sebuah 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 tanpa status (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 lainnya. 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 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, status 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 sebuah Inspektur untuk mencoba semua metode yang tersedia.
Konvensi
Pengodean nilai hex
Dua tipe data utama diteruskan melalui JSON: array byte 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 (array byte, alamat akun, hash, array bytecode): kodekan sebagai hex, beri awalan "0x", dua digit hex per byte.
Berikut adalah beberapa contoh:
- 0x41 (ukuran 1, "A")
- 0x004200 (ukuran 3, "0B0")
- 0x (ukuran 0, "")
- SALAH: 0xf0f0f (harus berupa jumlah digit genap)
- SALAH: 004200 (harus diawali dengan 0x)
Parameter blok
Metode berikut memiliki parameter blok:
Saat permintaan dibuat yang menanyakan status 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/genesisString "latest"- untuk blok yang diusulkan terbaruString "safe"- untuk blok kepala aman terbaruString "finalized"- untuk blok yang difinalisasi terbaruString "pending"- untuk status/transaksi yang tertunda
Contoh
Di halaman ini kami menyediakan contoh cara menggunakan masing-masing endpoint API JSON_RPC menggunakan alat baris perintah, curl (opens in a new tab). Contoh masing-masing endpoint 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 mengompilasi dan menerapkan 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 endpoint spesifik, parameternya, tipe pengembalian, dan contoh praktis tentang cara penggunaannya.
Permintaan curl mungkin mengembalikan pesan kesalahan yang berkaitan dengan tipe konten. Hal ini karena opsi --data mengatur tipe 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 tersebut 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:
1curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545Gossip, Status, Riwayat
Sejumlah metode JSON-RPC inti memerlukan data dari jaringan Ethereum, dan terbagi rapi ke dalam tiga kategori utama: Gossip, Status, dan Riwayat. Gunakan tautan di bagian ini untuk melompat ke setiap metode, atau gunakan daftar isi untuk menjelajahi seluruh daftar metode.
Metode Gossip
Metode ini melacak bagian terdepan dari rantai. Ini adalah cara transaksi berjalan di sekitar jaringan, menemukan jalannya ke dalam blok, dan bagaimana klien mengetahui tentang blok baru.
Metode Status
Metode yang melaporkan status saat ini dari semua data yang disimpan. "Status" ini seperti satu bagian besar RAM yang dibagikan, 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 uncle, 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
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'3// Result // Hasil4{5 "id":67,6 "jsonrpc":"2.0",7 "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"8}web3_sha3
Mengembalikan Keccak-256 (bukan SHA3-256 yang distandarisasi) dari data yang diberikan.
Parameter
DATA- Data yang akan dikonversi menjadi hash SHA3
1params: ["0x68656c6c6f20776f726c64"]Kembalian
DATA - Hasil SHA3 dari string yang diberikan.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'3// Result // Hasil4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"8}net_version
Mengembalikan id jaringan saat ini.
Parameter
Tidak ada
Kembalian
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
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'3// Result // Hasil4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "3"8}net_listening
Mengembalikan true jika klien secara aktif mendengarkan koneksi jaringan.
Parameter
Tidak ada
Kembalian
Boolean - true saat mendengarkan, jika tidak false.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'3// Result // Hasil4{5 "id":67,6 "jsonrpc":"2.0",7 "result":true8}net_peerCount
Mengembalikan jumlah peer yang saat ini terhubung ke klien.
Parameter
Tidak ada
Kembalian
QUANTITY - bilangan bulat dari jumlah peer yang terhubung.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'3// Result // Hasil4{5 "id":74,6 "jsonrpc": "2.0",7 "result": "0x2" // 2 // 28}eth_protocolVersion
Mengembalikan versi protokol Ethereum saat ini. Perhatikan bahwa metode ini tidak tersedia di Geth (opens in a new tab).
Parameter
Tidak ada
Kembalian
String - Versi protokol Ethereum saat ini
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'3// Result // Hasil4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "54"8}eth_syncing
Mengembalikan objek dengan data tentang status sinkronisasi atau false.
Parameter
Tidak ada
Kembalian
Data kembalian yang tepat bervariasi antara implementasi klien. Semua klien mengembalikan False ketika node tidak melakukan sinkronisasi, dan semua klien mengembalikan 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 puncaknya)currentBlock:QUANTITY- Blok saat ini, sama dengan eth_blockNumberhighestBlock:QUANTITY- Perkiraan blok tertinggi
Namun, klien individu mungkin juga menyediakan data tambahan. Misalnya Geth mengembalikan yang berikut ini:
1{2 "jsonrpc": "2.0",3 "id": 1,4 "result": {5 "currentBlock": "0x3cf522",6 "healedBytecodeBytes": "0x0",7 "healedBytecodes": "0x0",8 "healedTrienodes": "0x0",9 "healingBytecode": "0x0",10 "healingTrienodes": "0x0",11 "highestBlock": "0x3e0e41",12 "startingBlock": "0x3cbed5",13 "syncedAccountBytes": "0x0",14 "syncedAccounts": "0x0",15 "syncedBytecodeBytes": "0x0",16 "syncedBytecodes": "0x0",17 "syncedStorage": "0x0",18 "syncedStorageBytes": "0x0"19 }20}Tampilkan semuaSedangkan Besu mengembalikan:
1{2 "jsonrpc": "2.0",3 "id": 51,4 "result": {5 "startingBlock": "0x0",6 "currentBlock": "0x1518",7 "highestBlock": "0x9567a3",8 "pulledStates": "0x203ca",9 "knownStates": "0x200636"10 }11}Tampilkan semuaLihat dokumentasi untuk klien spesifik Anda untuk detail lebih lanjut.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": {8 startingBlock: '0x384',9 currentBlock: '0x386',10 highestBlock: '0x454'11 }12}13// Or when not syncing // Atau saat tidak menyinkronkan14{15 "id":1,16 "jsonrpc": "2.0",17 "result": false18}Tampilkan semuaeth_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
Kembalian
DATA, 20 byte - alamat coinbase saat ini.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'3// Result // Hasil4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"8}eth_chainId
Mengembalikan ID chain yang digunakan untuk menandatangani transaksi yang dilindungi dari pemutaran ulang (replay-protected).
Coba endpoint di playground (opens in a new tab)Parameter
Tidak ada
Kembalian
chainId, nilai heksadesimal sebagai string yang mewakili bilangan bulat dari id chain saat ini.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'3// Result // Hasil4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "0x1"8}eth_mining
Mengembalikan true jika klien secara aktif menambang blok baru. Ini hanya dapat mengembalikan true untuk jaringan proof-of-work dan mungkin tidak tersedia di beberapa klien sejak The Merge.
Parameter
Tidak ada
Kembalian
Boolean - mengembalikan true jika klien sedang menambang, jika tidak false.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'3//4{5 "id":71,6 "jsonrpc": "2.0",7 "result": true8}eth_hashrate
Mengembalikan jumlah hash per detik yang digunakan node untuk menambang. Ini hanya dapat mengembalikan true untuk jaringan proof-of-work dan mungkin tidak tersedia di beberapa klien sejak The Merge.
Parameter
Tidak ada
Kembalian
QUANTITY - jumlah hash per detik.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'3// Result // Hasil4{5 "id":71,6 "jsonrpc": "2.0",7 "result": "0x38a"8}eth_gasPrice
Mengembalikan perkiraan harga per gas saat ini dalam wei. Misalnya, klien Besu memeriksa 100 blok terakhir dan mengembalikan harga unit gas median secara default.
Coba endpoint di playground (opens in a new tab)Parameter
Tidak ada
Kembalian
QUANTITY - bilangan bulat dari harga gas saat ini dalam wei.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'3// Result // Hasil4{5 "id":73,6 "jsonrpc": "2.0",7 "result": "0x1dfd14000" // 8049999872 Wei // 8049999872 Wei8}eth_accounts
Mengembalikan daftar alamat yang dimiliki oleh klien.
Coba endpoint di playground (opens in a new tab)Parameter
Tidak ada
Kembalian
Array dari DATA, 20 Byte - alamat yang dimiliki oleh klien.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]8}eth_blockNumber
Mengembalikan nomor dari blok terbaru.
Coba endpoint di playground (opens in a new tab)Parameter
Tidak ada
Kembalian
QUANTITY - bilangan bulat dari nomor blok saat ini di mana klien berada.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'3// Result // Hasil4{5 "id":83,6 "jsonrpc": "2.0",7 "result": "0x4b7" // 1207 // 12078}eth_getBalance
Mengembalikan saldo akun pada alamat yang diberikan.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 20 Byte - alamat untuk memeriksa saldo.QUANTITY|TAG- bilangan bulat nomor blok, atau string"latest","earliest","pending","safe", atau"finalized", lihat parameter blok
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]Kembalian
QUANTITY - bilangan bulat dari saldo saat ini dalam wei.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0234c8a3397aab58" // 158972490234375000 // 1589724902343750008}eth_getStorageAt
Mengembalikan nilai dari posisi penyimpanan pada alamat yang diberikan.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 20 Byte - alamat penyimpanan.QUANTITY- bilangan bulat dari posisi di penyimpanan.QUANTITY|TAG- bilangan bulat nomor blok, atau string"latest","earliest","pending","safe","finalized", lihat parameter blok
Kembalian
DATA - nilai pada posisi penyimpanan ini.
Contoh
Menghitung posisi yang benar bergantung pada penyimpanan yang akan diambil. Pertimbangkan kontrak berikut yang diterapkan di 0x295a70b2de5e3953354a6a8344e616ed314d7251 oleh alamat 0x391694e7e0b0cce554cb130d723a9d27458f9298.
1contract Storage {2 uint pos0;3 mapping(address => uint) pos1;4 constructor() {5 pos0 = 1234;6 pos1[msg.sender] = 5678;7 }8}Mengambil nilai pos0 sangatlah mudah:
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:85452{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}Mengambil elemen dari map lebih sulit. Posisi elemen dalam map dihitung dengan:
1keccak(LeftPad32(key, 0), LeftPad32(map position, 0))Ini berarti untuk mengambil penyimpanan pada pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] kita perlu menghitung posisinya dengan:
1keccak(2 decodeHex(3 "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +4 "0000000000000000000000000000000000000000000000000000000000000001"5 )6)Konsol geth yang disertakan dengan pustaka web3 dapat digunakan untuk melakukan perhitungan:
1> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"2undefined3> web3.sha3(key, {"encoding": "hex"})4"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"Sekarang untuk mengambil penyimpanan:
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:85452{"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- bilangan bulat nomor blok, atau string"latest","earliest","pending","safe"atau"finalized", lihat parameter blok
1params: [2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",3 "latest", // state at the latest block // keadaan pada blok terbaru4]Kembalian
QUANTITY - bilangan bulat dari jumlah transaksi yang dikirim dari alamat ini.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 1 // 18}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
1params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]Kembalian
QUANTITY - bilangan bulat dari jumlah transaksi dalam blok ini.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 139 // 1398}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- bilangan bulat dari nomor blok, atau string"earliest","latest","pending","safe"atau"finalized", seperti pada parameter blok.
1params: [2 "0x13738ca", // 20396234 // 203962343]Kembalian
QUANTITY - bilangan bulat dari jumlah transaksi dalam blok ini.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x8b" // 139 // 1398}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
1params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]Kembalian
QUANTITY - bilangan bulat dari jumlah uncle dalam blok ini.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 1 // 18}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
1params: [2 "0xe8", // 232 // 2323]Kembalian
QUANTITY - bilangan bulat dari jumlah uncle dalam blok ini.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0" // 0 // 08}eth_getCode
Mengembalikan kode pada alamat yang diberikan.
Coba endpoint di playground (opens in a new tab)Parameter
DATA, 20 Byte - alamatQUANTITY|TAG- bilangan bulat nomor blok, atau string"latest","earliest","pending","safe"atau"finalized", lihat parameter blok
1params: [2 "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",3 "0x5daf3b", // 6139707 // 61397074]Kembalian
DATA - kode dari alamat yang diberikan.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"8}eth_sign
Metode sign menghitung tanda tangan spesifik Ethereum dengan: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).
Dengan menambahkan awalan pada pesan membuat tanda tangan yang dihitung dapat dikenali sebagai tanda tangan spesifik Ethereum. Ini mencegah penyalahgunaan di mana 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
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}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, default: 90000) Bilangan bulat dari gas yang disediakan untuk eksekusi transaksi. Ini akan mengembalikan gas yang tidak terpakai.gasPrice:QUANTITY- (opsional, default: To-Be-Determined) Bilangan bulat dari harga gas (gasPrice) yang digunakan untuk setiap gas yang dibayar, dalam Wei.value:QUANTITY- (opsional) Bilangan bulat dari nilai yang dikirim dengan transaksi ini, dalam Wei.data:DATA- Kode kontrak yang dikompilasi ATAU hash dari tanda tangan metode yang dipanggil dan parameter yang disandikan.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 disandikan RLP yang ditandatangani oleh akun yang ditentukan.
Contoh
1// Request // Permintaan2curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'3// Result // Hasil4{5 "id": 1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}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, default: 90000) Bilangan bulat dari gas yang disediakan untuk eksekusi transaksi. Ini akan mengembalikan gas yang tidak terpakai.gasPrice:QUANTITY- (opsional, default: To-Be-Determined) Bilangan bulat dari harga gas (gasPrice) yang digunakan untuk setiap gas yang dibayar.value:QUANTITY- (opsional) Bilangan bulat dari nilai yang dikirim dengan transaksi ini.input:DATA- Kode kontrak yang dikompilasi ATAU hash dari tanda tangan metode yang dipanggil dan parameter yang disandikan.nonce:QUANTITY- (opsional) Bilangan bulat dari sebuah nonce. Ini memungkinkan untuk menimpa transaksi tertunda Anda sendiri yang menggunakan nonce yang sama.
1params: [2 {3 from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",4 to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",5 gas: "0x76c0", // 30400 // 304006 gasPrice: "0x9184e72a000", // 10000000000000 // 100000000000007 value: "0x9184e72a", // 2441406250 // 24414062508 input:9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",10 },11]Tampilkan semuaKembalian
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, ketika Anda membuat kontrak.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}eth_sendRawTransaction
Membuat transaksi panggilan pesan baru atau pembuatan kontrak untuk transaksi yang ditandatangani.
Parameter
DATA, Data transaksi yang ditandatangani.
1params: [2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",3]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, ketika Anda membuat kontrak.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}eth_call
Mengeksekusi panggilan pesan baru dengan segera tanpa membuat transaksi di blockchain. Sering digunakan untuk mengeksekusi fungsi kontrak pintar yang hanya-baca, 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 transaksi.gas:QUANTITY- (opsional) Bilangan bulat dari gas yang disediakan untuk eksekusi transaksi. eth_call mengonsumsi nol gas, tetapi parameter ini mungkin diperlukan oleh beberapa eksekusi.gasPrice:QUANTITY- (opsional) Bilangan bulat dari harga gas (gasPrice) yang digunakan untuk setiap gas yang dibayarvalue:QUANTITY- (opsional) Bilangan bulat dari nilai yang dikirim dengan transaksi iniinput:DATA- (opsional) Hash dari tanda tangan metode dan parameter yang disandikan. Untuk detailnya lihat ABI Kontrak Ethereum dalam dokumentasi Solidity (opens in a new tab).
QUANTITY|TAG- bilangan bulat nomor blok, atau string"latest","earliest","pending","safe"atau"finalized", lihat parameter blok
Kembalian
DATA - nilai kembalian dari kontrak yang dieksekusi.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x"8}eth_estimateGas
Menghasilkan dan mengembalikan perkiraan berapa banyak gas yang diperlukan untuk memungkinkan transaksi selesai. Transaksi tidak akan ditambahkan ke blockchain. Perhatikan bahwa perkiraan tersebut mungkin secara signifikan lebih besar dari 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.
Kembalian
QUANTITY - jumlah gas yang digunakan.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x5208" // 21000 // 210008}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- Jikatrue, ini mengembalikan objek transaksi lengkap, jikafalsehanya hash dari transaksi.
1params: [2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",3 false,4]Kembalian
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 proof-of-work yang dihasilkan.nullketika ini adalah blok yang tertunda,0x0untuk blok proof-of-stake (sejak The Merge)sha3Uncles:DATA, 32 Byte - SHA3 dari data uncle dalam blok.logsBloom:DATA, 256 Byte - filter bloom untuk log dari blok.nullketika ini adalah blok yang tertunda.transactionsRoot:DATA, 32 Byte - root dari trie transaksi dari blok.stateRoot:DATA, 32 Byte - root dari trie status akhir dari blok.receiptsRoot:DATA, 32 Byte - root dari trie tanda terima dari blok.miner:DATA, 20 Byte - alamat penerima manfaat yang diberikan hadiah blok.difficulty:QUANTITY- bilangan bulat dari tingkat kesulitan untuk blok ini.totalDifficulty:QUANTITY- bilangan bulat dari total kesulitan chain hingga blok ini.extraData:DATA- bidang "data ekstra" dari blok ini.size:QUANTITY- bilangan bulat ukuran blok ini dalam byte.gasLimit:QUANTITY- batas 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 dari objek transaksi, atau hash transaksi 32 Byte tergantung pada parameter terakhir yang diberikan.uncles:Array- Array dari hash uncle.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Result // Hasil4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "difficulty": "0x4ea3f27bc",9 "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",10 "gasLimit": "0x1388",11 "gasUsed": "0x0",12 "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",13 "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",14 "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",15 "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",16 "nonce": "0x689056015818adbe",17 "number": "0x1b4",18 "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",19 "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",20 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",21 "size": "0x220",22 "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",23 "timestamp": "0x55ba467c",24 "totalDifficulty": "0x78ed983323d",25 "transactions": [26 ],27 "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",28 "uncles": [29 ]30 }31}Tampilkan semuaeth_getBlockByNumber
Mengembalikan informasi tentang sebuah blok berdasarkan nomor blok.
Coba endpoint di playground (opens in a new tab)Parameter
QUANTITY|TAG- bilangan bulat dari nomor blok, atau string"earliest","latest","pending","safe"atau"finalized", seperti pada parameter blok.Boolean- Jikatrue, ini mengembalikan objek transaksi lengkap, jikafalsehanya hash dari transaksi.
1params: [2 "0x1b4", // 436 // 4363 true,4]Kembalian Lihat eth_getBlockByHash
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'Hasil 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
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]Kembalian
Object - Sebuah objek transaksi, atau null ketika tidak ada transaksi yang ditemukan:
blockHash:DATA, 32 Byte - hash dari blok di mana transaksi ini berada.nullketika ini tertunda.blockNumber:QUANTITY- nomor blok di mana transaksi ini berada.nullketika ini 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 dari transaksi.input:DATA- data yang dikirim bersama dengan transaksi.nonce:QUANTITY- jumlah transaksi yang dilakukan oleh pengirim sebelum yang satu ini.to:DATA, 20 Byte - alamat penerima.nullketika ini adalah transaksi pembuatan kontrak.transactionIndex:QUANTITY- bilangan bulat dari posisi indeks transaksi dalam blok.nullketika ini tertunda.value:QUANTITY- nilai yang ditransfer dalam Wei.v:QUANTITY- id pemulihan ECDSAr:QUANTITY- tanda tangan ECDSA rs:QUANTITY- tanda tangan ECDSA s
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'3// Result // Hasil4{5 "jsonrpc":"2.0",6 "id":1,7 "result":{8 "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",9 "blockNumber":"0x5daf3b", // 6139707 // 613970710 "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",11 "gas":"0xc350", // 50000 // 5000012 "gasPrice":"0x4a817c800", // 20000000000 // 2000000000013 "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",14 "input":"0x68656c6c6f21",15 "nonce":"0x15", // 21 // 2116 "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",17 "transactionIndex":"0x41", // 65 // 6518 "value":"0xf3dbb76162000", // 4290000000000000 // 429000000000000019 "v":"0x25", // 37 // 3720 "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",21 "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"22 }23}Tampilkan semuaeth_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.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 0 // 04]Kembalian Lihat eth_getTransactionByHash
Contoh
1// Request // Permintaan2curl -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- sebuah nomor blok, atau string"earliest","latest","pending","safe"atau"finalized", seperti pada parameter blok.QUANTITY- posisi indeks transaksi.
1params: [2 "0x9c47cf", // 10241999 // 102419993 "0x24", // 36 // 364]Kembalian Lihat eth_getTransactionByHash
Contoh
1// Request // Permintaan2curl -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
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]Kembalian
Object - Sebuah objek tanda terima transaksi, atau null ketika tidak ada tanda terima yang ditemukan:
transactionHash:DATA, 32 Byte - hash dari transaksi.transactionIndex:QUANTITY- bilangan bulat dari posisi indeks transaksi dalam blok.blockHash:DATA, 32 Byte - hash dari blok di mana transaksi ini berada.blockNumber:QUANTITY- nomor blok di mana transaksi ini berada.from:DATA, 20 Byte - alamat pengirim.to:DATA, 20 Byte - alamat penerima. null ketika ini adalah transaksi pembuatan kontrak.cumulativeGasUsed:QUANTITY- Total jumlah gas yang digunakan ketika transaksi ini dieksekusi 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 tidaknull.logs:Array- Array dari objek log, yang dihasilkan oleh transaksi ini.logsBloom:DATA, 256 Byte - Filter bloom untuk klien ringan (light client) agar dapat dengan cepat mengambil log terkait.type:QUANTITY- bilangan bulat dari jenis transaksi,0x0untuk transaksi lama (legacy),0x1untuk jenis daftar akses,0x2untuk biaya dinamis.
Ini juga mengembalikan salah satu dari :
root:DATA32 byte dari root status pasca-transaksi (pra Byzantium)status:QUANTITYbaik1(berhasil) atau0(gagal)
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'3// Result // Hasil4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "blockHash":9 "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",10 "blockNumber": "0xeff35f",11 "contractAddress": null, // string of the address if it was created // string alamat jika dibuat12 "cumulativeGasUsed": "0xa12515",13 "effectiveGasPrice": "0x5a9c688d4",14 "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",15 "gasUsed": "0xb4c8",16 "logs": [{17 // logs as returned by getFilterLogs, etc. // log seperti yang dikembalikan oleh getFilterLogs, dll.18 }],19 "logsBloom": "0x00...0", // 256 byte bloom filter // filter bloom 256 byte20 "status": "0x1",21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",22 "transactionHash":23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",24 "transactionIndex": "0x66",25 "type": "0x2"26 }27}Tampilkan semuaeth_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.
1params: [2 "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",3 "0x0", // 0 // 04]Kembalian Lihat eth_getBlockByHash
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}'Hasil lihat eth_getBlockByHash
Catatan: Sebuah uncle tidak berisi transaksi individu.
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- sebuah nomor blok, atau string"earliest","latest","pending","safe","finalized", seperti pada parameter blok.QUANTITY- posisi indeks uncle.
1params: [2 "0x29c", // 668 // 6683 "0x0", // 0 // 04]Kembalian Lihat eth_getBlockByHash
Catatan: Sebuah uncle tidak berisi transaksi individu.
Contoh
1// Request // Permintaan2curl -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 ketika status berubah (log). Untuk memeriksa apakah status telah berubah, panggil eth_getFilterChanges.
Catatan tentang menentukan filter topik: Topik bergantung pada urutan. Sebuah transaksi dengan log dengan 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, default:"latest") Bilangan bulat nomor blok, atau"latest"untuk blok terakhir yang diusulkan,"safe"untuk blok aman terbaru,"finalized"untuk blok yang difinalisasi terbaru, atau"pending","earliest"untuk transaksi yang belum ada dalam blok.toBlock:QUANTITY|TAG- (opsional, default:"latest") Bilangan bulat nomor blok, atau"latest"untuk blok terakhir yang diusulkan,"safe"untuk blok aman terbaru,"finalized"untuk blok yang difinalisasi terbaru, atau"pending","earliest"untuk transaksi yang belum ada dalam blok.address:DATA|Array, 20 Byte - (opsional) Alamat kontrak atau daftar alamat dari mana log harus berasal.topics:Array dari DATA, - (opsional) Array dari topikDATA32 Byte. Topik bergantung pada urutan. Setiap topik juga dapat berupa array dari DATA dengan opsi "atau" (or).
1params: [2 {3 fromBlock: "0x1",4 toBlock: "0x2",5 address: "0x8888f1f195afa192cfee860698584c030f4c9db1",6 topics: [7 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",8 null,9 [10 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",11 "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc",12 ],13 ],14 },15]Tampilkan semuaKembalian
QUANTITY - Sebuah id filter.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 1 // 18}eth_newBlockFilter
Membuat filter di node, untuk memberi tahu ketika blok baru tiba. Untuk memeriksa apakah status telah berubah, panggil eth_getFilterChanges.
Parameter Tidak ada
Kembalian
QUANTITY - Sebuah id filter.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 1 // 18}eth_newPendingTransactionFilter
Membuat filter di node, untuk memberi tahu ketika transaksi tertunda baru tiba. Untuk memeriksa apakah status telah berubah, panggil eth_getFilterChanges.
Parameter Tidak ada
Kembalian
QUANTITY - Sebuah id filter.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 1 // 18}eth_uninstallFilter
Menghapus instalan filter dengan id yang diberikan. Harus selalu dipanggil ketika pengawasan (watch) tidak lagi diperlukan. Selain itu, Filter akan habis waktu (timeout) ketika tidak diminta dengan eth_getFilterChanges selama jangka waktu tertentu.
Parameter
QUANTITY- Id filter.
1params: [2 "0xb", // 11 // 113]Kembalian
Boolean - true jika filter berhasil dihapus instalannya, jika tidak false.
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'3// Result // Hasil4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}eth_getFilterChanges
Metode polling untuk sebuah filter, yang mengembalikan array log yang terjadi sejak polling terakhir.
Parameter
QUANTITY- id filter.
1params: [2 "0x16", // 22 // 223]Kembalian
Array - Array dari 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 chain.falsejika ini adalah log yang valid.logIndex:QUANTITY- bilangan bulat dari posisi indeks log dalam blok.nullketika ini adalah log yang tertunda.transactionIndex:QUANTITY- bilangan bulat dari posisi indeks transaksi dari mana log dibuat.nullketika ini adalah log yang tertunda.transactionHash:DATA, 32 Byte - hash dari transaksi dari mana log ini dibuat.nullketika ini adalah log yang tertunda.blockHash:DATA, 32 Byte - hash dari blok di mana log ini berada.nullketika ini tertunda.nullketika ini adalah log yang tertunda.blockNumber:QUANTITY- nomor blok di mana log ini berada.nullketika ini tertunda.nullketika ini adalah log yang tertunda.address:DATA, 20 Byte - alamat dari mana log ini berasal.data:DATA- data log non-indeks dengan panjang variabel. (Dalam solidity: nol atau lebih argumen log non-indeks 32 Byte.)topics:Array dari DATA- Array dari 0 hingga 4DATA32 Byte dari argumen log yang diindeks. (Dalam solidity: Topik pertama adalah hash dari tanda tangan peristiwa (misalnya,Deposit(address,bytes32,uint256)), kecuali Anda mendeklarasikan peristiwa tersebut dengan penentuanonymous.)
-
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'3// Result // Hasil4{5 "id":1,6 "jsonrpc":"2.0",7 "result": [{8 "logIndex": "0x1", // 1 // 19 "blockNumber":"0x1b4", // 436 // 43610 "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",11 "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",12 "transactionIndex": "0x0", // 0 // 013 "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",14 "data":"0x0000000000000000000000000000000000000000000000000000000000000000",15 "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]16 },{17 ...18 }]19}Tampilkan semuaeth_getFilterLogs
Mengembalikan array dari semua log yang cocok dengan filter dengan id yang diberikan.
Parameter
QUANTITY- Id filter.
1params: [2 "0x16", // 22 // 223]Kembalian Lihat eth_getFilterChanges
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'Hasil lihat eth_getFilterChanges
eth_getLogs
Mengembalikan array dari semua log yang cocok dengan objek filter yang diberikan.
Parameter
Object- Opsi filter:
fromBlock:QUANTITY|TAG- (opsional, default:"latest") Bilangan bulat nomor blok, atau"latest"untuk blok terakhir yang diusulkan,"safe"untuk blok aman terbaru,"finalized"untuk blok yang difinalisasi terbaru, atau"pending","earliest"untuk transaksi yang belum ada dalam blok.toBlock:QUANTITY|TAG- (opsional, default:"latest") Bilangan bulat nomor blok, atau"latest"untuk blok terakhir yang diusulkan,"safe"untuk blok aman terbaru,"finalized"untuk blok yang difinalisasi terbaru, atau"pending","earliest"untuk transaksi yang belum ada dalam blok.address:DATA|Array, 20 Byte - (opsional) Alamat kontrak atau daftar alamat dari mana log harus berasal.topics:Array dari DATA, - (opsional) Array dari topikDATA32 Byte. Topik bergantung pada urutan. Setiap topik juga dapat berupa array dari 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, makafromBlockmaupuntoBlocktidak diizinkan.
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]Kembalian Lihat eth_getFilterChanges
Contoh
1// Request // Permintaan2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'Hasil lihat eth_getFilterChanges
Contoh Penggunaan
Menerapkan kontrak menggunakan JSON_RPC
Bagian ini mencakup demonstrasi tentang cara menerapkan kontrak hanya dengan menggunakan antarmuka RPC. Ada rute alternatif untuk menerapkan 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 berguna untuk memahami apa yang terjadi di balik layar.
Berikut ini adalah kontrak pintar sederhana bernama Multiply7 yang akan diterapkan menggunakan antarmuka JSON-RPC ke sebuah 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.
1contract Multiply7 {2 event Print(uint);3 function multiply(uint input) returns (uint) {4 Print(input * 7);5 return input * 7;6 }7}Hal pertama yang harus dilakukan adalah memastikan antarmuka HTTP RPC diaktifkan. Ini berarti kita menyediakan Geth dengan tanda --http saat memulai. Dalam contoh ini kita menggunakan node Geth pada rantai pengembangan pribadi. Dengan menggunakan pendekatan ini kita tidak memerlukan ether di jaringan nyata.
geth --http --dev console 2>>geth.logIni 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 array akun) dan saldo menggunakan curl (opens in a new tab). Harap dicatat 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 memiliki saldo dalam ether sebagai angka, kita dapat menggunakan web3 dari konsol Geth.
1web3.fromWei("0x1639e49bba16280000", "ether")2// "410" // "410"Sekarang setelah ada beberapa ether di rantai pengembangan pribadi kita, kita dapat menerapkan kontrak. Langkah pertama adalah mengompilasi kontrak Multiply7 menjadi kode byte 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 mengompilasi kontrak Multiply7 menjadi kode byte 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:6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029Sekarang setelah kita memiliki kode yang dikompilasi, kita perlu menentukan berapa banyak gas yang dibutuhkan untuk menerapkannya. 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 akhirnya menerapkan 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 diterapkan. 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, itu 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 dan 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 payload yang menentukan metode mana yang harus dipanggil dan dengan argumen apa. Di sinilah ABI (application binary interface) (opens in a new tab) berperan. ABI adalah file JSON yang menentukan cara mendefinisikan dan mengenkode data untuk EVM.
Byte dari payload menentukan metode mana dalam kontrak yang dipanggil. Ini adalah 4 byte pertama dari hash Keccak atas nama fungsi dan tipe argumennya, yang dienkode dalam hex. Fungsi multiply menerima uint yang merupakan alias untuk uint256. Ini memberi kita:
1web3.sha3("multiply(uint256)").substring(0, 10)2// "0xc6888fa1" // "0xc6888fa1"Langkah selanjutnya adalah mengenkode argumen. Hanya ada satu uint256, katakanlah, nilai 6. ABI memiliki bagian yang menentukan cara mengenkode tipe uint256.
int<M>: enc(X) adalah pengkodean komplemen dua big-endian dari X, diisi pada sisi orde yang lebih tinggi (kiri) dengan 0xff untuk X negatif dan dengan nol > byte untuk X positif sehingga panjangnya merupakan kelipatan dari 32 byte.
Ini dienkode menjadi 0000000000000000000000000000000000000000000000000000000000000006.
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 sebuah transaksi telah dikirim, hash transaksi dikembalikan. Mengambil tanda terima memberikan:
1{2 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",3 blockNumber: 268,4 contractAddress: null,5 cumulativeGasUsed: 22631,6 gasUsed: 22631,7 logs: [{8 address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d",9 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",10 blockNumber: 268,11 data: "0x000000000000000000000000000000000000000000000000000000000000002a",12 logIndex: 0,13 topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"],14 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",15 transactionIndex: 016 }],17 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",18 transactionIndex: 019}Tampilkan semuaTanda terima berisi sebuah log. Log ini dihasilkan oleh EVM pada 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:
1web3.sha3("Print(uint256)")2// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da" // "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"Ini hanyalah pengantar singkat tentang beberapa tugas yang paling umum, yang mendemonstrasikan penggunaan langsung dari JSON-RPC.