RSK

EVM sidechain for Bitcoin

RSK is configured by default to accept only localhost / 127.0.0.1 as the hostname

So when StackOS provides a custom hostname, or you configure your own DNS, RSK will refuse to serve any jsonrpc responses

Solution

Prepare node.conf

Take the default node.conf and change the hosts the image will recognize

    web: {
        cors: "*",
        http: {
            enabled: true,
            bind_address = "0.0.0.0",
            hosts = ["tagethost.example.com"]
            port: 4444,
            }
        ws: {
            enabled: false,
            bind_address: "0.0.0.0",
            port: 4445,
            }
        }
    }

Make a Dockerfile

FROM mainnet:latest
COPY node.conf /etc/rsk/node.conf

Build & push your image

docker build -t dockerhubuser/myrsk:v123
docker push dockerhubuser/myrsk:v123

Configure your pod

Download your own image that you just uploaded

If you want to use custom DNS, set that up ahead of time

Test your connection

Run curl against your host

curl https://rsk.mydomain.com/mainnet --header 'Content-Type: application/json'  -XPOST -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

Expect a response like

{"jsonrpc":"2.0","id":1,"result":"0x0"}

Debug your pod

Edit /etc/rsk/logback.xml and increase verbosity for jsonrpc

Wait 1 hour for rsk to read your new log config (or rebuild your docker image and force the change)

Watch for error messages

tail -f  /var/log/rsk/rsk.log | grep rpc

Persistent Storage

If you wish to use persistent storage with rsk, be aware you must update the permissions of the storage directory

Here is an example configuraton

After your pod boots, locate your pod name and shell into your pod:

Then run the following command

chown -R rsk:rsk /var/lib/rsk

Then your process will run normally.

Last updated