Hive Archaeology bot
<p dir="auto">In this post I want to introduce a new tool for HIVE, a personal bot that allows you to transparently up-vote any HIVE content as if it were in its initial 7 day window. I'll start out high level and work my way down to the technical details as the blog post continues.
<h2>A simple walk-through
<p dir="auto">Before I get into the technical details, I'm just going to share a simple scenario with you.
<p dir="auto"><a href="https://peakd.com/hive-194913/@snowwhite81/beautiful-sunset" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">post and the pictures in it, I can's vote on it. Or actually I can, but there will be no pay out if I did.<span>Today in my notifications I saw that the account <a href="/@snowwhite81">@snowwhite81 followed me. A new 3 week old account created by <a href="/@dbuzz">@dbuzz, so I check out the profile and there is only one post on the profile so far, and its two weeks old, so even if I like the
<p dir="auto">Or can I? How many times do you run into great timeless content on HIVE that you would like to up-vote, but the one week period has expired. It could be like I run into now, a post that has just run out of its window for a few days, or it could be things like timeless works of fiction or poetry, or for example project documentation that you didn't see when it had its window.
<p dir="auto">Don't you often have times like this where you don't vote for an old post for the simple reason that the one-week window has expired and there would be no value to your vote? I do, often, and often have I wished I could.
<p dir="auto"><a href="https://github.com/pibara/hive-archeology" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">HIVE archaeology bot running in the background, so guess what, I'll just up-vote her post as an illustration of what the HIVE archaeology bot does. Right now it's running on my PC in an open console, but I don't need to touch it, I simply do to <a href="https://peakd.com/hive-194913/@snowwhite81/beautiful-sunset" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">the post and upvote it.<span>Today, luckily for me (and for a tiny amount for <a href="/@snowwhite81">@snowwhite81, although my 100% vote is only worth $0.11 ) I have my brand new
<p dir="auto"><img src="https://images.hive.blog/768x0/https://files.peakd.com/file/peakd-hive/pibara/23tbGjgfcZ6kNVBHJQNBebfvzu2wwNA8wcGW9P2TkCDKLFEzX77tVQJg3YbB2FhxwAcKA.png" alt="image.png" srcset="https://images.hive.blog/768x0/https://files.peakd.com/file/peakd-hive/pibara/23tbGjgfcZ6kNVBHJQNBebfvzu2wwNA8wcGW9P2TkCDKLFEzX77tVQJg3YbB2FhxwAcKA.png 1x, https://images.hive.blog/1536x0/https://files.peakd.com/file/peakd-hive/pibara/23tbGjgfcZ6kNVBHJQNBebfvzu2wwNA8wcGW9P2TkCDKLFEzX77tVQJg3YbB2FhxwAcKA.png 2x" />
<p dir="auto">For demonstration purposes I'm upvoting with 80%.
<p dir="auto">Now first let's look what the running script is doing on my console.
<p dir="auto">First we see this:
<pre><code>INFO: fetching blocks, count = 3
INFO: Vote by owner detected: snowwhite81 beautiful-sunset
NOTICE: post reward has been paid out already, taking action
INFO: Looking for candidate reward comment in post comments
INFO: Not a viable candidate, paid out already
INFO: Not a viable candidate, paid out already
INFO: Not a viable candidate, paid out already
INFO: No candidate comments found, creating a new comment
NOTICE: new archeology comment created
NOTICE: new archeology comment_options set
NOTICE: Adding voting action to queue
INFO: waiting for : 8.269045352935791
INFO: fetching blocks, count = 3
<p dir="auto">The bot has detected my up vote, has seen that the post I voted on is past its pay-out window. After doing some checks, that I'll discuss next, it creates a new comment to the post.
<p dir="auto">Then a few minutes later, this happens.
<pre><code>INFO: fetching blocks, count = 3
INFO: waiting for : 9.486532926559448
NOTICE: Casting vote
NOTICE: Vote casted
INFO: fetching blocks, count = 4
INFO: waiting for : 9.602222681045532
<p dir="auto">The bot voted on its own comment. Well that doesn't make any sense now, or does it? We'll get to that later.
<p dir="auto">Let's look at the actual comment
<p dir="auto"><img src="https://images.hive.blog/768x0/https://files.peakd.com/file/peakd-hive/pibara/23u5X5PPBEP5k3UcZePinhz7yvQTDtYbLobauEXCJjuahi61n6KngxePeyusUtTm5eXtN.png" alt="image.png" srcset="https://images.hive.blog/768x0/https://files.peakd.com/file/peakd-hive/pibara/23u5X5PPBEP5k3UcZePinhz7yvQTDtYbLobauEXCJjuahi61n6KngxePeyusUtTm5eXtN.png 1x, https://images.hive.blog/1536x0/https://files.peakd.com/file/peakd-hive/pibara/23u5X5PPBEP5k3UcZePinhz7yvQTDtYbLobauEXCJjuahi61n6KngxePeyusUtTm5eXtN.png 2x" />
<p dir="auto">We see a comment by me, and it has been upvoted by me. Did my bot just self-upvote? Well yes, and no. To understand what happened we need to look at what <a href="https://hiveblocks.com/tx/4d5ed8dd559dbeaa570f9c22627b43cc1dafd950" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">hiveblocks has to say about the comment.
<p dir="auto"><img src="https://images.hive.blog/768x0/https://files.peakd.com/file/peakd-hive/pibara/23tHb6kphj6bZZSXHskg4YniD85QcvmRkenftxC4qWrNr5UkAEuDT5jDrvyHK4i8GkmKi.png" alt="image.png" srcset="https://images.hive.blog/768x0/https://files.peakd.com/file/peakd-hive/pibara/23tHb6kphj6bZZSXHskg4YniD85QcvmRkenftxC4qWrNr5UkAEuDT5jDrvyHK4i8GkmKi.png 1x, https://images.hive.blog/1536x0/https://files.peakd.com/file/peakd-hive/pibara/23tHb6kphj6bZZSXHskg4YniD85QcvmRkenftxC4qWrNr5UkAEuDT5jDrvyHK4i8GkmKi.png 2x" />
<p dir="auto">We see that in this case curation rewards are set to true (not the default), the post creator will get 90% of the creator share, what in this case should be $0.04, and two other accounts are named as 5% beneficiaries for the comment payout. So the simplified view is that the comment is treated almost like if it was made by the post author herself.
<p dir="auto">Now let's look at the vote.
<p dir="auto"><img src="https://images.hive.blog/768x0/https://files.peakd.com/file/peakd-hive/pibara/23twAQDSDynrqZw2pY2bKicyzhRdKsvL2d4z46CC6EvXHWhmR5HpyExRDEiAqYy1meEs4.png" alt="image.png" srcset="https://images.hive.blog/768x0/https://files.peakd.com/file/peakd-hive/pibara/23twAQDSDynrqZw2pY2bKicyzhRdKsvL2d4z46CC6EvXHWhmR5HpyExRDEiAqYy1meEs4.png 1x, https://images.hive.blog/1536x0/https://files.peakd.com/file/peakd-hive/pibara/23twAQDSDynrqZw2pY2bKicyzhRdKsvL2d4z46CC6EvXHWhmR5HpyExRDEiAqYy1meEs4.png 2x" />
<p dir="auto">Notice the actual vote mirrors the 80% value of the original meaningless vote we did on the post.
<p dir="auto">So combined with the comment creation, the bot just transparently turned a useless up-vote into an almost equivalent up-vote on a newly created comment, with a pay-out that is quite similar to what it would have been had the up-vote have been done in the original 7 day window.
<h2>Running the bot in basic mode
<p dir="auto">Firs step of running the bot is installing it. For this you need a working distribution of Python on your system. If you have that, the following command will install the tool on your local machine.
<pre><code>pip3 install hive-archeology-bot
<p dir="auto"><strong>PIBARA_WIF to the private WIF of my posting key. For obvious reasons I'm not sharing a screenshot of that bit.<span>I'm running the bot as my <a href="/@pibara">@pibara account. Before starting the bot I need to set the environment variable
<p dir="auto">The most basic way to start the bot is with the following command:
<pre><code>hive-archeology-bot pibara
<p dir="auto">Where just like with the environment variable, you need to replace <em>pibara with your own account name.
<p dir="auto">This invocation uses default values, that in the next section we will discuss how to change, although it is recommended to use the defaults if you can.
<h2>The other beneficiaries.
<p dir="auto"><span>As you saw before, next to <a href="/@snowwhite81">@snowwhite81, the comment created by the bot had two extra, be it smaller share beneficiaries:
<ul>
<li><span><a href="/@croupierbot">@croupierbot : 5%
<li><span><a href="/@emrebeyler">@emrebeyler : 5%
<p dir="auto"><a href="https://github.com/emre/lighthive" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">lighthive<span>So who are these and why are they getting a modest share of the eventual payout. Well, <a href="/@croupierbot">@croupierbot, as the author of the script, is my stake-holding account. But even-though I wrote the script, the script in turn uses a library for the actual communication with HIVE. The <span> library by <a href="/@emrebeyler">@emrebeyler. So basically what is happening here is that the two developers that made this script possible are getting a combined share of 5% of the proceedings (10% of 50% because for this comment curation rewards are turned on.
<p dir="auto">This all isn't the default setting. By default the combined share for the developers is the same 5% of the total, but curation rewards are turned off. It's your choice if you want to turn on curation rewards and if you want to increase or decrease the developer share. The demo we did above used the following bot start command:
<pre><code>hive-archeology-bot pibara --curation-reward --tool-creator-share 10
<p dir="auto">What this did is that it turned on curation rewards (cutting creator rewards in half), and it increased the share for the devs from the standard 5% of creator rewards up to 10% to compensate for the curation rewards. Note again that this is not the recommended configuration, but you are free to enable curation rewards and you are free to set the tool creator share to any value from 0% up to 50%.
<h2>comment reuse
<p dir="auto">Lets look once more at the output from our walk-through.
<pre><code>INFO: fetching blocks, count = 3
INFO: Vote by owner detected: snowwhite81 beautiful-sunset
NOTICE: post reward has been paid out already, taking action
INFO: Looking for candidate reward comment in post comments
INFO: Not a viable candidate, paid out already
INFO: Not a viable candidate, paid out already
INFO: Not a viable candidate, paid out already
INFO: No candidate comments found, creating a new comment
NOTICE: new archeology comment created
NOTICE: new archeology comment_options set
NOTICE: Adding voting action to queue
INFO: waiting for : 8.269045352935791
INFO: fetching blocks, count = 3
<p dir="auto">You see the script is looking a viable candidate four times. These are the existing comments. The script is checking if any of them is a match for another user of the HIVE archaeology bot.
<p dir="auto"><span>Let's run the bot again, but nof trom my <a href="/@croupierbot">@croupierbot account, and now let's vote for the same post as before from that account.
<pre><code>INFO: fetching blocks, count = 4
INFO: Vote by owner detected: snowwhite81 beautiful-sunset
NOTICE: post reward has been paid out already, taking action
INFO: Looking for candidate reward comment in post comments
INFO: Not a viable candidate, paid out already
INFO: Not a viable candidate, paid out already
INFO: Not a viable candidate, paid out already
INFO: Candidate comment hasn't been paid out yet
NOTICE: Possible candidate comment, author as beneficiary for 50% or more
NOTICE: Definite candidate, no unexpected beneficiaries and total adds up to 100%
NOTICE: Adding voting action to queue
INFO: waiting for : 9.19098711013794
INFO: fetching blocks, count = 3
<p dir="auto">Now we see the bot recognizes our earlier comment as a viable candidate. It won't create a new comment, and despite differing settings, opt to up-vote the existing post as good enough.
<p dir="auto"><img src="https://images.hive.blog/768x0/https://files.peakd.com/file/peakd-hive/pibara/23u5XA76Cx5kJRuTGiKSnAJv8kKfBid5jFP3mnMTWgjj4jdd5PitfFBe2XZeratFziFsY.png" alt="image.png" srcset="https://images.hive.blog/768x0/https://files.peakd.com/file/peakd-hive/pibara/23u5XA76Cx5kJRuTGiKSnAJv8kKfBid5jFP3mnMTWgjj4jdd5PitfFBe2XZeratFziFsY.png 1x, https://images.hive.blog/1536x0/https://files.peakd.com/file/peakd-hive/pibara/23u5XA76Cx5kJRuTGiKSnAJv8kKfBid5jFP3mnMTWgjj4jdd5PitfFBe2XZeratFziFsY.png 2x" />
<p dir="auto"><span>In this case it doesn't have any financial impact (<a href="/@croupierbot">@croupierbot has virtually al its stake delegated), but it shows how the script makes efficient use of existing comments made by its peers.
<h2>early beta
<p dir="auto">Please note that this version of the bot is still an early beta. It is meant to run on your own local machine and you can turn it off a few minutes after you are done voting. A single up-vote will take a little over 2 minutes to finalize, so if you haven't seen any new votes on the console for 3 or so minutes, it is save to stop the script.
<p dir="auto">Because of the early beta status, please report any bugs you run into or any problems you have installing.
<p dir="auto">After I'm more secure about the stability of the bot, I'll make a blog about running the script in Docker on your home NAS or similar device, so your own personal bot can be running in the background constantly and you can rely on it wherever you are. I'll be running it on my own QNAP shortly to see how stable it is over the cause of a few weeks before I'm confident enough to recommend that type of usage, but if you are brave, drop me a message and I'll push docker images to docker hub for you to play with.
<h2>testing your own bot
<p dir="auto">I'm inviting everyone from medium sized minnow and up (your 100% single-vote should be above the $0.02 dust level) to give this beta a spin. Try it out, give some feedback. It's an early beta, but it will remain beta without users willing to give feedback. Give it a spin, if you are brave, ask me to put a pre-beta docker image on docker hub, and most of all, if you run into any issues, let me know.
<p dir="auto">Just in case you don't know of any old content you would like to up-vote, testing the bot on <a href="/fiction/@pibara/ragnarok-conspiracy-index">my novel is of-cause always appreciated ;-)
<p dir="auto"><span>And I'm quite sure <a href="/@snowwhite81">@snowwhite81 would appreciate further use of her post for testing purposes as well.
Pretty cool idea!
I was just pondering... in terms of (internal) linkbuilding, what do you think about the following (in terms of spam level)? Might be fun to have a friendly notification, but on the other hand, might as well be seen as something annoying (tone of voice is key here).
:)
can be abused, right?
What do you think? You have a lot of experience related to comment voting abuse...
Everything can be abused, sadly. But, it's good to think about solutions and to think of the potential ways of abusing the mechanic. I don't wanna share that on the chain, before having thought of a solution that can work.
Just thinking out loud here (mechanic keyboard). My best bet is to have the people who wish to be using the service run through a whitelist (meh), which is not ideal. For monitoring: whoever uses it, Hive Archaeology should be the only account placing a comment, preferred under 1 post that collects all the comments with a username + link to the post, so it would be easy to see beneficiary stats minus a fee to keep the service running (whatever transparent profit-share @Pibara feels fit). Might as well be handy if you can pull up stats on who is voting on old posts, to see if there are signs of abuse. Or have a system message send when someone is using X % of their voting power on self-voted comments.
Do you mean those AI morons? Honestly, I was very suspicious after the 3rd comment, until I read your post, then I just knew for sure that. It was most likely one account (all funds were sent to 1 main account at some point in the track record).
It's not a service, its a personal bot that you run on your personal account. Try it out and check out how it works on hiveblocks. Basically for the most part your account IS the whitelist.
One possibility of abuse might lie in the plausibility of ambiguity of the created comment.
If my vote is worth $0.10 and your vote is worth $10, and I use this bot to up-vote an old post by you through a comment like this, you could up-vote the same comment that I up-voted with $0.10 with your full $10 vote, basically doing a huge self vote.
If the comment made is ambiguous in that sense (it probably is right now, and I think your alternative wording is too), your "I didn't know I was massively self up-voting" will be plausible.
I think the wording of the comment needs work. I don't want to make it a data dump, but it needs to be unambiguous that an up-vote by the main beneficiary equates a self-up-vote and might be viewed as abuse.
O, I see. In that case... I totally misunderstood the assignment and would need to re-assess the potential scenarios. Figuring out how to be running your own script can already be a pain in the ass for most people.
Which can be a gift for tech-savvy bad actors, right?
Can you imagine gifting this to a known scammer who has the same or a higher level of understanding of tech? Given the fact that they could make it themselves, let's say they didn't due to time management or whatever reason. How would you secure it before handing it out? What things would you think of?
I prefer to comment on such content, and if the author replies, then I generously reward them with an upvote. This ensures its not a completely "dead" account. :)
Agree, this is currently the most straightforward way.
Testing this on Monday. Great idea 💡.
Interesting, but why the comment? The bot could just send the voted amount incl. a memo directly to the author‘s account?! 🤔
Want you describe is already implemented with the "tip" button available on some front-ends.
With comments, the payout comes from the reward pool, not from your wallet.
Ah, i see, that‘s indeed a difference, thx for clarification 🖖🏼☀️🤙🏼
That's pretty cool!
This is an interesting idea.
I would like to try this in the coming days...
Thanks you for bringing this :)
Thats quite cool !
The Hive.Pizza team manually curated this post.
Learn more at https://hive.pizza.
31.8% Boost.Congratulations, @pibara Your Post Got
10 HELIOS & We Followed That Lead.@coininstant Burnt
Contact Us : HELIOS Token Discord Channel
What about the downvotes?
These won't work this way, but thanks for mentioning these as I might need to put in an extra check to make sure the bot doesn't try to do them anyway if its owner accidentally downvotes a post outside the initial 7 day window.