# Steem Developer Portal

### JS: Account Reputation

Learn how to interpret account reputation.

Full, runnable src of Account Reputation can be downloaded as part of the JS tutorials repository.

This tutorial runs on the main Steem blockchain. And accounts queried are real users with reputation.

## Intro

This tutorial will show the method of capturing a queried tag name and matching it to the Steem. We are using the `call` function provided by the `dsteem` library to pull accounts from the Steem blockchain. A simple HTML interface is used to both capture the string query as well as display the completed search.

## steps

1. App setup Configuration of `dsteem` to use the proper connection and network.
2. Search account Collecting the relevant search criteria
3. Interpret account reputation Running the search and interpreting reputation.
4. Output Displaying the results

#### 1. App setup

Below we have `dsteem` pointing to the production network with the proper chainId, addressPrefix, and endpoint. There is a `public/app.js` file which holds the Javascript segment of this tutorial. In the first few lines we define the configured library and packages:

    const dsteem = require('dsteem');
    let opts = {};
    //connect to production server
    opts.addressPrefix = 'STM';
    opts.chainId =
        '0000000000000000000000000000000000000000000000000000000000000000';
    //connect to server which is connected to the network/production
    const client = new dsteem.Client('https://api.steemit.com');

#### 2. Search account

Collecting of the search criteria happens via an HTML input. The form can be found in the `index.html` file. The values are pulled from that screen with the below:

    const max = 5;
    window.submitAcc = async () => {
        const accSearch = document.getElementById('username').value;

#### 3. Interpret account reputation

In order to get accounts, we run the search with the `search field` and `maximum` list items as parameters.

    const _accounts = await client.database.call('lookup_accounts',[accSearch, max]);

The result of the search is an array of accounts. After that we use `get_accounts` to pull account data from Steem.

    const acc = await client.database.call('get_accounts',[_accounts]);

And we loop through each account to convert their `reputation` to human readable format with following function:

    function log10(str) {
        const leadingDigits = parseInt(str.substring(0, 4));
        const log = Math.log(leadingDigits) / Math.LN10 + 0.00000001;
        const n = str.length - 1;
        return n + (log - parseInt(log));
    }

    export const repLog10 = rep2 => {
        if (rep2 == null) return rep2;
        let rep = String(rep2);
        const neg = rep.charAt(0) === '-';
        rep = neg ? rep.substring(1) : rep;

        let out = log10(rep);
        if (isNaN(out)) out = 0;
        out = Math.max(out - 9, 0); // @ -9, $0.50 earned is approx magnitude 1
        out = (neg ? -1 : 1) * out;
        out = out * 9 + 25; // 9 points per magnitude. center at 25
        // base-line 0 to darken and < 0 to auto hide (grep rephide)
        out = parseInt(out);
        return out;
    };

#### 4. Output

After each account’s reputation is interpreted we can then display them on screen with readable reputation.

    //disply list of account names and reputation with line breaks
    for (var i = 0; i < _accounts.length; i++) {
        _accounts[i] = `${_accounts[i]} - ${repLog10(acc[i].reputation)}`;
    }
    document.getElementById('accList').innerHTML = _accounts.join('<br/>');

That’s it!

### To run this tutorial

1. clone this repo
2. `cd tutorials/20_account_reputation`
3. `npm i`
4. `npm i`
5. `npm run dev-server` or `npm run start`
6. After a few moments, the server should be running at http://localhost:3000/