[Witness] Update – October 2025 | steemd - changed blockchain code

in Steem Devyesterday

Some of you may think that things are pretty quiet with me at the moment. That may be true on the platform right now, but there is all the more going on behind the scenes. This is a good time for me to tell you about my current activities here on Steem. After all, it is you who have entrusted me with responsibility for your chain.



steemd

At the moment, I am mainly working on the blockchain code (steemd for short).
There is currently a proposal financed by the community through DAO funds that updates outdated libraries of steemd. This should allow us to build and run the code on newer operating systems in the future. When we want to work on the code, we won't have to deal with outdated, vulnerable and risky libraries. In the best case scenario, we will be able to use more efficient methods in the future.

In my last update, I reported that development had progressed to the point where steemd could be built on Ubuntu 24.04.
Over the last few days and weeks, I took the time to analyse and test part of the code very intensively. The aim was to check that the database created with the new code matched the original code currently in use.

To describe it briefly and as non-technically as possible: I have not succeeded in reading the database created by the blocks of the Steem blockchain outside of the blockchain using various approaches. Steemchiller and I have exchanged ideas very intensively in the witness channel and discussed the various possibilities. Ultimately, we would have to recreate part of the database logic outside of steemd in order to be able to compare the contents for consistency. However, this was not feasible for me in terms of time.

Other approaches were to read samples during the rebuilding of the database and to read using existing API queries, which I have implemented as follows:

Global Dynamic Propoerties Snapshot

steemd can be instructed to output benchmark data every x-th block using the parameter --set-benchmark-interval=x. I have extended this to include the output of the global dynamic properties at this block. If these match down to the last decimal place, this is already a good indication that the database matches.

Querying the node at a defined block

The other approach was to pause the node at a defined block – i.e. after the replay. Although there is already an option that cancels the replay at a specific block, this causes steemd to terminate. This means that no queries can be sent to the node.
I have now added an option --p2p-disable, which stops further synchronisation after the entire blockchain has been replayed. This is achieved by not starting the P2P plugin required for this.
Once the blockchain replay is complete, we can, for example, query the account balances of all accounts at a defined point in time and thus find out whether the values in both database versions are exactly the same.

My changes


My changes in the version currently running by the Witnesses
My changes in the new version

Feel free to test the changes. Complete Docker images for both versions (tags: ub18-v2 and ub24-v2) are available here: https://hub.docker.com/r/moeckisteem/steemd-db-check/tags

What happens next?

The databases are currently being replayed. Unfortunately, this takes at least 5 days per database.

Steem Search on https://moecki.online/

My Full Node on https://api.moecki.online

For fast account recovery set your recovery account to @moecki.recovery.

My Github

Vote here


15.10.2025