Skip to content

forkyishere/ssc_tokens_history

 
 

Repository files navigation

Steem Smart Contracts tokens history

Scans the Steem Smart Contracts blockchain (history_builder.js) to generate an index of historical transactions (generally transfers) that can easily be queried using GET queries to the NodeJS server server.js

Used by Steem-Engine for transaction history (endpoint: https://api.steem-engine.com/accounts/history)

Created and maintained by @harpagon210 (Original Github Repo)

Some additional contributions, including this README by @someguy123 / @privex (Privex Fork)

Released under the MIT License (See the file LICENSE for more info)

API Usage + Libraries

By default, the application itself exposes a single endpoint on port 3000 /history

The official history API for https://steem-engine.com is aliased to /accounts/history:

https://api.steem-engine.com/accounts/history

An example GET query to view the most recent 5 transactions made by @someguy123 using the token SGTK:

curl -fsSL https://api.steem-engine.com/accounts/history?account=someguy123&limit=5&offset=0&type=user&symbol=SGTK

GET Parameters:

  • account - (required) Filter TXs to/from the username of a Steem account whom uses the SSC sidechain
  • limit - (optional) The amount of recent TXs to load (Default: 500)
  • offset - (optional) For paginating, list transactions AFTER offset recent transactions (Default: 0)
  • type - (optional) Either user (TXs triggered by the user) or contract (TXs triggered by a smart contract)
  • symbol - (optional) Only list transactions involving this token symbol, e.g. ENG or STEEMP

Libraries for this API

Python Libraries:

Pre-requisites

  • PostgreSQL 10 or newer is recommended
  • NodeJS (Last tested by @someguy123 on Node v10.16.2 LTS)

Install PostgreSQL if you don't already have it installed.

apt install -y postgresql postgresql-client postgresql-client-common

Install NodeJS 10 or higher with nvm if you don't already have it installed.

Note: You don't need to do this as root. For security, it's generally a good idea to create a Linux user just for this application, it doesn't require root. Install NVM and NodeJS under the user you plan to run SSC History under.

# Create the user `ssc` and disable log-in over SSH / Console for safety
root@myhost ~ # adduser --gecos "" --disabled-login ssc
# Change to the user `ssc` for any operations that don't require root.
root@myhost ~ # su - ssc

# Install NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

# Load NVM for the first time, since you've only just installed it.
export NVM_DIR="${XDG_CONFIG_HOME/:-$HOME/.}nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

# Install the latest LTS (Long term support) version of NodeJS + NPM
nvm install --lts

Installation

Create a Postgres user and database to store the history data.

su - postgres

###
# As the postgres user:
###

# Create the PostgreSQL user 'steemssc' and set a password (save it somewhere, you'll need it for the config)
createuser -SDRl -P steemssc

# Create a database called 'steemssc' owned by the user 'steemssc'
createdb -O steemssc steemssc

exit

Now that you have PostgreSQL ready to use, clone the repo and install the NodeJS packages.

root@myhost ~ # su - ssc

# As the `ssc` user
git clone https://github.com/harpagon210/ssc_tokens_history.git
cd ssc_tokens_history
npm install

Configuration

Inside of ssc_tokens_history you'll want to create a file called .env and fill it with the database connection details.

nano .env    # Use whatever text editor you prefer. Nano is the easiest

The contents of .env should look like this:

DATABASE_URL=postgres://steemssc:ThePasswordYouSetEarlier@localhost:5432/steemssc

Save the file.

Next, you'll want to open up config.json.

nano config.json

The only thing you'll probably need to change is the list of RPC nodes. By default, it uses https://testapi.steem-engine.com which is for the testnet.

For the main network, you'll want to use https://api.steem-engine.com/rpc (or any other SSC RPC node of your choice).

{
    "nodes": [
        "https://api.steem-engine.com/rpc"
    ],
    "lastSSCBlockParsed": 0,
    "port": 3000,
    "pollingTime": 1000
}

Running + Final setup

Now that you've configured the application, you'll now need to create the schema.

As the user you've installed SSC History under:

# This will create the Postgres database schema for 'transactions' using
# the database connection details in the file '.env'

ssc@myhost ~/ssc_tokens_history $ node initDB.js

To confirm the database was created, log into postgres again, and check if the table exists.

root@myserver ~ # su - postgres

postgres@myserver ~ $ psql steemssc

steemssc=# \dt
            List of relations
 Schema |     Name     | Type  |  Owner
--------+--------------+-------+----------
 public | transactions | table | steemssc
(1 row)

Press CTRL-D to exit the postgres shell, and type exit to return to your user.

Now back to the history app.

It's time to start loading blocks into the database. Run node history_builder.js (it's best to do this in something like tmux or screen so it can run in the background)

ssc@myhost ~ $ cd ssc_tokens_history

ssc@myhost ~/ssc_tokens_history $ node history_builder.js
parsing block #1
parsing block #2
parsing block #3

If everything is working correctly, you'll see output like above with parsing block #123

To run the actual history server, run the following (in another terminal. leave history_builder.js running in the background)

ssc@myhost ~ $ cd ssc_tokens_history

ssc@myhost ~/ssc_tokens_history $ node server.js

The server will not output anything, but you can test that it's working by running a query using curl and jq

You don't have to wait for history_builder.js to finish loading all blocks, you'll just have outdated history information until it's fully synced.

(jq is optional, but it will make the output easier to read)

root@myhost ~ # apt install -y jq curl
# Request the most recent transaction
root@myhost ~ # curl -fsSL "http://localhost:3000/history?account=steemsc&limit=1" -o - | jq
[
  {
    "block": "1635",
    "txid": "dd7ee73d1c430c3455a996ba5e9036562614dcad",
    "timestamp": "2019-02-21T20:20:36.000Z",
    "symbol": "ENG",
    "from": "steemsc",
    "from_type": "user",
    "to": "charlie777pt",
    "to_type": "user",
    "memo": null,
    "quantity": "20"
  }
]

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%