> For the complete documentation index, see [llms.txt](https://docs.konsortech.xyz/node/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.konsortech.xyz/node/testnet/nulink.md).

# Worker Installation

## Overview

The NuLink Worker is the node to provide cryptographic service in the NuLink network. It provides Proxy Re-encryption service in the Horus network and it will provide more services such as ABE, IBE, ZKP and FHE in NuLink mainnet. The staker needs running a Worker node to be eligible for token reward.

## There are four steps to run a NuLink Worker:

Create Worker Account Install NuLink Worker Configure and Run a Worker node Bond the Worker node with your staking account

## Minimum System Requirements

Debian/Ubuntu (Recommended) 30GB available storage 4GB RAM x86 architecture Static IP address Exposed TCP port 9151, make sure it's not occupied Nodes can be run on cloud infrastructure.

## Installation

### Update Depencies

```
sudo apt update && sudo apt upgrade -y
sudo apt install ufw
```

### Install Latest Docker Engine and Pull Latest Horus Image

```
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
docker pull nulink/nulink:latest
```

### Setup Firewall

```
sudo ufw allow ssh
sudo ufw allow 9151/tcp
sudo ufw allow
```

And press y then enter.

### Setup Password Variable

```
export NULINK_KEYSTORE_PASSWORD=<YOUR NULINK STORAGE PASSWORD>
export NULINK_OPERATOR_ETH_PASSWORD=<YOUR WORKER ACCOUNT PASSWORD>
```

Change both to the password you preffered

### Create Worker Account

Download GETH and Extract

```
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.23-d901d853.tar.gz && tar -xvzf geth-linux-amd64-1.10.23-d901d853.tar.gz
```

Rename the directory

```
mv geth-linux-amd64-1.10.23-d901d853 geth
```

Go to the geth dir

```
cd geth/
```

Now Create the worker account key by running the command below inside the dir geth

```
./geth account new --keystore ./keystore
```

You will be prompted to enter the password and confirm the password. Please remember this password for late use.

Example:

```
INFO [09-08|15:30:11.904] Maximum peer count                       ETH=50 LES=0 total=50
INFO [09-08|15:30:11.905] Smartcard socket not found, disabling    err="stat /run/pcscd/pcscd.comm: no such file or directory"
Your new account is locked with a password. Please give a password. Do not forget this password.
Password: 
Repeat password: 
​
Your new key was generated
​
​
Public address of the key:   0x8B1819341BEc211a45a2186C4D0030681cccE0Ee
Path of the secret key file: /root/geth-linux-amd64-1.10.23-d901d853/keystore/UTC--2022-09-13T01-14-32.465358210Z--8b1819341bec211a45a2186c4d0030681ccce0ee
​
- You can share your public address with anyone. Others need it to interact with you.
- You must NEVER share the secret key with anyone! The key controls access to your funds!
- You must BACKUP your key file! Without the key, it's impossible to access account funds!
- You must REMEMBER your password! Without the password, it's impossible to decrypt the key!
```

### Create Nulink Directory

```
cd $HOME
sudo mkdir nulink
```

Copy the keystore file of the Worker account to the host directory. The private file generated by NuLink Worker will also be stored in this directory.

```
cp $HOME/geth/keystore/* $HOME/nulink
```

Give the directory 777 Permission

```
sudo chmod -R 777 $HOME/nulink
```

### Init Worker

```
docker run -it --rm \
-p 9151:9151 \
-v $HOME/nulink:/code \
-v $HOME/nulink:/home/circleci/.local/share/nulink \
-e NULINK_KEYSTORE_PASSWORD \
nulink/nulink nulink ursula init \
--signer keystore:///code/UTC--2022-09-13T01-14-32.465358210Z--8b1819341bec211a45a2186c4d0030681cccXXXX \
--eth-provider https://data-seed-prebsc-2-s2.binance.org:8545 \
--network horus \
--payment-provider https://data-seed-prebsc-2-s2.binance.org:8545 \
--payment-network bsc_testnet \
--operator-address <Operator Address> \
--max-gas-price 10000000000
```

Change the --signer and --operator-address to your own! Example Output :

```
# step 1
 Detected IPv4 address (8.219.186.xxx) - Is this the public-facing address of Ursula? [y/N]: y
 
 Please provide a password to lock Operator keys.
 Do not forget this password, and ideally store it using a password manager.
 
 # step 2
 Enter nulink keystore password (8 character minimum): xxxxxx
 Repeat for confirmation: xxxxxx
 
 Backup your seed words, you will not be able to view them again.
 
 xxxxxxxxxxxxxxxxxxxxxxxx
 
 # step 3
 Have you backed up your seed phrase? [y/N]: y
 
 # step 4
 Confirm seed words: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
 
Public Key:   02bb2067d21a677ce928967c0ece79a9
Path to Keystore: /home/circleci/.local/share/nulink/keystore
​
- You can share your public key with anyone. Others need it to interact with you.
- Never share secret keys with anyone! 
- Backup your keystore! Character keys are required to interact with the protocol!
- Remember your password! Without the password, it's impossible to decrypt the key!
​
​
Generated configuration file at default filepath /home/circleci/.local/share/nulink/ursula.json
​
* Review configuration  -> nulink ursula config
* Start working         -> nulink ursula run
```

Backup your Seed!

### Run the worker

Before running the worker make sure you have tBNB, if not request ​ Run Worker

```
docker run --restart on-failure -d \
--name ursula \
-p 9151:9151 \
-v $HOME/nulink:/code \
-v $HOME/nulink:/home/circleci/.local/share/nulink \
-e NULINK_KEYSTORE_PASSWORD \
-e NULINK_OPERATOR_ETH_PASSWORD \
nulink/nulink nulink ursula run --no-block-until-ready
```

And Voila! Your worker is now running To check the logs you can type

```
docker logs -f ursula
```

Example output:

```
Authenticating Ursula
Loaded Ursula (horus)
✓ External IP matches configuration
Starting services
✓ Node Discovery (Horus)
✓ Work Tracking
✓ Start Operator Bonded Tracker
✓ Rest Server https://8.219.186.xxx:9151
Working ~ Keep Ursula Online!
```

To check running container you can run

```
docker ps
```

To stop container you can run

```
docker stop ursula
```

To Restart container

```
docker restart ursula
```

Now you can go to the next step which is Bonding the worker to provider.
