1.0.5 • Published 1 year ago

smart-contract-event-monitor v1.0.5

Weekly downloads
-
License
ISC
Repository
github
Last release
1 year ago

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!!.

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago