Starting From Zero: Gaining Witness Votes

I know this is my third post in a row about Steemit witness stuff, but I usually blog about my current passions and right now I'm really passionate about being a Steemit witness!

It's an odd feeling essentially starting from zero when I've been here for almost a year and have worked hard to build a following of over 1,500 fellow Steemians. I can remember in the early days when people would message whales in the Slack chat to try and get their votes. I always avoided that approach because it didn't pass the basic community test of "What would happen if everyone did this?" (More on that here.)

I'm not a sales person. I'm a programmer. I don't like going around asking for help, especially if I can find the answers myself. I also don't like treating some people differently than others just because they have something which can benefit me (in this case high Steem Power witness votes which are needed to be a useful witness).

The witness list is driven by millions of VESTs which is an internal representation of Steem Power holdings. Those with the most Steem Power have the largest investment to protect, so their votes matter most in terms of electing witnesses to maintain the blockchain economics, run solid servers, and work well with the community.

So it seems I need to make more whale friends and get comfortable with self-promotion. If you're good at that sort of thing, please feel free to campaign on my behalf. :)

I figured maybe I should start with people who are already following my blog and go from there.

Tonight I did what I usually do when I want to solve problems: I started writing code.

For the curious, here's what I wrote after work today:

<?php
require '../../vendor/autoload.php';
$params = array();
$SteemServiceLayer = new \SteemTools\SteemServiceLayer($params);
$api = new \SteemTools\SteemAPI($SteemServiceLayer);

$witness_account = "lukestokes.mhth";
$controller_account = "lukestokes";

$followers = $api->cachedCall('getFollowers', $controller_account, true);
$accounts = array();
foreach($followers as $follower) {
    $accounts[] = $follower['follower'];
}
$account_records = $api->cachedCall('getAccounts', $accounts, true);
$accounts_by_vest = array();
$accounts = array();
foreach($account_records as $account) {
    $accounts[$account['name']] = $account;
    $accounts_by_vest[$account['name']] = (int) str_replace(' VESTS', '', $account['vesting_shares']);
}

arsort($accounts_by_vest);
$top_accounts = array_slice($accounts_by_vest,0,30);

function showPossibilities($top_accounts,$accounts,$witness_account,$show_available_only = false)
{
    $available_vests = 0;
    foreach($top_accounts as $account_name => $vests) {
        $print_account = true;
        $witnesses_voted_for = $accounts[$account_name]['witnesses_voted_for'];
        $proxy = $accounts[$account_name]['proxy'];
        $witness_votes = $accounts[$account_name]['witness_votes'];
        $voted = " Already Voted? ";
        $include_vests = true;
        if (in_array($witness_account, $witness_votes)) {
            $voted .= "YES";
            $print_account = !$show_available_only;
            $include_vests = false;
        } else {
            $voted .= "NO";
        }
        $free_votes = (30 - $witnesses_voted_for);
        if ($print_account && $show_available_only) {
            $print_account = ($free_votes > 0);
        }
        if ($print_account && $show_available_only) {
            $print_account = !($proxy != '');
        }
        $pad_amount = 20;
        if ($print_account) {
            if ($include_vests) {
                $available_vests += $accounts[$account_name]['vesting_shares'];
            }
            print str_pad($account_name,$pad_amount,' ',STR_PAD_RIGHT);
            print str_pad('Proxy: ' . $proxy,$pad_amount,' ',STR_PAD_RIGHT);
            print str_pad($voted,$pad_amount,' ',STR_PAD_RIGHT);
            print str_pad($vests . " VESTS",$pad_amount,' ',STR_PAD_LEFT);
            print str_pad($free_votes . " votes free",$pad_amount,' ',STR_PAD_LEFT);
            print "\n";
        }
    }
    print "Total Available MVESTS: " . round($available_vests/1000000) . "\n";
    print "\n";
}

showPossibilities($top_accounts,$accounts,$witness_account);
showPossibilities($top_accounts,$accounts,$witness_account,true);


It's just slapped together, but it gives me some nice output:

abit                Proxy: abitmore      Already Voted? NO      4006255185 VESTS       30 votes free
jamesc              Proxy:               Already Voted? NO      3198609804 VESTS       30 votes free
thejohalfiles       Proxy:               Already Voted? NO      2657774136 VESTS       15 votes free
tombstone           Proxy: dele-puppy    Already Voted? NO      2256414027 VESTS       30 votes free
xeldal              Proxy:               Already Voted? NO      1891626077 VESTS       11 votes free
arhag               Proxy:               Already Voted? NO      1634823209 VESTS        3 votes free
wackou              Proxy:               Already Voted? NO      1016653226 VESTS        0 votes free
fuzzyvest           Proxy:               Already Voted? NO       938527112 VESTS        6 votes free
recursive           Proxy:               Already Voted? NO       807953047 VESTS       30 votes free
slowwalker          Proxy:               Already Voted? NO       797428111 VESTS       13 votes free
gavvet              Proxy:               Already Voted? NO       774029929 VESTS        2 votes free
fulltimegeek        Proxy:               Already Voted? NO       722460777 VESTS        2 votes free
skan                Proxy:               Already Voted? NO       431695970 VESTS       30 votes free
nanzo-scoop         Proxy:               Already Voted? NO       416794647 VESTS        5 votes free
htooms              Proxy:               Already Voted? NO       375869774 VESTS       23 votes free
roelandp            Proxy:               Already Voted? NO       366830941 VESTS        0 votes free
steempty            Proxy:               Already Voted? NO       328834977 VESTS        0 votes free
sean-king           Proxy:               Already Voted? YES      325761740 VESTS       25 votes free
neoxian             Proxy:               Already Voted? NO       309686880 VESTS        1 votes free
twinner             Proxy:               Already Voted? NO       267742620 VESTS        2 votes free
gtg                 Proxy:               Already Voted? NO       264962536 VESTS        0 votes free
eeks                Proxy:               Already Voted? NO       253585400 VESTS       25 votes free
kevinwong           Proxy:               Already Voted? NO       253521106 VESTS        2 votes free
modprobe            Proxy:               Already Voted? NO       214183331 VESTS       30 votes free
benjojo             Proxy:               Already Voted? NO       213765603 VESTS        0 votes free
matt-a              Proxy:               Already Voted? NO       207469977 VESTS       15 votes free
good-karma          Proxy:               Already Voted? YES      196452115 VESTS        0 votes free
demotruk            Proxy:               Already Voted? NO       189993289 VESTS       18 votes free
rok-sivante         Proxy:               Already Voted? YES      189410018 VESTS       25 votes free
damarth             Proxy:               Already Voted? NO       178960313 VESTS       30 votes free
Total Available MVESTS: 24976

jamesc              Proxy:               Already Voted? NO      3198609804 VESTS       30 votes free
thejohalfiles       Proxy:               Already Voted? NO      2657774136 VESTS       15 votes free
xeldal              Proxy:               Already Voted? NO      1891626077 VESTS       11 votes free
arhag               Proxy:               Already Voted? NO      1634823209 VESTS        3 votes free
fuzzyvest           Proxy:               Already Voted? NO       938527112 VESTS        6 votes free
recursive           Proxy:               Already Voted? NO       807953047 VESTS       30 votes free
slowwalker          Proxy:               Already Voted? NO       797428111 VESTS       13 votes free
gavvet              Proxy:               Already Voted? NO       774029929 VESTS        2 votes free
fulltimegeek        Proxy:               Already Voted? NO       722460777 VESTS        2 votes free
skan                Proxy:               Already Voted? NO       431695970 VESTS       30 votes free
nanzo-scoop         Proxy:               Already Voted? NO       416794647 VESTS        5 votes free
htooms              Proxy:               Already Voted? NO       375869774 VESTS       23 votes free
neoxian             Proxy:               Already Voted? NO       309686880 VESTS        1 votes free
twinner             Proxy:               Already Voted? NO       267742620 VESTS        2 votes free
eeks                Proxy:               Already Voted? NO       253585400 VESTS       25 votes free
kevinwong           Proxy:               Already Voted? NO       253521106 VESTS        2 votes free
modprobe            Proxy:               Already Voted? NO       214183331 VESTS       30 votes free
matt-a              Proxy:               Already Voted? NO       207469977 VESTS       15 votes free
demotruk            Proxy:               Already Voted? NO       189993289 VESTS       18 votes free
damarth             Proxy:               Already Voted? NO       178960313 VESTS       30 votes free
Total Available MVESTS: 16523


In a nutshell, this analyzes my follower list, sorts them by Steem Power, and then figures out if they've already voted for me or not and have witness votes to give (if they aren't proxy voting through someone else).

So now I've got a list. Something about asking them individually in chat seems like the wrong approach. I don't want to bother people or put them in the awkward position of feeling the need to explain themselves if they don't want to vote for me as a witness.

Or maybe I should just get over it and start asking people directly?

What do you think?

Maybe I'll allow myself a little mention spam. Okay, here it goes.

@jamesc, @thejohalfiles, @xeldal, @arhag, @fuzzyvest, @recursive, @slowwalker, @gavvet, @fulltimegeek, @skan, @nanzo-scoop, @htooms, @neoxian, @twinner, @eeks, @kevinwong, @modprobe, @matt-a, @demotruk, @damarth

There. That felt a little dirty. Heheh.

Anyway, I should get some sleep. I've probably been thinking about this too much and should just give it some time to work itself out.

Big thank you to @sean-king, @good-karma, and @rok-sivante whose MVESTS make a huge difference in my witness campaign. I'm also very grateful for @billbutler, @jesta, @bacchist... I could list you all, but that would be silly. Anyway, thanks. I'm learning a lot, stretching myself in the process, and having fun.

Steem On

Related Posts:


Luke Stokes is a father, husband, business owner, programmer, voluntaryist, and blockchain enthusiast. He wants to help create a world we all want to live in.

I'm a Witness! Please vote for @lukestokes.mhth

H2
H3
H4
3 columns
2 columns
1 column
42 Comments