Subscribing to Events
You can subscribe to the logs of the events from contracts deployed on your SKALE Chain.
Using Web3.js
For more reference, please see the Web3 Documentation: https://web3js.readthedocs.io/en/v1.5.2/web3-eth-subscribe.html#subscribe
Web3.js requires a websocket connection to subscribe to events/logs. For http/https connection for event subscriptions, see Ethers.js |
Subscribing to Event logs
import Web3 from "web3";
let web3 = new Web3("wss://your.skale.endpoint")
const imaAbis = require("./dir/to/contract-abi.json");
const address = imaAbis.contract_address;
);
var eventName = "EVENT_TO_TRACK";
var topic = web3.eth.abi.encodeEventSignature(eventName);
var filter = {
address: address,
topics: [topic],
fromBlock: 0
};
web3.eth
.subscribe("logs", filter, function (error, result) {
if (!error) console.log(result);
})
.on("connected", function (subscriptionId) {
console.log(subscriptionId);
})
.on("data", function (log) {
console.log("Printing array of events:");
console.log(log);
document.getElementById("output").innerHTML += JSON.stringify(
log,
undefined,
2
);
});
Using Ethers.js
For more reference, please see the Ethers.js documentation: https://docs.ethers.io/v5/api/providers/provider/#Provider-getLogs
Ethers.js doesn’t require a websocket connection to subscribe to events/logs. You can use http/https or ws/wss. |
Subscribing to Event Logs
Any contract that emits events, can be subscribed. A generic example is provided below:
import { ethers } from "ethers";
let provider = new ethers.providers.JsonRpcProvider(
"https://your.skale.chain.endpoint"
const imaAbis = require("./dir/to/contract-abi.json");
const address = imaAbis.contract_address;
);
var abi = ["event EventToTrack(bool result)"];
var iface = new ethers.utils.Interface(abi);
var filter = {
address: address,
topics: [iface.getEventTopic("EventToTrack")],
fromBlock: 0
};
var callPromise = provider.getLogs(filter);
callPromise
.then(function (events) {
console.log("Printing array of events:");
console.log(events);
var parsedEvents = events.map(function (log) {
return iface.parseLog(log);
});
document.getElementById("output").innerHTML = JSON.stringify(
parsedEvents,
undefined,
2
);
console.log(parsedEvents);
})
.catch(function (err) {
console.log(err);
});