Lompat ke konten utama
Change page

Pustaka API JavaScript

Pembaruan terakhir halaman: 25 Februari 2026

Agar aplikasi web dapat berinteraksi dengan blockchain Ethereum (yaitu, membaca data blockchain dan/atau mengirim transaksi ke jaringan), aplikasi tersebut harus terhubung ke node Ethereum.

Untuk tujuan ini, setiap klien Ethereum mengimplementasikan spesifikasi JSON-RPC, sehingga terdapat serangkaian metode seragam yang dapat diandalkan oleh aplikasi.

Jika Anda ingin menggunakan JavaScript untuk terhubung dengan node Ethereum, Anda dapat menggunakan JavaScript murni, tetapi ada beberapa pustaka praktis dalam ekosistem yang membuatnya jauh lebih mudah. Dengan pustaka ini, pengembang dapat menulis metode satu baris yang intuitif untuk menginisialisasi permintaan JSON-RPC (di balik layar) yang berinteraksi dengan Ethereum.

Harap perhatikan bahwa sejak The Merge, dua perangkat lunak Ethereum yang terhubung - klien eksekusi dan klien konsensus - diperlukan untuk menjalankan node. Pastikan node Anda mencakup klien eksekusi dan klien konsensus. Jika node Anda tidak berada di mesin lokal Anda (misalnya, node Anda berjalan di instans AWS), perbarui alamat IP dalam tutorial yang sesuai. Untuk informasi lebih lanjut, silakan lihat halaman kami tentang menjalankan node.

Prasyarat

Selain memahami JavaScript, mungkin akan membantu jika Anda memahami tumpukan Ethereum dan klien Ethereum.

Mengapa menggunakan pustaka?

Pustaka-pustaka ini mengabstraksi banyak kerumitan dalam berinteraksi langsung dengan node Ethereum. Mereka juga menyediakan fungsi utilitas (misalnya, mengonversi ETH ke Gwei) sehingga sebagai pengembang, Anda dapat menghabiskan lebih sedikit waktu untuk menangani kerumitan klien Ethereum dan lebih banyak waktu berfokus pada fungsionalitas unik aplikasi Anda.

Fitur pustaka

Terhubung ke node Ethereum

Dengan menggunakan penyedia (provider), pustaka-pustaka ini memungkinkan Anda untuk terhubung ke Ethereum dan membaca datanya, baik itu melalui JSON-RPC, INFURA, Etherscan, Alchemy, atau MetaMask.

Peringatan: Web3.js telah diarsipkan pada 4 Maret 2025. Baca pengumumannya (opens in a new tab). Pertimbangkan untuk menggunakan pustaka alternatif seperti ethers.js (opens in a new tab) atau viem (opens in a new tab) untuk proyek baru.

Contoh Ethers

1// A BrowserProvider wraps a standard Web3 provider, which is // BrowserProvider membungkus penyedia Web3 standar, yaitu
2// what MetaMask injects as window.ethereum into each page // apa yang disuntikkan MetaMask sebagai window.ethereum ke setiap halaman
3const provider = new ethers.BrowserProvider(window.ethereum)
4
5// The MetaMask plugin also allows signing transactions to // Plugin MetaMask juga memungkinkan penandatanganan transaksi untuk
6// send ether and pay to change state within the blockchain. // mengirim ether dan membayar untuk mengubah status di dalam blockchain.
7// For this, we need the account signer... // Untuk ini, kita memerlukan penandatangan akun...
8const signer = provider.getSigner()

Contoh Web3js

1var web3 = new Web3("http://localhost:8545")
2// or // atau
3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
4
5// change provider // ubah penyedia
6web3.setProvider("ws://localhost:8546")
7// or // atau
8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
9
10// Using the IPC provider in node.js // Menggunakan penyedia IPC di node.js
11var net = require("net")
12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path // jalur mac os
13// or // atau
14var web3 = new Web3(
15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)
16) // mac os path // jalur mac os
17// on windows the path is: "\\\\.\\pipe\\geth.ipc" // di windows jalurnya adalah: "\\\\.\\pipe\\geth.ipc"
18// on linux the path is: "/users/myuser/.ethereum/geth.ipc" // di linux jalurnya adalah: "/users/myuser/.ethereum/geth.ipc"
Tampilkan semua

Setelah disiapkan, Anda akan dapat meminta data (query) blockchain untuk:

  • nomor blok
  • perkiraan gas
  • peristiwa kontrak pintar
  • id jaringan
  • dan banyak lagi...

Fungsionalitas dompet

Pustaka-pustaka ini memberi Anda fungsionalitas untuk membuat dompet, mengelola kunci, dan menandatangani transaksi.

Berikut adalah contoh dari Ethers

1// Create a wallet instance from a mnemonic... // Buat instans dompet dari mnemonik...
2mnemonic =
3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
4walletMnemonic = Wallet.fromPhrase(mnemonic)
5
6// ...or from a private key // ...atau dari kunci privat
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// true // true
11
12// The address as a Promise per the Signer API // Alamat sebagai Promise sesuai dengan API Signer
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' } // { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// A Wallet address is also available synchronously // Alamat dompet juga tersedia secara sinkron
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' // '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// The internal cryptographic components // Komponen kriptografi internal
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db' // '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64' // '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// The wallet mnemonic // Mnemonik dompet
27walletMnemonic.mnemonic
28// { // {
29// locale: 'en', // locale: 'en',
30// path: 'm/44\'/60\'/0\'/0/0', // path: 'm/44\'/60\'/0\'/0/0',
31// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol' // phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
32// } // }
33
34// Note: A wallet created with a private key does not // Catatan: Sebuah dompet yang dibuat dengan kunci privat tidak
35// have a mnemonic (the derivation prevents it) // memiliki mnemonik (derivasi mencegahnya)
36walletPrivateKey.mnemonic
37// null // null
38
39// Signing a message // Menandatangani pesan
40walletMnemonic.signMessage("Hello World")
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' } // { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// Signing a transaction // Menandatangani transaksi
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' } // { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// The connect method returns a new instance of the // Metode connect mengembalikan instans baru dari
53// Wallet connected to a provider // Dompet yang terhubung ke penyedia
54wallet = walletMnemonic.connect(provider)
55
56// Querying the network // Melakukan kueri jaringan
57wallet.getBalance()
58// { Promise: { BigNumber: "42" } } // { Promise: { BigNumber: "42" } }
59wallet.getTransactionCount()
60// { Promise: 0 } // { Promise: 0 }
61
62// Sending ether // Mengirim ether
63wallet.sendTransaction(tx)
Tampilkan semua

Baca dokumentasi lengkapnya (opens in a new tab)

Setelah disiapkan, Anda akan dapat:

  • membuat akun
  • mengirim transaksi
  • menandatangani transaksi
  • dan banyak lagi...

Berinteraksi dengan fungsi kontrak pintar

Pustaka klien JavaScript memungkinkan aplikasi Anda untuk memanggil fungsi kontrak pintar dengan membaca Application Binary Interface (ABI) dari kontrak yang dikompilasi.

ABI pada dasarnya menjelaskan fungsi kontrak dalam format JSON dan memungkinkan Anda untuk menggunakannya seperti objek JavaScript biasa.

Jadi kontrak Solidity berikut:

1contract Test {
2 uint a;
3 address d = 0x12345678901234567890123456789012;
4
5 constructor(uint testInt) { a = testInt;}
6
7 event Event(uint indexed b, bytes32 c);
8
9 event Event2(uint indexed b, bytes32 c);
10
11 function foo(uint b, bytes32 c) returns(address) {
12 Event(b, c);
13 return d;
14 }
15}
Tampilkan semua

Akan menghasilkan JSON berikut:

1[{
2 "type":"constructor",
3 "payable":false,
4 "stateMutability":"nonpayable"
5 "inputs":[{"name":"testInt","type":"uint256"}],
6 },{
7 "type":"function",
8 "name":"foo",
9 "constant":false,
10 "payable":false,
11 "stateMutability":"nonpayable",
12 "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}],
13 "outputs":[{"name":"","type":"address"}]
14 },{
15 "type":"event",
16 "name":"Event",
17 "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}],
18 "anonymous":false
19 },{
20 "type":"event",
21 "name":"Event2",
22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],
23 "anonymous":false
24}]
Tampilkan semua

Ini berarti Anda dapat:

  • Mengirim transaksi ke kontrak pintar dan mengeksekusi metodenya
  • Memanggil untuk memperkirakan gas yang akan dibutuhkan oleh eksekusi metode saat dieksekusi di Mesin Virtual Ethereum
  • Menyebarkan kontrak
  • Dan banyak lagi...

Fungsi utilitas

Fungsi utilitas memberi Anda pintasan praktis yang membuat membangun dengan Ethereum menjadi sedikit lebih mudah.

Nilai ETH secara default berada dalam Wei. 1 ETH = 1.000.000.000.000.000.000 WEI – ini berarti Anda berurusan dengan banyak angka! web3.utils.toWei mengonversi ether ke Wei untuk Anda.

Dan di ethers terlihat seperti ini:

1// Get the balance of an account (by address or ENS name) // Dapatkan saldo akun (berdasarkan alamat atau nama ENS)
2balance = await provider.getBalance("ethers.eth")
3// { BigNumber: "2337132817842795605" } // { BigNumber: "2337132817842795605" }
4
5// Often you will need to format the output for the user // Seringkali Anda perlu memformat output untuk pengguna
6// which prefer to see values in ether (instead of wei) // yang lebih suka melihat nilai dalam ether (bukan wei)
7ethers.utils.formatEther(balance)
8// '2.337132817842795605' // '2.337132817842795605'

Pustaka yang tersedia

Web3.js - API JavaScript Ethereum.

Ethers.js - Implementasi dompet Ethereum lengkap dan utilitas dalam JavaScript dan TypeScript.

The Graph - Protokol untuk mengindeks data Ethereum dan IPFS serta melakukan kueri menggunakan GraphQL.

Alchemy SDK - Pembungkus (wrapper) untuk Ethers.js dengan API yang ditingkatkan.

viem - Antarmuka TypeScript untuk Ethereum.

Codex - API data blockchain yang diperkaya dan real-time di puluhan rantai.

Drift - Meta-pustaka TypeScript dengan caching bawaan, hooks, dan mock pengujian.

Bacaan lebih lanjut

Tahu tentang sumber daya komunitas yang membantu Anda? Edit halaman ini dan tambahkan!

Tutorial: API JavaScript & WebSocket di Ethereum

  • Menggunakan WebSocket – Cara menggunakan WebSocket dengan Alchemy untuk berlangganan peristiwa Ethereum dan membuat permintaan JSON-RPC secara real-time.

Apakah artikel ini membantu?