Introduction to Web3.js: The JavaScript Gateway to Ethereum

Introduction to Web3.js: The JavaScript Gateway to Ethereum

posted Originally published at thefrontendarchitect.com 3 min read

In the evolving world of decentralized applications (dApps), Web3.js stands out as a powerful JavaScript library that allows developers to interact with the Ethereum blockchain. Whether you're building smart contracts, creating wallets, or launching decentralized finance (DeFi) products, Web3.js provides the tools to connect your frontend with the blockchain backend.

In this article, we’ll break down what Web3.js is, how it works, and walk through a real example of using it to interact with a smart contract.

What is Web3.js?

Web3.js is an open-source collection of libraries that let you interact with a local or remote Ethereum node using HTTP, IPC, or WebSocket. It’s written in JavaScript and is widely used in frontend applications built with frameworks like React, Vue, or Angular.

Core purpose: To bridge the gap between decentralized networks (Ethereum) and client-side applications.

Common Use Cases:

  • Connect to Ethereum wallets like MetaMask
  • Read/write data from smart contracts
    -Read/write data from smart contracts
  • Listen for blockchain events
  • Send transactions
  • Check account balances

Web3.js Architecture

Web3.js is modular. It includes multiple packages, each with a focused responsibility:
Package


web3-eth - Interact with Ethereum blockchain and contracts


web3-shh - Whisper protocol support (deprecated)


web3-bzz - Utilities (hex, wei/ether conversions, hashing)


web3-eth-accounts - Manage Ethereum accounts


web3-eth-contract - Contract interaction (read/write, events)


Installing Web3.js

You can install Web3.js via npm:

npm install web3

Or load it via CDN:

<script src="https://cdn.jsdelivr.net/npm/web3@1.10.0/dist/web3.min.js"></script>

Connecting to Ethereum

Web3.js can connect to Ethereum via browser wallets like MetaMask or external providers like Infura.

Connecting via MetaMask

import Web3 from 'web3';

if (window.ethereum) {
  window.web3 = new Web3(window.ethereum);
  await window.ethereum.enable(); // Prompt user to connect
} else {
  alert('Please install MetaMask!');
}

Connecting via Infura

const web3 = new Web3('https://mainnet.infura.io/v3/YOUR_PROJECT_ID');

Basic Web3.js Operations

Get User Accounts

const accounts = await web3.eth.getAccounts();
console.log('Accounts:', accounts);

Get ETH Balance

const balance = await web3.eth.getBalance(accounts[0]);
console.log('ETH Balance:', web3.utils.fromWei(balance, 'ether'));

Send ETH Transaction

await web3.eth.sendTransaction({
  from: accounts[0],
  to: '0xRecipientAddress',
  value: web3.utils.toWei('0.01', 'ether')
});

Interacting with Smart Contracts

Let’s assume a smart contract is deployed, and you have its ABI and address.
ABI

const abi = [
  {
    constant: true,
    inputs: [],
    name: 'getValue',
    outputs: [{ name: '', type: 'uint256' }],
    type: 'function'
  },
  {
    constant: false,
    inputs: [{ name: '_value', type: 'uint256' }],
    name: 'setValue',
    outputs: [],
    type: 'function'
  }
];

Reading and Writing

const contractAddress = '0x123...';
const contract = new web3.eth.Contract(abi, contractAddress);

// Read value
const value = await contract.methods.getValue().call();
console.log('Stored value:', value);

// Write value
await contract.methods.setValue(42).send({ from: accounts[0] });

Listening to Events
Web3.js allows you to listen to contract events in real-time:

contract.events.ValueUpdated()
  .on('data', (event) => {
    console.log('Event received:', event.returnValues);
  })
  .on('error', console.error);

Signing Messages

const message = 'Sign this message to log in';
const signature = await web3.eth.personal.sign(message, accounts[0]);
console.log('Signature:', signature);

Gas Estimation
Estimate gas before executing transactions to avoid reverts:

const gas = await contract.methods.setValue(42).estimateGas({ from: accounts[0] });

Local Development

For local development and testing, use tools like:

  • Ganache: Local Ethereum node simulator
  • Hardhat or Truffle: Complete development environments for compiling, testing, and deploying smart contracts

Final Thoughts

Web3.js is a foundational library for blockchain developers. It gives you full control over Ethereum-based applications and is essential for dApp development. Whether you're building NFTs, DeFi apps, or identity systems, Web3.js helps bridge the gap between smart contracts and your frontend UI.

While newer libraries like Ethers.js offer a more modern syntax, Web3.js remains widely supported, thoroughly documented, and deeply integrated into the Web3 ecosystem.

References

If you read this far, tweet to the author to show them you care. Tweet a Thanks
0 votes
0 votes

More Posts

AngularAI: The Agent That Finally Gets Your Angular App

Sunny - Oct 6

Unlocking the Power of the Directive Composition API in Angular

Sunny - Jun 11

How to Maintain Fast Load Time in Angular Apps

Sunny - Jun 18

The Power of Higher Order Functions in JavaScript: Writing Cleaner and More Efficient Code

Mubaraq Yusuf - Mar 19

Unlocking the Power of Generators in JavaScript

Mubaraq Yusuf - Jan 4
chevron_left