Lewati ke konten utama

Berinteraksi dengan Blockchain melalui web3.js

web3.js adalah sebuah library JavaScript untuk membangun dan berinteraksi dengan jaringan blockchain yang kompatibel dengan EVM.

Anda juga dapat menggunakan web3.js untuk berinteraksi dengan smart contract yang telah di-deploy di jaringan Lisk.

Instalasi

Untuk menginstal web3.js, jalankan perintah berikut:

npm install --save web3

Import

Sebelum mulai menggunakan web3.js, Anda perlu mengimpornya ke dalam proyek Anda.

Web3.js mendukung impor modul CommonJS maupun native ESM.

Tambahkan baris kode berikut di bagian atas file Anda untuk mengimpor web3.js:

const { Web3 } = require('web3');

Menghubungkan ke Lisk

Anda dapat menghubungkan ke Lisk dengan membuat sebuah objek Web3 baru menggunakan URL RPC dari jaringan Lisk:

import { Web3 } from 'web3';

// Instansikan objek web3 dengan memberikan URL RPC dari Lisk Sepolia.
const web3 = new Web3('https://rpc.sepolia-api.lisk.com');

Membaca Data dari Blockchain

Setelah Anda membuat objek Web3, Anda dapat menggunakannya untuk membaca data dari jaringan Lisk.

Sebagai contoh, Anda dapat menggunakan metode getBlockNumber untuk mendapatkan blok terbaru:

// Mengambil data dari blockchain
async function getLatestBlock() {
const latestBlock = await web3.eth.getBlockNumber()
console.log("The latest block's number is:", latestBlock);
}

getLatestBlock();
Contoh kode lengkap:
import { Web3 } from 'web3';

// Instansikan objek web3 dengan memberikan URL RPC dari Lisk Sepolia.
const web3 = new Web3('https://rpc.sepolia-api.lisk.com');

// Instansikan objek web3 dengan memberikan URL RPC dari Lisk.
// const web3 = new Web3('https://rpc.api.lisk.com');

// Mengambil data dari blockchain
async function getLatestBlock() {
const latestBlock = await web3.eth.getBlockNumber()
console.log("The latest block's number is:", latestBlock);
}

getLatestBlock();
tip

Web3 menyediakan berbagai metode Web3Eth yang dapat digunakan untuk berinteraksi dengan blockchain.

Untuk menulis data ke jaringan Lisk, Anda perlu membuat sebuah Wallet.

catatan

Wallet pada web3.js adalah titik masuk utama Anda jika ingin menggunakan private key untuk melakukan operasi blockchain, seperti mengirim transaksi, dan lainnya.
Ini juga disebut sebagai Signer di library lain.

Anda dapat membuat sebuah Wallet dengan menginstansikan objek Wallet baru dari Web3 dan menambahkan private key ke dalamnya.
Private key tersebut nantinya dapat digunakan untuk mengirim transaksi di blockchain.

// Menambahkan akun ke wallet
const privateKey = '0x<SENDER_PRIVATE_KEY>';
const account = web3.eth.accounts.wallet.add(privateKey);

// Buat objek transaksi untuk mengirimkan `0.0001` ETH ke alamat `0x.....` dari akun account[0].
const tx =
{
from: account[0].address,
to: '<RECIPIENT_ADDRESS>',
value: web3.utils.toWei('.0001', 'ether')
};
// Alamat `from` harus sesuai dengan yang sebelumnya ditambahkan menggunakan `wallet.add`.

// Kirim transaksi
const txReceipt = await web3.eth.sendTransaction(tx);

console.log('Tx hash:', txReceipt.transactionHash)
info

PRIVATE_KEY adalah private key dari akun yang digunakan untuk menandatangani dan mengirim transaksi menggunakan web3.js.

Saldo akun penerima akan bertambah sebesar 0.0001 ETH setelah transaksi berhasil dieksekusi.

Contoh kode lengkap
import { Web3 } from 'web3';

// Instansikan objek web3 dengan memberikan URL RPC dari Lisk Sepolia.
const web3 = new Web3('https://rpc.sepolia-api.lisk.com');

// Instansikan objek web3 dengan memberikan URL RPC dari Lisk.
// const web3 = new Web3('https://rpc.api.lisk.com');

// Tambahkan sebuah akun ke wallet.
const privateKey = '0x<SENDER_PRIVATE_KEY>';
const account = web3.eth.accounts.wallet.add(privateKey);

// Buat objek transaksi untuk mengirimkan `0.0001` ETH ke alamat `0x.....` dari akun account[0]
const tx =
{
from: account[0].address,
to: '<RECIPIENT_ADDRESS>',
value: web3.utils.toWei('.0001', 'ether')
};
// Alamat `from` harus sesuai dengan yang sebelumnya ditambahkan menggunakan `wallet.add`.

// Kirim transaksi
const txReceipt = await web3.eth.sendTransaction(tx);

console.log('Tx hash:', txReceipt.transactionHash)

Berinteraksi dengan Smart Contract

Anda dapat menggunakan web3.js untuk berinteraksi dengan sebuah smart contract di Lisk dengan menginstansikan objek Contract dan memberikan ABI serta address dari smart contract yang telah di-deploy.

Pada bagian berikut, kita akan:

  • Membaca data dari smart contract yang telah di-deploy, secara spesifik, kita akan mengambil nama dari contract tersebut.
  • Selain itu, kita juga akan mint token melalui smart contract yang sudah di-deploy.
tip

Untuk gambaran umum tentang fungsi publik yang tersedia pada contract, silakan periksa tab Read Contract dan Write Contract untuk contract tertentu.

Membaca dari Smart Contract

Untuk membaca data dari sebuah smart contract, Anda perlu memberikan address dan abi dari smart contract yang telah di-deploy dan diverifikasi. Setelah informasi tersebut diberikan, fungsi read-only dari smart contract dapat dipanggil, seperti yang dijelaskan di bawah ini:

Mengambil nama contract
// Alamat contract yang ingin Anda interaksikan
const address = '0x108872F713A27bc22ca1db8CEefCAC8CbeDdF9E5';

// Instansiasi objek contract
const contract = new web3.eth.Contract(abi, address);

// Panggil salah satu fungsi 'Read contract', misalnya 'name()'.
const contractName = await contract.methods.name().call();

console.log('Contract\'s Name is: ', contractName);
Contoh kode lengkap
get-contract-name.js
import { Web3 } from 'web3';
import { abi } from './abi.js';

// Instansikan objek web3 dengan memberikan URL RPC dari Lisk Sepolia
const web3 = new Web3('https://rpc.sepolia-api.lisk.com');

// Instansikan objek web3 dengan memberikan URL RPC dari Lisk
// const web3 = new Web3('https://rpc.api.lisk.com');

// Alamat contract yang ingin Anda interaksikan
const address = '0x108872F713A27bc22ca1db8CEefCAC8CbeDdF9E5';

// Instansiasi objek contract
const contract = new web3.eth.Contract(abi, address);

// Panggil salah satu fungsi 'Read contract', misalnya 'name()'
const contractName = await contract.methods.name().call();

console.log('Contract\'s Name is: ', contractName);
Output
Contract's Name is:  Lisk

Untuk menulis data melalui metode contract, beberapa hal diperlukan, seperti:

  • alamat contract
  • alamat penerima
  • private key pengirim
  • ... dan nama metode

Gunakan cuplikan kode berikut untuk berinteraksi dengan fungsi mint() dari contract yang telah di-deploy.

miniting-token.js
// Alamat contract yang ingin Anda interaksikan
const contractAddress = '0x108872F713A27bc22ca1db8CEefCAC8CbeDdF9E5';

// Alamat akun penerima yang akan menerima NFT.
const recipientAddress = 'RECIPIENT_ADDRESS'
const amount = web3.utils.toWei('.0001', 'ether')

// PRIVATE_KEY dari akun pengirim.
const privateKey = 'PRIVATE_KEY';
const account = web3.eth.accounts.wallet.add(privateKey);

// Instansiasi objek contract.
const contract = new web3.eth.Contract(abi, contractAddress);

// Kirim permintaan ke fungsi `mint()` untuk mint token.
const txReceipt = await contract.methods.mint(recipientAddress, amount).send({ from: account[0].address });

console.log('Tx hash:', txReceipt.transactionHash);
Contoh kode lengkap
miniting-token.js
import { Web3 } from 'web3';
import { abi } from './abi.js';

// Instansiasi objek web3 dengan memberikan URL RPC dari Lisk.
const web3 = new Web3('https://rpc.sepolia-api.lisk.com');

// Untuk jaringan Lisk
//const web3 = new Web3('https://rpc.api.lisk.com');

// Alamat contract yang ingin Anda interaksikan.
const contractAddress = '0x108872F713A27bc22ca1db8CEefCAC8CbeDdF9E5';

// Alamat akun penerima yang akan menerima NFT.
const recipientAddress = 'RECIPIENT_ADDRESS'
const amount = web3.utils.toWei('.0001', 'ether')

// PRIVATE_KEY dari akun pengirim.
const privateKey = 'PRIVATE_KEY';
const account = web3.eth.accounts.wallet.add(privateKey);

// Instansiasi objek contract.
const contract = new web3.eth.Contract(abi, contractAddress);

// Kirim permintaan ke fungsi `mint()` untuk me-mint token.
const txReceipt = await contract.methods.mint(recipientAddress, amount).send({ from: account[0].address });

console.log('Tx hash:', txReceipt.transactionHash);
Output
Transaction hash: 0xe654513f453623d9ce329b575985b7fcd09116325d10150d7cd30dcdedc124a9
info

Anda dapat menggunakan hash transaksi yang diterima di atas untuk memeriksa detail transaksi mint di Blockscout Explorer: 0xe654513f453623d9ce329b575985b7fcd09116325d10150d7cd30dcdedc124a9.