SteemVM Oracle Update: Smarter Validator Monitoring & Automated Recovery
A significant optimization has been implemented in the SteemVM Oracle system. Now, all three Oracle clients—Go, Python, and JavaScript—will verify the validator's current status before submitting transactions.
The primary goal is to eliminate unnecessary failed transactions, gas fees, and price API calls associated with jailed or inactive validators.
Previous Issue
An Oracle client runs alongside every SteemVM validator. The Oracle performs two main tasks:
- Relaying Steem bridge transfers
- Submitting STEEM/SBD price feeds during each voting period
The bridge system would automatically stop functioning if the validator was not bonded. However, the price-feed system continued to submit transactions even when the validator was jailed.
Since a jailed validator cannot cast price votes, the chain would reject every transaction.
This resulted in three issues:
1. Wasted Fees
Price-feed transactions are not fee-exempt. Consequently, gas fees had to be paid even though the transactions failed.
2. Failed Transaction Spam
Repeated submission of rejected transactions by jailed validators created unnecessary failed transactions and error logs on the network.
3. Unnecessary API Calls
The Oracle was gathering price data that the validator ultimately lacked the permission to submit. This resulted in unnecessary requests being sent to APIs like CoinMarketCap or CoinGecko.
The New Fix
All three Oracle clients—Go, Python, and JavaScript—will now follow the same rule:
Transactions will be submitted only if the validator is bonded and not jailed.
The price-feed mechanism will now check the validator's status at the beginning of each voting period.
If the Validator is Jailed
- No price-feed transactions will be submitted
- No price API calls will be made
- No repeated error logs will be generated
- A clear status message will be logged
Example:
price feeder idle: not broadcasting (validator is jailed)
After Validator Unjail
Once the validator is unjailed, the Oracle will automatically resume price-feed operations during the next voting period. No need to restart Oracle.
If the node is temporarily unreachable
Oracle will not send transactions and will retry during the next status check.
Bridge jobs will also follow the same validator-status rule.
Fix for all three Oracle Clients
The update has been applied to all three implementations:
- Go Oracle
- Python Oracle
- JavaScript Oracle
Each client has been tested against various validator states and verified on the live chain to ensure they do not send unnecessary transactions while in an inactive or jailed state.
Docker Validator Update
Validator operators using Docker need to pull the latest code from the SteemVM folder and update only the specific Oracle container they are using.
Example for Go Oracle:
git pull
docker compose --profile go pull oracle-go
docker compose --profile go up -d --no-deps oracle-go
Using --no-deps here ensures the main SteemVM node is not restarted; only the Oracle container is replaced/restarted.
If using Python or JavaScript Oracle, perform a similar update using the corresponding profile/container.
Oracle Status Check
You can check the Oracle logs to verify if the update is working correctly:
docker compose logs --tail=20 oracle-go
You can use oracle-python or oracle-js instead, if applicable.
Active Validator
Normal price-feed activity will be visible.
Jailed Validator
Only a status message like this will appear:
price feeder idle: not broadcasting (validator is jailed)
And no further failed price-feed transactions will be generated.
What to do if the validator is jailed
First, you must bring the node back into a synchronized state. Afterward, the validator can be unjailed:
docker exec -it steemvm-node /root/go/bin/steemvmd tx slashing unjail \
--from <your-key> --keyring-backend test --home /root/.steemvm \
--chain-id steemvm --gas auto --gas-adjustment 1.5 --gas-prices 1000000000asteem -y
Once successfully unjailed, the Oracle will automatically begin submitting price feeds in the next voting period.

Congratulations!
Your post has been selected and upvoted by the SteemPro Team 🚀
Explore more on SteemPro:
🌐 https://www.steempro.com
🎮 Play SteemHeights: https://www.steempro.com/games/steem-heights
💬 Join our Discord: https://discord.gg/Bsf98vMg6U
💪 Supporting the growth of the Steem ecosystem together.
🟩 Vote for witness faisalamin:
https://steemitwallet.com/~witnesses
https://www.steempro.com/witnesses#faisalamin
This is an automated message.