SteemAX Update to v0.4 ~ New Features


SteemAX v0.4

SteemAX is a web application that allows a Steemian to barter with other Steemians for an automatic exchange of upvotes for an agreed duration. Steemians are given the ability to exchange their upvotes at disproportionate ratios allowing whales and minnows to create exchanges with each other, allowing whales to avoid using bid bots to "distribute their upvote" and giving minnows a direct helping hand. The Steemit community can benefit greatly from this kind of interaction since an exchange is created by two humans and their mutual respect of each other's content.

The new features added to this version update of SteemAX revolve mostly around invitation creation and ensuring continuity and security of content.


New Features

SteemAX now

  • has a new web page thanks to @outwork!


  • uses javascript to error check user input and to verify that it is within provided limits.

  • uses steem.js to calculate vote values right on the web page so that the user can be assured they are entering viable values for the percentage and ratio of the upvote. This also provides account name error checking.


  • can now add an invitation to the database from the webpage.

  • uses Google's recaptcha to verify the user is human.


Steps I took

First I created the methods necessary for handling the the invite creation from the web page in the module

    def invite (self, token, account2, per, 
                    ratio, dur, response, ip):
        ''' Creates an invite
        if not self.verify_recaptcha(response, ip):
            return self.error_page("Invalid captcha.")
        if self.verify_token(sec.filter_token(token)):
            account2 = sec.filter_account(account2)
            if self.verify.steem.steem_instance().get_account(account2):
                memoid = self.db.add_invite(
                if memoid:
                    return self.template("templates/memo.html", 
                    return self.error_page(self.db.errmsg)
                return self.error_page("Invalid account name.")
            return self.auth_url()

    def verify_token (self, token):
        ''' cleans and verifies a SteemConnect
        refresh token
        token = sec.filter_token(token)
        if (token is not None
                    and self.verify.steem.verify_key (
                    acctname="", tokenkey=token)):
            return True
            return False

    def auth_url (self):
        ''' Returns the SteemConnect authorization
        URL for SteemAX
        url = self.verify.steem.connect.auth_url()
        return ("Location: " + url + "\r\n")

    def error_page (self, msg):
        ''' Rutrns the HTML page with the
        given error message
        return ("\r\n" + self.template("templates/error.html", 

    def verify_recaptcha(self, response, remoteip):
        ''' Verifies a Google recaptcha v2 token
        http = urllib3.PoolManager()
        encoded_args = urlencode({'secret': default.recaptcha_secret,
                            'response': response,
                            'remoteip': remoteip})
        url = default.recaptcha_url + "?" + encoded_args
        req = http.request('POST', url)
        if req.status == 200:
            self.json_resp = json.loads('utf-8'))
        if self.json_resp['success']:
            return True
            return False

Proof of work

Second, I created a new module named that contains the methods used for filtering user input parsed from the cgi post.

Proof of work

Then I changed the directory structure then merged the work done by @outwork into the repository. I then added the rest of the website files.

Proof I added HTML templates

Proof I added javascript

Proof I added css

After modifying the css, HTML and javascript to accommodate Mozilla browser and after some bug hunting, I created a new module for handling the post from the webpage named simply

Prrof of work

Proof of work

Proof of work

Proof of work


Of the javascript work I did, mostly I adapted the necessary methods from steem-python in to javascript functions to calculate vote value and verify the account name. At the moment the page loads an asynchronous call is made to get the basic values for vote calculation. When these are retrieved the vote value is calculated for the account that is logged in and stored in the DOM. The meat of the code is embodied in the two functions at the bottom of the script called "get_vote_value" and "compare_votes".

Javascript file named steemjs.js

steem.api.getRewardFund("post", function(err, fund) {
    reward_fund = parseFloat(fund.reward_balance.replace(" STEEM", ""));
    recent_claims = parseInt(fund.recent_claims, 10);
    steem.api.getCurrentMedianHistoryPrice(function(err, price) {
        price_of_steem = parseFloat(price.base.replace(" SBD", ""));
        steem.api.getDynamicGlobalProperties(function(err, gprops) {
            var vfs = parseFloat(gprops.total_vesting_fund_steem.replace(" STEEM", ""));
            var tvs = parseFloat(gprops.total_vesting_shares.replace(" STEEM", ""));
            reserve_rate = parseFloat(gprops.vote_power_reserve_rate);
            steem_per_mvests = vfs / (tvs / 1000000);

Technology Stack

SteemAX is written to use Python 3.5 and MySQL. The web interface for has been written in HTML, CSS and Javascript.


I am now entering the final phases of development as I create the interface for a user to see all of their exchanges and to create the appropriate Memo ID for whether they want to barter on an exchange, cancel an exchange or simply accept an exchange. This interface will be available at When an invite is created the user will be redirected from to


Please contact Mike (Mike-A) on Discord

GitHub Account


Hey @learnelectronics
Thanks for contributing on Utopian.
We’re already looking forward to your next contribution!

Want to chat? Join us on Discord

Vote for Utopian Witness!

Thank you for your contribution. Its better to add a Relevant commit rather than writing proof of Work every-time.

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
Chat with us on Discord.

Coin Marketplace

STEEM 0.26
TRX 0.08
JST 0.041
BTC 29191.69
ETH 1966.54
USDT 1.00
SBD 2.53