I'm very excited to introduce Wolf's Witness Essentials. A project containing scripts, which kind every Witness uses, brought to the next level!
Github: https://github.com/therealwolf42/witness-essentials
Witness Watcher
Witness Watcher is a script, that watches for missed blocks of your witness.
In case of a missed block, the witness signing-key gets changed in order to either fall-back to another server or to disable the witness.
Features
Active-Key can be saved in an encrypted format instead of plaintext inside .env (doesn't work with PM2, but with multiplexers - e.g. tmux)
Keys can be rotated for a number of rounds or endlessly. For example, if you have 3 different servers, if all of them fail after another, instead of disabling the witness, the first server gets chosen again - until the number of rounds have been reached, in that case the witness would be finally disabled.
You can enable alerts for missed blocks via SMS (NEXMO & TWILIO) and EMAIL (GMAIL).
RPC-Failover
Written in Typescript
[Good-To-Know] Disabling of the witness wasn't possible for many months due to a bug in the steem-js and dsteem node-modules. After @netuoso created a PR, which solved this problem - @drakos made me aware of this fix and I created a npm-module called
steem-js-witness-fix
, which supports disabling of the witness. For now,Witness Essentials
will use that plugin until it gets implemented in the official steem-js release.
Pricefeed
Pricefeed is a script that gets the current STEEM-price of major exchanges and publishes the pricefeed for your witness.
Features
Active-Key can be saved in an encrypted format instead of plaintext inside .env (doesn't work with PM2, but with multiplexers - e.g. tmux)
4 major exchanges supported - Bittrex, Binance, Huobi, Upbit.
RPC-Failover
Written in Typescript
Info
Both scripts have been tested and are working, but I'm taking no responsibilities for any bugs. Please review the source-code yourself.
Getting Started
Both scripts use the same config-files.
Setup
First off, make sure you have npm/yarn & node installed. Then:
1.) Clone Repository
git clone https://github.com/therealwolf42/witness-essentials.git
cd witness-essentials
2.) Install dependencies
yarn / npm i
3.) Copy config.json from config.example.json
cp config.example.json config.json
4.) Edit config.json
nano config.json
You will get notified if any required fields are missing when running the scripts.
{
"RPC_NODES": [
"https://api.steemit.com",
"https://steemd.privex.io",
"https://gtg.steem.house:8090",
"https://rpc.buildteam.io",
"https://steemd.minnowsupportproject.org"
],
"WITNESS": "", // add your witness account-name here
"TEST_MODE": false, // changing this to true, will result in no witness-update changes or alerts
"ENABLE_ENCRYPTION": false, // Encryption doesn't work with PM2. Use tmux for that.
"EXCHANGES": [
"bittrex",
"binance",
"huboi",
"upbit"
],
"PEG": 1,
"INTERVAL_FEED": 60,
"INTERVAL_WATCHER": 10,
"BACKUP_KEYS": [ // add your backup-keys here - e.g. "5JZ52MJF...","6TSF24FS..."
],
"MISSED_BLOCKS_THRESHOLD": 1,
"USE_SMS_ALERT": true,
"SMS_PROVIDER": "nexmo|twilio", // choose nexmo or twilio
"USE_EMAIL_ALERT":true,
"EMAIL_TO":"",
"EMAIL_FROM":"",
"ALERT_AFTER_EVERY_MISSED": true,
"ROTATE_KEYS": false, // rotate between your current signing & backup-keys
"ROTATE_ROUNDS": 1 // -1 is endless
}
5.) Create an .env file (touch .env
) with the following variables, but without the comments.
API_KEY= // API Key for NEXMO or TWILIO
API_SECRET= // API Secret for NEXMO or TWILIO
PHONE_NUMBER= // Incl. country-code: e.g. 49123456789 (+49 would be Germany) - required for both NEXMO and TWILIO
FROM_NUMBER= // Only required for TWILIO
ACTIVE_KEY= // Only required if you don't want to use the encryption feature
ENCRYPTED_ACTIVE_KEY= // You will get an encrypted key after you started either Witness Watcher or Pricefeed for the first time
GOOGLE_MAIL_ACCOUNT= // Email Account where emails are getting send from - required if you want to use Email Alerts with GMAIL
GOOGLE_MAIL_PASSWORD= // Same as above
Starting
Witness Watcher
yarn run watcher
Or with PM2 (keep in mind that encryption doesn't work with PM2 due to the missing functionality for readline)
pm2 start npm --name=watcher -- run watcher
pm2 save
pm2 logs watcher
Pricefeed
yarn run pricefeed
Or with PM2 (keep in mind that encryption doesn't work with PM2 due to the missing functionality for readline)
pm2 start npm --name=pricefeed -- run pricefeed
pm2 save
pm2 logs pricefeed
Test SMS
yarn run test_sms
Test EMAIL
yarn run test_email
Questions or Feedback?
Please let me know in the comments below if you have any questions or feedback!
Have you voted for me yet?
If you believe that I'm a trustworthy witness - then please consider voting for me. Either through a click on the image below or at: https://steemit.com/~witnesses
Thanks. It's great to know how other witnesses solve the same problems. :)
One quick note about utopian compatibility:
Your witness vote request at the end of post, almost takes all my screen on my Macbook.
Even though, this is not strictly forbidden, we have a note on our guidelines for this:
Which we expect a small text or link for the self-witness promotion.
Other than that, thanks for the quality contribution.
Your contribution has been evaluated according to Utopian policies and guidelines, as well as a predefined set of questions pertaining to the category.
To view those questions and the relevant answers related to your post, click here.
Need help? Write a ticket on https://support.utopian.io/.
Chat with us on Discord.
[utopian-moderator]
Thanks @emrebeyler.
I've made the footer & text a bit smaller :)
The key rotation rounds are a nice touch; good work~
Thanks crimson!
i'm no witness but this is cool stuff :)
thanks for sharing.
Thanks man!
Thanks for this! I've been interested in starting up my own nodes and trawling through loads of specific guides and versions that don't contain some of the info you've got here.
You're welcome, even though there isn't so much knowledge in this post. It's more a guide on how to use the Witness Watcher & Pricefeed scripts.
Hi, thank you so much, sorry plz comment my post. https://steemit.com/partiko/@aiyub99/partiko--lesson-13--cardinal-vs-ordinal-utility
Posted using Partiko Android
Hey man,
Off topic but - I'm trying to setup my first witness server; there is very little help for someone doing it first time. Anyways I have learned heaps, this is my 9th attempt. I finally got it to sync with SteemD after pre-downloading the block_log. But silly me I decided to Ctrl_C before the Steemd --replay finished...now when I run I get this crazy message blocklog excetin cannot reindex an empty chain...Oh man I don't want to have to download the whole block_log and start again..any ideas how to save me? I'm asking around but so far no luck.. Cheers.
Hey @lordnigel,
I'm not sure where the problem is, but I've seen that you've asked for help on steem.chat. Hope everything turned out well!
Thanks mate - not easy business being a witness. I'll keep learning and working at it. Cheers
Hey @therealwolf
Thanks for contributing on Utopian.
We’re already looking forward to your next contribution!
Want to chat? Join us on Discord https://discord.gg/h52nFrV.
Vote for Utopian Witness!
@therealwolf Hello there. I use Smart Steem just as much as everyone else. I was wondering if I could be part of this amazing team. I was actually thinking to implement various GIF banners for the referral process. I mean, We only have one option that is provided by the website right? Everyone is bored of seeing the same old animation over and over again. Moreover, I can help in implementing various graphics that can be used for posts and all. Check out my profile to see my work and the various items I offer for free like banners and page dividers. Moreover, I can help with any other thing that is related to Steemit. Do get back to me on Discord(@kayyam09) or on Facebook(Surfraz M Umar Kayyam).
plz fellow me and upvoting me