Skip to content

akp111/smart-contract-event-monitor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

smart-contract-event-monitor

A simple npm package that allows any dev/hacker to monitor the events emitted from a smart contract and use those information to hack/build products.

Internally it uses ethers.js to monitor contracts.

Here is a sample implementation to monitor events of a sample contract:

Lets start with the contract first:

pragma solidity >=0.7.0 <0.9.0;

contract Test {

 event DemoEvent1(address indexed oldOwner, address indexed newOwner);
 event DemoEvent2(address indexed oldOwner, address indexed newOwner);

function EmitEvent1() public  {
    emit  DemoEvent1(msg.sender, msg.sender);
}

function EmitEvent2() public  {
    emit  DemoEvent2(msg.sender, msg.sender);
}
}

You can use remix editor to compile and deploy the contract to any of the test network. In my case, I have already deployed it on goerli test network.

Next, we will need a socket URL to monitor the contract events. I am using infura socket url.

Now that we have everything in place, lets 🕵️...

Create an empty folder. For my case, I will name it test using mkdir test.

Next, initiliase an empty node project through npm init -y.

Create an empty file index.js via nano index.js and copy the following code:

const EventListner = require("smart-contract-event-monitor").default // import the package
const ABI = [ // define the ABI
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "address",
				"name": "oldOwner",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "address",
				"name": "newOwner",
				"type": "address"
			}
		],
		"name": "DemoEvent1",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "address",
				"name": "oldOwner",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "address",
				"name": "newOwner",
				"type": "address"
			}
		],
		"name": "DemoEvent2",
		"type": "event"
	},
	{
		"inputs": [],
		"name": "EmitEvent1",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "EmitEvent2",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	}
]
const contractAddress = "0x609FE9E0317EBE4BFdcdb94b04eCd84ed7d3e8A5" // contract address
// For monitoring all the events
const contractMonitor = new EventListner("wss://goerli.infura.io/ws/v3/<Project Id>",contractAddress,ABI) // initialise
// Or //
// const contractMonitor = new EventListner("wss://goerli.infura.io/ws/v3/<Project Id>",contractAddress,ABI, ['DemoEvent1']) ----> For monitoring a specific event
contractMonitor.initiateEventMonitoring((data)=>{ // call the initiateEventMonitoring to monitor the events
	console.log(data) // log the data
})

The response will be an object in the format:

{
  eventName: 'DemoEvent1', // name of the event
  data: [ // data contained in it
    '0x69e666767Ba3a661369e1e2F572EdE7ADC926029',
    '0x69e666767Ba3a661369e1e2F572EdE7ADC926029',
    oldOwner: '0x69e666767Ba3a661369e1e2F572EdE7ADC926029',
    newOwner: '0x69e666767Ba3a661369e1e2F572EdE7ADC926029'
  ],
  // transaction hash
  trxHash:'0x921931d8ca0e01fb4203ccf903149220e5e4bb27ce4844db28360219d57aa510'
}

And thats all, we will start receiving the event and the data sent out in those event seamlessly!!.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published