Lanjut ke konten utama
Change page

Pustaka API JavaScript

Terakhir diedit: @AbrahamYusuf(opens in a new tab), 28 Juni 2024

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

Untuk keperluan ini, setiap klien Ethereum mengimplementasikan spesifikasi JSON-RPC, sehingga ada keseragaman kumpulan titik akhir yang bisa menjadi tumpuan aplikasi.

Jika ingin Anda menggunakan JavaScript untuk terhubung dengan node Ethereum, dimungkinkan menggunakan JavaScript vanilla, tetapi beberapa pustaka praktis telah ada di dalam ekosistem yang akan membuat proses ini jauh lebih mudah. Dengan pustaka ini, pengembang dapat menulis metode satu baris yang intuitif untuk memulai permintaan JSON RPC (di bawah tenda) yang berinteraksi dengan Ethereum.

Prasyarat

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

Mengapa menggunakan pustaka?

Pustaka ini menyederhanakan banyak kerumitan dalam interaksi langsung dengan node Ethereum. Pustaka juga menyediakan fungsi utilitas (seperti mengubah ETH ke Gwei) sehingga pengembang dapat menghemat waktu dalam menangani kerumitan klien Ethereum dan dapat lebih memusatkan perhatian pada fungsi unik aplikasi Anda.

Fitur pustaka

Terhubung ke node Ethereum

Menggunakan penyedia, pustaka ini memungkinkan Anda terhubung ke Ethereum dan membaca datanya, baik itu melalui JSON-RPC, INFURA, Etherscan, Alchemy, atau MetaMask.

Contoh Ether

1// Web3Provider membungkus provider Web3 standar, yaitu
2// apa yang disuntikkan MetaMask sebagai window.ethereum ke setiap halaman
3const provider = new ethers.providers.Web3Provider(window.ethereum)
4
5// Plugin MetaMask juga memungkinkan penandatanganan transaksi ke
6// kirim ether dan bayar untuk mengubah state di dalam blockchain.
7// Untuk ini, kita membutuhkan penandatangan akun...
8const signer = provider.getSigner()
Salin

Contohy Web3js

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

Setelah disiapkan, Anda dapat membuat kueri blockchain untuk:

  • nomor blok
  • estimasi gas
  • aksi kontrak pintar
  • id jaringan
  • dan banyak lagi...

Fungsi dompet

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

Berikut adalah contoh dari Ether

1// Buat instance dompet dari frasa mnemonic...
2mnemonic =
3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"
4walletMnemonic = Wallet.fromMnemonic(mnemonic)
5
6// ...atau dari kunci privat
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// true
11
12// Alamat sebagai Promise tiap API Penandatangan
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// Address dompet juga tersedia secara bersamaan
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// Komponene kriptografik internal
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// Frasa mnemonic dompet
27walletMnemonic.mnemonic
28// {
29// locale: 'en',
30// path: 'm/44\'/60\'/0\'/0/0',
31// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
32// }
33
34// Catatan: Dompet yang terbentuk dari kunci privat tidak
35// punya frasa mnemonic (derivasi mencegah ini)
36walletPrivateKey.mnemonic
37// null
38
39//Menandatangani pesan
40walletMnemonic.signMessage("Hello World")
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// Mengesahkan transaksi
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// Metode penghubung mengembalikan instance baru dari
53// Dompet yang terhubung dengan penyedia
54wallet = walletMnemonic.connect(provider)
55
56// Membuat query jaringan
57wallet.getBalance()
58// { Promise: { BigNumber: "42" } }
59wallet.getTransactionCount()
60// { Promise: 0 }
61
62// Mengirim ether
63wallet.sendTransaction(tx)
Tampilkan semua
Salin

Baca dokumen lengkapnya(opens in a new tab)

Setelah disiapkan, Anda dapat:

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

Berinteraksi dengan fungsi kontrak pintar

Pustaka klien JavaScript memungkinkan aplikasi Anda memanggil fungsi kontrak pintar dengan membaca Antarmuka Biner Aplikasi (ABI) dari kontrak yang dikompilasi.

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

Jadi, berikut ini kontrak Solidity:

1contract Test {
2 uint a;
3 address d = 0x12345678901234567890123456789012;
4
5 function Test(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
Salin

Akan menghasilkan JSON seperti 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
Salin

Ini berarti Anda dapat:

  • Mengirim transaksi ke kontrak pintar dan menjalankan metodenya
  • Melakukan pemanggilan untuk memperkirakan gas yang diperlukan oleh metode eksekusi saat dieksekusi di EVM
  • Menyebarkan kontrak
  • Dan banyak lagi...

Fungsi utilitas

Fungsi utilitas memberi Anda jalan pintas praktis yang membuat pembangunan dengan Ethereum sedikit lebih mudah.

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

Dan dalam ether terlihat seperti ini:

1// mendapatkan saldo akun (dengan alamat atau nama ENS)
2balance = await provider.getBalance("ethers.eth")
3// { BigNumber: "2337132817842795605" }
4
5// Seringkali Anda perlu memformat output untuk pengguna
6// yang lebih suka melihat nilai dalam ether (alih - alih wei)
7ethers.utils.formatEther(balance)
8// '2.337132817842795605'
Salin

Pustaka yang tersedia

Web3.js - API JavaScript untuk Ethereum.

Ethers.js - Implementasi dompet Ethereum secara lengkap dengan JavaScript and TypeScript.

The Graph - Protokol untuk mengindeks data Ethereum dan IPFS dan membuat kuerinya menggunakan GraphQL.

light.js - Pustaka JS reaktif tingkat tinggi yang dioptimalkan untuk klien ringan.

Web3-wrapper - Alternatif Typescript untuk Web3.js.

Alchemyweb3 - Wrapper Web3.js dengan percobaan ulang otomatis dan api yang ditingkatkan.

Bacaan lebih lanjut

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

  • Node dan klien
  • Kerangka kerja pengembangan
  • Menyiapkan Web3js untuk menggunakan blockchain Ethereum dalam JavaScript – Instruksi untuk menyiapkan web3.js dalam proyek Anda.
  • Memanggil kontrak pintar dari JavaScript – Menggunakan token DAI, lihat cara memanggil fungsi kontrak menggunakan JavaScript.
  • Mengirim transaksi menggunakan web3 dan Alchemy – Panduan langkah demi langkah untuk mengirim transaksi dari backend.

Apakah artikel ini membantu?