# Shisui

![AppVeyor Build (with branch)](https://ci.appveyor.com/api/projects/status/github/optimism-java/shisui?branch=portal&svg=true)
[![Discord](https://img.shields.io/badge/discord-join%20chat-blue.svg)](https://discord.gg/HBAgaHCBuY)

Shisui is an [Ethereum portal client](https://github.com/ethereum/portal-network-specs) written in Go language based
on [go-ethereum](https://github.com/ethereum/go-ethereum).
The name is inspired by Uchiha Shisui from the anime Naruto, who is renowned as "Shisui of the Body Flicker".

> **Note:** Shisui is still **under heavy development** and is not yet ready for production use.

## Building the source

For prerequisites and detailed build instructions please read
the [Installation Instructions](https://geth.ethereum.org/docs/getting-started/installing-geth).

Building `shisui` requires both a Go (version 1.22 or later) and a C compiler. You can install
them using your favourite package manager. Once the dependencies are installed, run

```shell
make shisui
```

Also, you can build the docker image by running

```shell
make shisui-image
```

## Running `shisui`

After building `shisui`, you can start the client by running

```shell
# supported options are list below
./build/bin/shisui
```

Alternatively, you can run the docker image by running

```shell
docker run -d -p 8545:8545 -p 9009:9009/udp -e SHISUI_NAT=stun ghcr.io/optimism-java/shisui:latest

# if you know your exiIp, replace by -e SHISUI_NAT=extip:${your ip}
```

You can use the script below to check if the node has started correctly.

```shell
curl -X POST http://127.0.0.1:8545 \
     -H "Content-Type: application/json" \
     -d '{
           "jsonrpc": "2.0",
           "method": "discv5_nodeInfo",
           "params": [],
           "id": 0
         }'
```

### supported options

* `--rpc.addr` HTTP-RPC server listening addr
* `--rpc.port` HTTP-RPC server listening port(default: `8545`)
* `--data.dir` data dir of where the data file located(default: `./`)
* `--data.capacity` the capacity of the data stored, the unit is MB(default: `10GB`)
* `--nat` p2p address(default `none`)
    * `none`, find local address
    * `any` uses the first auto-detected mechanism
    * `extip:77.12.33.4` will assume the local machine is reachable on the given IP
    * `upnp`               uses the Universal Plug and Play protocol
    * `pmp`                uses NAT-PMP with an auto-detected gateway address
    * `pmp:192.168.0.1`    uses NAT-PMP with the given gateway address
    * `stun`    uses stun server to find extip
* `--udp.addr` protocol UDP server listening port(default: `9009`)
* `--loglevel` loglevel of portal network, `1` to `5`, from `error` to `trace`(default: `1`)
* `--private.key` private key of p2p node, hex format without `0x` prifix
* `--bootnodes` bootnode of p2p network with ENR format, use `none` to config empty bootnodes
* `--networks` portal sub networks: history, beacon, state

all the options above can be set with envs.

the env is prefixed with `SHISUI` and change the `.` to `_`.

eg `--rpc.add` can be replaced with env `SHISUI_RPC_ADDR`

### Hardware Requirements

Minimum:

* CPU with 2+ cores
* 4GB RAM
* 1TB free storage space to sync the Mainnet
* 8 MBit/sec download Internet service

Recommended:

* Fast CPU with 4+ cores
* 16GB+ RAM
* High-performance SSD with at least 1TB of free space
* 25+ MBit/sec download Internet service

