Go to file
Willian Mitsuda a3626136a6 Avoid getting erc20 metadata multiple times in the same session 2021-10-28 23:39:33 -03:00
.github Implement publish workflow to docker hub/ghcr via github actions 2021-07-22 01:07:52 -03:00
4bytes@20537524bf Update 4bytes repo 2021-10-18 03:01:09 -03:00
docs Update Sourcify IPFS docs; change Sourcify integration to use public gateway by default 2021-10-17 22:57:19 -03:00
nginx Disable brotli on nginx for now 2021-10-28 05:33:41 -03:00
public Using import for image 2021-10-21 18:28:38 -03:00
src Avoid getting erc20 metadata multiple times in the same session 2021-10-28 23:39:33 -03:00
topic0@52559d5690 Update topic0 db 2021-10-16 03:05:53 -03:00
trustwallet@e439c36937 Update trustwallet repo 2021-10-18 03:01:50 -03:00
.dockerignore Add 4bytes signatures with param names to docker image 2021-09-24 01:07:24 -03:00
.gitignore Initial public alpha version 2021-07-01 15:47:23 -03:00
.gitmodules Add topic0 db 2021-10-07 15:55:51 -03:00
.nvmrc Migrate to node 14; make it clear we require npm 7 in dev docs 2021-07-16 18:31:34 -03:00
Dockerfile Enable gzip/brotli precompressed artifacts in the production docker image 2021-10-20 15:44:27 -03:00
LICENSE Initial public alpha version 2021-07-01 15:47:23 -03:00
README.md Add sourcify doc instructions 2021-09-10 18:55:54 -03:00
craco.config.js Initial public alpha version 2021-07-01 15:47:23 -03:00
package-lock.json Bump react-chartjs-2 from 3.2.0 to 3.3.0 (#108) 2021-10-28 08:29:03 +00:00
package.json Bump react-chartjs-2 from 3.2.0 to 3.3.0 (#108) 2021-10-28 08:29:03 +00:00
run-nginx.sh Fix assets url for bytes in production build 2021-09-04 23:18:35 -03:00
tailwind.config.js First working prototype of contract tab 2021-09-05 03:54:22 -03:00
tsconfig.json Dedup and optimize 4bytes calls for really huge traces 2021-10-28 17:21:01 -03:00

README.md

Otterscan

An open-source, fast, local, laptop-friendly Ethereum block explorer.

https://user-images.githubusercontent.com/28685/124196700-4fe71200-daa3-11eb-912c-b66494fe4b23.mov

What?

This is an Ethereum block explorer designed to be run locally with an archive node companion, more specifically, with Erigon.

This approach brings many advantages, as follows.

Privacy

You are querying your own node, so you are not sending your IP address or queries to an external third-party node.

Fast

Since you are querying your local archive node, everything is fast, no network roundtrips are necessary.

Actually, very fast

This software was designed to be a companion of Erigon, a blazingly fast archive node.

Really, it is even faster

The standard web3 jsonrpc methods are quite verbose and generic requiring many calls to gather many pieces of information at client side.

We've implemented some custom methods at rpcdaemon level, less information is needed to be json-marshalled and transmitted over network.

Alpha warning

This software is in alpha stage, and for sure lots of features, error handling, edge cases are missing.

Be sure to check it often or send patches 😀

Why?

Current offerings are either closed source or lack many features the most famous Ethereum block explorer has, or simply have high requirements like having an archive node + additional indexers.

Otterscan requires only mainline Erigon executing node, patched Erigon RPC daemon and running Otterscan itself (a simple React app), which makes it a laptop-friendly block explorer.

Why the name?

3 reasons:

  • It is heavily based on Erigon, whose mascot is an otter (Erigon, the otter), think about an otter scanning your transactions inside blocks.
  • It is an homage to the most famous and used ethereum block explorer.
  • The author loves wordplays and bad puns.

It looks familiar...

The UI was intentionally made very similar to the most popular Ethereum block explorer so users do not strugle trying to find where the information is.

However, you will see that we made many UI improvements.

Install instructions

This software is currently distributed as a docker image.

It depends heavily on a working Erigon installation with Otterscan patches applied, so let's begin with it first.

Install Erigon

You will need an Erigon executing node (erigon). Also you will need Erigon RPC daemon (rpcdaemon) with Otterscan patches. Since setting up an Erigon environment itself can take some work, make sure to follow their instructions and have a working archive node before continuing.

My personal experience: at the moment of this writing (~block 12,700,000), setting up an archive node takes over 5-6 days and ~1.3 TB of SSD.

They have weekly stable releases, make sure you are running on of them, not development ones.

Install Otterscan patches on top of Erigon

Add our forked Erigon git tree as an additional remote and checkout the corresponding branch.

The repository with Otterscan patches is here.

git remote add otterscan https://github.com/wmitsuda/erigon.git

Checkout the tag corresponding to the stable version you are running. For each supported Erigon version, there should be a corresponding tag containing Otterscan patches.

For example, if you are running Erigon from v2021.07.01 tag, checkout the tag v2021.07.01-otterscan and rebuild rpcdaemon.

We intend to release a compatible rebased version containing our changes every week just after Erigon's weekly release, as time permits.

git fetch --all
git fetch otterscan --tags
git checkout <version-tag-otterscan>

Build the patched rpcdaemon binary.

make rpcdaemon

Run it paying attention to enable the erigon, ots, eth apis to whatever cli options you are using to start rpcdaemon.

ots stands for Otterscan and it is the namespace we use for our own custom APIs.

./build/bin/rpcdaemon --http.api "eth,erigon,ots,<your-other-apis>" --private.api.addr 127.0.0.1:9090 --datadir <erigon-datadir> --http.corsdomain "*"

Be sure to include both --private.api.addr and --datadir parameter so you run it in dual mode, otherwise the performance will be much worse.

Also pay attention to the --http.corsdomain parameter, CORS is required for the browser to call the node directly.

Now you should have an Erigon node with Otterscan jsonrpc APIs enabled, running in dual mode with CORS enabled.

Run Otterscan docker image from Docker Hub

The Otterscan official repo on Docker Hub is here.

docker run --rm -p 5000:80 --name otterscan -d otterscan/otterscan:<versiontag>

This will download the Otterscan image from Docker Hub, run it locally using the default parameters, binding it to port 5000 (see the -p docker run parameter).

To stop Otterscan service, run:

docker stop otterscan

By default it assumes your Erigon node is at http://127.0.0.1:8545. You can override the URL by setting the ERIGON_URL env variable on docker run:

docker run --rm -p 5000:80 --name otterscan -d --env ERIGON_URL="<your-erigon-node-url>" otterscan/otterscan:<versiontag>

This is the preferred way to run Otterscan. You can read about other ways here.

Validating the installation (all methods)

You can make sure it is working correctly if the homepage is able to show the latest block/timestamp your Erigon node is at just bellow the search button.

Source verification

We make use of Sourcify for displaying contract verification info.

More info here.

Kudos (in no particular order)

We make use of many open-source software and integrate many public datasources, mainly:

To the Geth team whose code Erigon is based on.

To the Erigon team that made it possible for regular humans to run an archive node in a retail laptop. Also, they have been very helpful explaining Erigon's internals which made the modifications Otterscan requires possible.

To the mdbx team which is the blazingly fast database that empowers Erigon.

To Trust Wallet who sponsor and make available their icons under a permissive license.

To the owners of the 4bytes repository that we import and use to translate the method selectors to human-friendly strings.

To Sourcify, a public decentralized source code and metadata verification service.

To Ethers which is the client library we used to interact with the ETH node. It is high level enough to hide most jsonrpc particularities, but flexible enough to allow easy interaction with custom jsonrpc methods.

Future

Erigon keeps evolving at a fast pace, with weekly releases, sometimes with (necessary) breaking changes.

This project intends to keep following their progress and mantaining compatibility as the availability of the author permits.

Erigon itself is alpha, so I consider this software is also in alpha state, however it is pretty usable.

Also there is room for many improvements that are not possible in the current centralized, closed source block explorer offerings and the author of this software would like to have.

Licensing

This software itself is MIT licensed and redistributes MIT-compatible dependencies.

The Otterscan patches for Erigon are LGPL-3 as required by Geth (since Erigon is a Geth derivative) and kept in a separate repository.

Getting in touch

Erigon Discord server

Otterscan has a community channel under the "ecosystem" section of Erigon's Discord.

Twitter

Follow the creator on Twitter for updates (@wmitsuda).

Donation address

If you like this project, feel free to send donations to otterscan.eth or use our gitcoin grant page: https://gitcoin.co/grants/3224/otterscan