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, yaitu2// apa yang disuntikkan MetaMask sebagai window.ethereum ke setiap halaman3const provider = new ethers.providers.Web3Provider(window.ethereum)45// Plugin MetaMask juga memungkinkan penandatanganan transaksi ke6// 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// atau3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))45// ganti penyedia6web3.setProvider("ws://localhost:8546")7// atau8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))910// Menggunakan penyedia IPC di node.js11var net = require("net")12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path13// atau14var web3 = new Web3(15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)16) // mac os path17// untuk windows path berbentuk: "\\\\.\\pipe\\geth.ipc"18// untuk linux path berbentuk: "/users/myuser/.ethereum/geth.ipc"Tampilkan semuaSalin
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)56// ...atau dari kunci privat7walletPrivateKey = new Wallet(walletMnemonic.privateKey)89walletMnemonic.address === walletPrivateKey.address10// true1112// Alamat sebagai Promise tiap API Penandatangan13walletMnemonic.getAddress()14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }1516// Address dompet juga tersedia secara bersamaan17walletMnemonic.address18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'1920// Komponene kriptografik internal21walletMnemonic.privateKey22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'23walletMnemonic.publicKey24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'2526// Frasa mnemonic dompet27walletMnemonic.mnemonic28// {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// }3334// Catatan: Dompet yang terbentuk dari kunci privat tidak35// punya frasa mnemonic (derivasi mencegah ini)36walletPrivateKey.mnemonic37// null3839//Menandatangani pesan40walletMnemonic.signMessage("Hello World")41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }4243tx = {44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",45 value: utils.parseEther("1.0"),46}4748// Mengesahkan transaksi49walletMnemonic.signTransaction(tx)50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }5152// Metode penghubung mengembalikan instance baru dari53// Dompet yang terhubung dengan penyedia54wallet = walletMnemonic.connect(provider)5556// Membuat query jaringan57wallet.getBalance()58// { Promise: { BigNumber: "42" } }59wallet.getTransactionCount()60// { Promise: 0 }6162// Mengirim ether63wallet.sendTransaction(tx)Tampilkan semuaSalin
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;45 function Test(uint testInt) { a = testInt;}67 event Event(uint indexed b, bytes32 c);89 event Event2(uint indexed b, bytes32 c);1011 function foo(uint b, bytes32 c) returns(address) {12 Event(b, c);13 return d;14 }15}Tampilkan semuaSalin
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":false19 },{20 "type":"event",21 "name":"Event2",22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],23 "anonymous":false24}]Tampilkan semuaSalin
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" }45// Seringkali Anda perlu memformat output untuk pengguna6// 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.
- The Graph(opens in a new tab)
- Graph Explorer(opens in a new tab)
- Dokumentasi(opens in a new tab)
- GitHub(opens in a new tab)
- Discord(opens in a new tab)
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!
Topik terkait
Tutorial terkait
- 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.