Interacting with the Ethereum blockchain is a fundamental skill for any Web3 developer. The web3.eth module, part of the web3.js library, serves as the primary interface for reading data from and writing transactions to the Ethereum network. This comprehensive guide dives into the core functionalities of web3.eth, explaining how to query blockchain state, manage accounts, send transactions, and work with smart contracts—all essential knowledge for building decentralized applications (dApps).
Understanding the web3.eth Module
The web3.eth namespace encapsulates a wide range of methods and properties designed to facilitate communication between your application and the Ethereum blockchain. Before using these features, ensure you have correctly initialized the Web3.js library in your project environment.
Setting the Default Account
The web3.eth.defaultAccount property allows you to set a default Ethereum address that will be used automatically in subsequent operations like sending transactions or making contract calls.
Possible Values:
String(20 bytes): An Ethereum address you control. The default value isundefined.
Return Value:
- Returns the currently configured default account address as a string.
var defaultAccount = web3.eth.defaultAccount;
console.log(defaultAccount); // ''
// Set a default account for future operations
web3.eth.defaultAccount = '0x8888f1f195afa192cfee860698584c030f4c9db1';👉 Discover how to connect your wallet and start interacting with Ethereum today.
Configuring the Default Block
Many web3.eth methods query the blockchain at a specific block height. The web3.eth.defaultBlock property sets the default target block for these queries.
Supported Values:
Number: A specific block number."earliest": Refers to the genesis block."latest": The most recently mined block (default)."pending": The current block being mined, including unconfirmed transactions.
Return Value:
- Returns the current default block setting (
NumberorString).
var defaultBlock = web3.eth.defaultBlock;
console.log(defaultBlock); // 'latest'
// Change default to a specific historical block
web3.eth.defaultBlock = 231;Monitoring Node Synchronization
To ensure accurate data retrieval, it's crucial to know whether your Ethereum node is fully synchronized with the network.
Using web3.eth.syncing
This read-only property returns either false if the node is synchronized or a synchronization object containing progress details.
Return Object Fields:
startingBlock: Block number where synchronization began.currentBlock: Latest block successfully synchronized.highestBlock: Estimated highest block in the chain.
var sync = web3.eth.syncing;
console.log(sync);
/*
{
startingBlock: 300,
currentBlock: 312,
highestBlock: 512
}
*/Using web3.eth.isSyncing
For real-time updates, use web3.eth.isSyncing() with a callback function. It triggers whenever synchronization starts, progresses, or stops.
Callback Return Values:
true: Synchronization has started.false: Synchronization is complete.- Object: Current sync progress (same structure as above).
web3.eth.isSyncing(function(error, sync){
if(!error) {
if(sync === true) {
web3.reset(true);
} else if(sync) {
console.log(sync.currentBlock);
} else {
// Resume application logic
}
}
});Accessing Node and Network Information
Several properties provide insight into the current state of your connected Ethereum node.
Retrieving Mining Information
web3.eth.coinbase: Gets the address where mining rewards are sent.var coinbase = web3.eth.coinbase; console.log(coinbase); // "0x407d73d8a49eeb85d32cf465507dd71d507100c1"web3.eth.mining: Returnstrueif the node is actively mining, otherwisefalse.var mining = web3.eth.mining; console.log(mining); // true or falseweb3.eth.hashrate: Returns the number of hashes computed per second by the node.var hashrate = web3.eth.hashrate; console.log(hashrate); // e.g., 493736
Getting Current Network Conditions
web3.eth.gasPrice: Retrieves the current recommended gas price in wei, calculated from recent blocks.var gasPrice = web3.eth.gasPrice; console.log(gasPrice.toString(10)); // "10000000000000"web3.eth.blockNumber: Returns the number of the most recently mined block.var number = web3.eth.blockNumber; console.log(number); // 2744
Managing Accounts and Balances
Accessing account data is essential for user interactions and balance checks.
Listing Available Accounts
The web3.eth.accounts property returns an array of Ethereum addresses managed by your node.
var accounts = web3.eth.accounts;
console.log(accounts); // ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]Checking Account Balance
Use web3.eth.getBalance() to retrieve the ether balance of any Ethereum address.
Parameters:
addressHexString: Target Ethereum address.defaultBlock: Optional block identifier (defaults toweb3.eth.defaultBlock).
Return Value:
- A BigNumber instance representing the balance in wei.
var balance = web3.eth.getBalance("0x407d73d8a49eeb85d32cf465507dd71d507100c1");
console.log(balance.toString(10)); // '1000000000000'Getting Transaction Count
The web3.eth.getTransactionCount() method returns the number of transactions sent from a given address, which is also used as the nonce for new transactions.
var txCount = web3.eth.getTransactionCount("0x407d73d8a49eeb85d32cf465507dd71d507100c1");
console.log(txCount); // 1Reading Blockchain Data
Retrieve detailed information about blocks, transactions, and smart contracts.
Fetching Block Data
Use web3.eth.getBlock() to get comprehensive details about a specific block.
Parameters:
- Block hash or number.
- Boolean indicating whether to include full transaction objects.
- Optional callback for asynchronous execution.
var blockInfo = web3.eth.getBlock(3150);
console.log(blockInfo);Retrieving Transaction Details
getTransaction(): Get details of a specific transaction by its hash.getTransactionReceipt(): Obtain the receipt after a transaction is confirmed, including gas usage and logs.getTransactionFromBlock(): Retrieve a transaction using its block reference and index.
var receipt = web3.eth.getTransactionReceipt('0x9fc...6d8b');
console.log(receipt.status); // '0x1' indicates successInteracting with Smart Contracts
Reading Contract Code and Storage
getCode(): Retrieve the bytecode of a deployed smart contract.getStorageAt(): Read raw storage data at a specific position within a contract.
var code = web3.eth.getCode("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8");Estimating Gas Usage
Before sending a transaction, use estimateGas() to simulate execution and determine the required gas limit.
var gasEstimate = web3.eth.estimateGas({
to: "0xc4abd0339eb8d57087278718986382264244252f",
data: "0xc6888fa1..."
});Sending Transactions
Two primary methods allow you to submit transactions to the Ethereum network.
Sending Standard Transactions
Use sendTransaction() to transfer ether or trigger contract functions.
web3.eth.sendTransaction({
from: '0xSenderAddress',
to: '0xRecipientAddress',
value: '1000000000000000000', // 1 ETH
gas: 21000
}, function(err, txHash) {
if (!err) console.log(txHash);
});👉 Learn how to securely manage your crypto assets with advanced tools.
Sending Signed Raw Transactions
For enhanced security or offline signing, use sendRawTransaction() with pre-signed transaction data.
web3.eth.sendRawTransaction('0x' + serializedTx.toString('hex'), function(err, hash) {
if (!err) console.log(hash);
});Working with Smart Contracts
Create and interact with smart contracts using ABI definitions.
Creating a Contract Instance
var MyContract = web3.eth.contract(abiArray);
var contractInstance = MyContract.at('0xContractAddress');Calling Contract Methods
Methods can be invoked via .call() (read-only) or .sendTransaction() (state-changing).
// Read data (no gas cost)
var result = contractInstance.myConstantMethod.call('param');
// Modify state (requires gas)
contractInstance.myStateChangingMethod.sendTransaction('param', 23, {from: myAccount});Listening to Contract Events
Subscribe to real-time events emitted by smart contracts using filters.
var event = contractInstance.MyEvent({valueA: 23});
event.watch(function(error, result){
if (!error) console.log(result.args);
});Frequently Asked Questions
Q: What is web3.eth used for?
A: The web3.eth module provides all necessary tools to interact with the Ethereum blockchain, including reading data, sending transactions, managing accounts, and working with smart contracts.
Q: How do I check if my node is synced?
A: Use web3.eth.syncing to get sync status. It returns false when fully synced or an object with sync progress details during synchronization.
Q: What's the difference between call() and sendTransaction()?
A: .call() executes a function locally without changing blockchain state (free). .sendTransaction() broadcasts a transaction that modifies state and requires gas fees.
Q: How can I estimate gas before sending a transaction?
A: Use web3.eth.estimateGas(callObject) to simulate execution and receive an estimated gas requirement.
Q: Can I interact with contracts without deploying them?
A: Yes. You can create an instance of an already-deployed contract using its ABI and address with contract.at(address).
Q: Why use sendRawTransaction instead of sendTransaction?
A: sendRawTransaction allows you to sign transactions offline for improved security, especially when handling private keys on cold wallets.