DEV Community

Loading Blocks
Loading Blocks

Posted on

Solidity Events

Definition

Mechanism for contracts to broadcast logs, cheaper than storing state.

core usage

Frontend / off-chain apps listen to events and react.

indexed keyword: up to 3 parameters can be indexed, useful for filtering & searching

contract Auction {
   event Bid(address indexed bidder, uint amount);
   function placeBid() public payable {
       // ... logic ...
       emit Bid(msg.sender, msg.value);
   }
}
Enter fullscreen mode Exit fullscreen mode
// ethers.js
import { ethers } from "ethers";

const contract = new ethers.Contract(contractAddress, abi, provider);

contract.on("Bid", (bidder, amount, event) => {
    console.log("📢 New Bid:", bidder, amount.toString());
    console.log("Full event object:", event);
});

Enter fullscreen mode Exit fullscreen mode
// web3.js
contract.events.Bid()
  .on("data", (event) => {
      console.log("📢 New Bid:", event.returnValues);
  })
  .on("error", console.error);
Enter fullscreen mode Exit fullscreen mode

practical effect

The frontend can show newest bid price, don't need to call contract function period.

Event data can see in the Etherscan

Top comments (0)