Over the past few days, I’ve been further developing the Transcoder Watcher Bot running in my 0x525 Transcoder Telegram Channel. It was my goal to create a tool that everyone can use to get notified about transcoder events and here it is:
If you subscribe to a transcoder (or multiple, there is no limit), you will get notified about the following events:
reward calls
missing reward calls
reward cut changes
transcoder becomes inactive
Whenever possible, I include the transaction link so you can be sure that no incorrect information is sent. However, please note that the bot is still in the testing phase and of course it’s always possible that the script crashes and the bot stops working.
How does it look like?
Here are some screenshots for the various events. - Reward Calls:
- Missing Reward Calls:
- Reward Cut changes:
- Transcoder becomes inactive:
If you discover any error or have feature requests, you can reply here or send me a message on discord!
One question… Right now, the bot responds to every message I post in the channel with the list of commands. Is there any way to stop/disable these responses?
Hey Chris, thanks for trying out my bot!
I already answered in your Telegram Channel but I’ll post it here again since other Transcoders might also want to use the bot in their group:
Don’t promote the bot to an admin, just add the bot as a normal user. To access the bots commands, you will need to use “/”+command (e.g. /subscribe 0xabc). So the bot will only respond to commands starting with a slash, this prevents the response to every message
Fixed (hopefully) a bug where the same reward call notifications were sent multiple times
You will now get notified when a transcoder did not claim the rewards in the previous round:
Also, I’m working on a feature that will let you check a transcoders reward cut changes and (missed) reward calls in the last 100 rounds. So that you can check the performance of a transcoder before you bond to it.
Thanks to all the users of the bot and for those that support me by bonding to my transcoder!
New feature for the bot: Get a transcoders reward cut changes & reward call history for the past 100 rounds
The reward cut is an important metric of a transcoder. One of the main goals of the Telegram Bot was to Increase transparency by notifying users when a transcoder changes its reward cut.
But something that a lot of stakers would like to know before they bond to a transcoder is its history: How often did the transcoder change its reward cut? How reliable did the transcoder claim the rewards in the past?
To answer those questions and to further increase the transparency for the stakers, I’ve added a “history” function to the bot. By sending “history” followed by the transcoder address, the bot will show you the reward cut changes and the reliability of the transcoder (in terms of its reward calls) for the past 100 rounds! As always, I’m including as many transaction links as possible - so you don’t have to trust me and can check the information the bot is providing for yourself.
Some screenshots:
Thanks to all the users of the bot and for those that support me by bonding to my transcoder!
If you get/find errors or get wrong information, please contact me here or on discord!
Some technical stuff for those who are interested: Pulling 100 rounds (576’000 block) of data directly from the blockchain each time a user requests the history take a little bit too long. So I’ve done this for every active transcoder at round 1311. Since then, a script updates the history file with new data as soon as a round is over. Like this, the request are much faster and I also have a nice collection of transcoder history for some data analysis
Hey all, as you might have noticed, a bug occurred at the start of todays round. Wrong messages were sent saying that the transcoders did not claim the rewards during the last round.
Here’s what’s happened:
Through the web3py library, the script is listening for new round events. When such an event happens, the script first checks if every active transcoder did claim the rewards during the last round (through a “reward called” attribute that is set to “true” if after the reward call) and then resets the “reward called” attribute to “false” (since it’s a new round). Now there seems to be a bug in the web3py library (maybe caused through uncles in the blockchain) that causes an event to be fired multiple times. Today, the new round event was fired 3 times. So the first time, the script reset the reward called attribute to false for every transcoder. The second and third time, the script assumed that the transcoders did not claim the rewards since the attribute was set to false and there was a new round - so it sent the wrong messages.
I’ve implemented a fix in the script that should ignore those incorrect, multiple events.
Nevertheless, if you see a weird/unexpected message or value, please always double check by looking at the transaction link (in the current or previous messages). E.g. for todays “no rewards claimed” message - you could check the transaction link of last rounds “rewards claimed” message to see what’s true.
As you might have noticed, there have been some issues with the Transcoder Watcher Bot in the last few days:
No Reward Call notifications for certain transcoders
Incorrect warning messages claiming that certain transcoders did not claim the reward yet
The reason for this is a syncing problem with the geth light client: From time to time, the syncing fails and a couple of blocks are skipped. Now if the reward call falls into a skipped block, my bot script won’t handle it (since the filter is set up to only listen for new events and not look at past blocks).
Solution
I’ve reset my peer list for the light client and so far, there were no skipped blocks.
If the syncing problem keeps coming back, I’ll rewrite the script in a way that a few skipped blocks won’t matter. E.g. the bot would check every 500 or 1000 blocks in a round if a reward call or reward cut change happened and send notifications.
And as always: If you get a warning message or no reward call message, please always check manually on etherscan if the transcoder didn’t claim the rewards yet.
Every ~500 blocks, the bot now checks the events of the past ~500 blocks (since the last check). That way, it doesn’t matter if the node is not always synced perfectly. However, this also means that the bot is not instant anymore - there might be an up to two hour (500 blocks) delay between the event happening and the bot notification.
As you might have noticed, the bot stopped working yesterday
I updated geth (and the web3 library) and now it seems that the filters that the script uses are broken. Unfortunately, I currently don’t have time to fix this, so I can’t tell you when the bot will start working again.
So please use other methods for your transcoder reporting in the meantime.