Skip to content

Latest commit

 

History

History
195 lines (131 loc) · 5.83 KB

README.md

File metadata and controls

195 lines (131 loc) · 5.83 KB

FairCoin Explorer - 1.7.4

An open source block explorer written in node.js for FairCoin.

See it in action

Requires

  • Node.js >= 8.17.0 (12.14.0 is advised for updated dependencies)
  • MongoDB 4.2.x
  • FairCoin wallet

Create database

Enter MongoDB CLI:

$ mongo

Create database:

> use explorerdb

Create user with read/write access:

> db.createUser({ user: "iquidus", pwd: "3xp!0reR", roles: ["readWrite"] })

Note: If you're using MongoDB shell 4.2.x, use the following to create your user:

> db.addUser({ user: "username", pwd: "password", roles: ["readWrite"] })

Get the source

git clone https://github.com/FairCoinOfficial/Blockchain explorer

Install node modules

cd explorer && npm install --production

Configure

cp ./settings.json.template ./settings.json

Make required changes in settings.json

Start Explorer

npm start

Note: mongod must be running to start the explorer

As of version 1.4.0, the explorer defaults to cluster mode, forking an instance of its process to each CPU core. This results in increased performance and stability. Load balancing gets automatically taken care of, and any instances that for some reason die, will be restarted automatically. For testing/development (or if you just wish to) a single instance can be launched with:

node --stack-size=10000 bin/instance

To stop the cluster, you can use:

npm stop

Syncing databases with the blockchain

sync.js (located in scripts/) is used for updating the local databases. This script must be called from the explorer's root directory.

Usage:

node scripts/sync.js [database] [mode]
  • database: (required)

    • index [mode]: Main index: coin info/stats, transactions & addresses
    • market: Market data: summaries, orderbooks, trade history & chartdata
  • mode: (required for index database only)

    • update: Updates index from last sync to current block
    • check: Checks index for (and adds) any missing transactions/addresses
    • reindex: Clears index then resyncs from genesis to current block

Notes:

  • 'current block' is the latest created block when the script is executed.
  • The market database only supports (& defaults to) reindex mode.
  • If check mode finds missing data (ignoring new data since the last sync), index_timeout in settings.json is set too low.

It is recommended to have this script launched via a cronjob at 1+ minute intervals.

Example crontab:

*/1 * * * * cd /path/to/explorer && /usr/bin/nodejs scripts/sync.js index update > /dev/null 2>&1
*/2 * * * * cd /path/to/explorer && /usr/bin/nodejs scripts/sync.js market > /dev/null 2>&1
*/5 * * * * cd /path/to/explorer && /usr/bin/nodejs scripts/peers.js > /dev/null 2>&1

Wallet Configuration

FairCoin Explorer is intended to be generic, so it can be used with any wallet following the usual standards. The wallet must be running with at least the following flags:

-daemon -txindex

Security Considerations

Ensure MongoDB is not exposed to the outside world via your MongoDB configuration or a firewall to prevent outside tampering of the indexed chain data.

Known Issues and Troubleshooting

Script is already running.

If you receive this message when launching the sync script, either: a) A sync is currently in progress, or b) A previous sync was killed before it completed.

If you are certain a sync is not in progress, remove the index.pid and db_index.pid files from the tmp folder in the explorer root directory.

rm tmp/index.pid
rm tmp/db_index.pid

Exceeding stack size

RangeError: Maximum call stack size exceeded

Node's default stack size may be too small to index addresses with many transactions. If you experience the above error while running sync.js, the stack size needs to be increased.

To determine the default setting, run:

node --v8-options | grep -B0 -A1 stack_size

To run sync.js with a larger stack size, launch with:

node --stack-size=[SIZE] scripts/sync.js index update

Where [SIZE] is an integer higher than the default.

Note: [SIZE] will depend on which blockchain you are using; you may need to experiment to find an optimal setting.

License

Copyright (c) 2015, Iquidus Technology
Copyright (c) 2015, Luke Williams
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  • Neither the name of Iquidus Technology nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.