1. Introduction
Creating a user-friendly interface for Ethers.js interactions allows users to easily send transactions, check balances, and interact with smart contracts. This guide will walk you through building a simple web application using HTML, CSS, and JavaScript.
2. Setting Up Your Project
First, create a new directory for your project and initialize it:
mkdir ethers-interface
cd ethers-interface
npm init -y
npm install ethers 3. Create the HTML Structure
Create an index.html file with the following structure:
<!DOCTYPE html>
<html lang=`en`>
<head>
<meta charset=`UTF-8`>
<meta name=`viewport` content=`width=device-width, initial-scale=1.0`>
<title>Ethers.js User Interface</title>
<link rel=`stylesheet` href=`styles.css`>
</head>
<body>
<h1>Ethers.js User Interface</h1>
<div id=`app`>
<h2>Check Balance</h2>
<input type=`text` id=`address` placeholder=`Enter Ethereum address`>
<button id=`checkBalance`>Check Balance</button>
<p id=`balanceResult`></p>
<h2>Send Ether</h2>
<input type=`text` id=`recipient` placeholder=`Recipient Address`>
<input type=`text` id=`amount` placeholder=`Amount in Ether`>
<button id=`sendEther`>Send Ether</button>
<p id=`sendResult`></p>
</div>
<script src=`script.js`></script>
</body>
</html> 4. Styling the Interface
Create a styles.css file to style your application:
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
padding: 20px;
}
h1 {
text-align: center;
}
#app {
max-width: 600px;
margin: auto;
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
input {
width: calc(100% - 22px);
padding: 10px;
margin: 10px 0;
}
button {
padding: 10px;
background-color: #007bff;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #0056b3;
}
p {
color: #333;
}
5. Implementing the JavaScript Logic
Create a script.js file to handle Ethers.js interactions:
const { ethers } = require(`ethers`);
async function checkBalance() {
const address = document.getElementById(`address`).value;
const provider = new ethers.providers.Web3Provider(window.ethereum);
try {
const balance = await provider.getBalance(address);
const balanceInEther = ethers.utils.formatEther(balance);
document.getElementById(`balanceResult`).innerText = `Balance: ${balance InEther} ETH`;
} catch (error) {
console.error(`Error fetching balance:`, error);
document.getElementById(`balanceResult`).innerText = `Error fetching balance. Please check the address.`;
}
}
async function sendEther() {
const recipient = document.getElementById(`recipient`).value;
const amount = document.getElementById(`amount`).value;
const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();
try {
const tx = await signer.sendTransaction({
to: recipient,
value: ethers.utils.parseEther(amount)
});
await tx.wait();
document.getElementById(`sendResult`).innerText = `Transaction successful! Hash: ${tx.hash}`;
} catch (error) {
console.error(`Error sending Ether:`, error);
document.getElementById(`sendResult`).innerText = `Error sending Ether. Please check the details.`;
}
}
document.getElementById(`checkBalance`).addEventListener(`click`, checkBalance);
document.getElementById(`sendEther`).addEventListener(`click`, sendEther);
6. Connecting to MetaMask
Ensure that users have MetaMask installed and connected to your application. You can prompt users to connect their wallet:
async function connectWallet() {
if (window.ethereum) {
await window.ethereum.request({ method: 'eth_requestAccounts' });
console.log(`Wallet connected!`);
} else {
alert(`Please install MetaMask!`);
}
}
window.onload = connectWallet;
7. Conclusion
By following these steps, you can create a user-friendly interface for Ethers.js interactions that allows users to check balances and send Ether easily. This enhances the overall user experience and makes blockchain interactions more accessible.
