# Nulink Horus 2.0 Testnet (Phase 1)

By [jab0ykn0ws](https://paragraph.com/@jab0ykn0ws) · 2024-01-14

---

As the decentralized landscape continues to evolve, NuLink emerges as a key player in the realm of privacy-focused solutions for decentralized applications. If you're eager to explore and contribute to NuLink's ecosystem, setting up a Horus testnet node is a great way to get started. In this step-by-step guide, we'll walk you through the process of setting up your NuLink Horus testnet node, allowing you to actively participate in the development and testing phases of this innovative project. First lets look at the testnet milestones broken down by Phase ([source](https://docs.nulink.org/products/testnet/horus_milestones))

![Horus 2.0 Phases](https://storage.googleapis.com/papyrus_images/4a2abdca19e8f8cf21f40a9a2546113456206cee1e5f8f87f5824a2638baa80d.png)

Horus 2.0 Phases

We are currently at Phase 1 and we will do Number 2, which is the [Worker Node Installer Testing](https://docs.nulink.org/products/stakers/nulink_worker/worker_install).

**Setup your NuLink Dashboard**
-------------------------------

*   Access the NuLink dashboard here [https://dashboard.testnet.nulink.org](https://dashboard.testnet.nulink.org)
    
*   Connect your wallet (we are using Metamask here on this guide) and switch to BSC Testnet.
    
*   Claim some test tokens from the faucet _(see screenshot below)_
    

![Claim tokens from faucet](https://storage.googleapis.com/papyrus_images/e4d6b0e20804a8579bf384029e55a2eb4fbdda4b7ef8913123a14c583f3b74ef.jpg)

Claim tokens from faucet

*   Head to staking tab and stake 5 tNLK tokens
    

![Stake 5 nTLK tokens](https://storage.googleapis.com/papyrus_images/dce9c3443e080f8f1a76778dc0d76a6d14820710990aa86778c4f896ed299083.png)

Stake 5 nTLK tokens

*   Prompts will appear on your Metamask click on approve and sign.
    

**Setup our Worker Node**
-------------------------

*   Launch your VPS on any provider, for this guide we will use [Contabo](https://contabo.com/).
    
*   Select Cloud VPS S
    

![](https://storage.googleapis.com/papyrus_images/5a6d9a1db04161ee66ea8f1f86dafad75412e9a7beb2fe6a8da91b90e8c3cc96.png)

*   Click on Apps & Panels and select Docker and choose Ubuntu 22.04 from the dropdown.
    

![](https://storage.googleapis.com/papyrus_images/9ef1decc628bce27eb77fbceb546cb81634a8806594b52a7f6587475bba0c2bf.png)

*   It will take a few minutes before your server is ready. Wait for the email which contains the IP address of your new server
    

![you will receive an email like this](https://storage.googleapis.com/papyrus_images/2dbad7fd2271b26f29ba85622dbfd25877a25b57a55524e998646163dc8894c3.png)

you will receive an email like this

*   Before we proceed to the next step we might need to install an SSH client if you are running on Windows machine, download and install [Putty](https://putty.org/).
    
*   Open Putty and paste the IP address you got from your email to the Host Name or IP Address field and click Open
    

![](https://storage.googleapis.com/papyrus_images/2b16b5f43168fbf8a75a9792c83f8d84dee69f2a74fb56fb9e227f54a7b9787b.png)

*   Login as: root (press enter)  
    and type or paste the password you key in while purchasing the server
    

![](https://storage.googleapis.com/papyrus_images/0eeea425eba8d11ff4b8110fdd065dbd6b43f4227f5af88f9733493370c81adf.png)

*   If you are on MacOS or Linux, just open the default terminal and key in `ssh root@12.34.56.78` (replace with the IP of your server)
    

![](https://storage.googleapis.com/papyrus_images/0496cf0543028bc2583517d842973948977ad9454eeda43559b88f8d5e31f8e0.png)

*   Let’s ensure everything is up to date type the following and press enter
    
        sudo apt-get update && sudo apt-get upgrade -y
        
    
*   Install some dependencies
    
        sudo apt install pkg-config curl git-all build-essential libssl-dev libclang-dev ufw
        
    
*   Verify that docker has been installed, you should see something like the screenshot below:
    

![](https://storage.googleapis.com/papyrus_images/d3d1d6d03ee60d5cae75bf59ba0314949649fdfeb2b23546a129d3d581243c95.png)

*   After that let’s run some docker container
    
        docker run hello-world
        
    

![](https://storage.googleapis.com/papyrus_images/f89d527b4a0b5991979e95af5630595eccfa362e532609d66a893d0b5c0a5d4d.jpg)

*   Let us now create the Node Worker Account
    
        wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.23-d901d853.tar.gz
        
    
*   Unpack the package we just downloaded
    
        tar -xvzf geth-linux-amd64-1.10.23-d901d853.tar.gz
        
    
*   Go inside the directory
    
        cd geth-linux-amd64-1.10.23-d901d853/
        
    
*   Create the new Worker address Account
    
        ./geth account new --keystore ./keystore
        
    

![Creating the new worker address](https://storage.googleapis.com/papyrus_images/8327c74c8214bd073afda9f95af34b6f4ec7feaa06368c9d039173d2b8f4dd1c.png)

Creating the new worker address

*   This will prompt you to enter a password and once confirmed it will start generating a new worker address and the location of the keystore file. Make sure to keep this information safe somewhere. We will need them later.
    
*   Time to start installing and running our Worker node
    
        docker pull nulink/nulink:latest
        
    

![](https://storage.googleapis.com/papyrus_images/29ea6cebb6dd2eec0a5fc758ff3378c30a3ba2e98c10fe7e02513c88c6965448.png)

*   Let us create a new directory under root, first go to root directory
    
        cd /root
        
    
*   Then create a new directory named nulink
    
        mkdir nulink
        
    
*   Copy the Keystore files we generated a while ago to this newly created directory
    
        cp /root/geth-linux-amd64-1.10.23-d901d853/keystore/* /root/nulink
        
    
*   Change permission
    
        chmod -R 777 /root/nulink
        
    

![](https://storage.googleapis.com/papyrus_images/e0d4fb16132a187a4a493866506f7290406fde704a638fcf97501059834cea75.png)

*   Let us now initialize our worker node with the new account, type each command below and press after each command, this is the same password you used a while ago when we were generating the worker address.
    
        export NULINK_KEYSTORE_PASSWORD=your_very_secure_password
        
    
        export NULINK_OPERATOR_ETH_PASSWORD=your_very_secure_password
        
    

![](https://storage.googleapis.com/papyrus_images/52bee5f8e1c813c237a413bac07fbde11e579aaf38b2170493517a3af88a5b7b.png)

*   Run the following commands and ensure to change the encircled portion with the values you get from the Worker Address generation above
    
        docker run -it --rm \
        -p 9151:9151 \
        -v /root/nulink:/code \
        -v /root/nulink:/home/circleci/.local/share/nulink \
        -e NULINK_KEYSTORE_PASSWORD \
        nulink/nulink nulink ursula init \
        --signer keystore:///code/<UTC--2022-REPLACE_THIS_THE_ACTUAL_VALUE YOU GOT FROM WALLET GENERATION> \
        --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 <REPLACE THIS with THE ACTUAL WORKER ADDRESS> \
        --max-gas-price 10000000000
        
    

![make sure to replace this portion with the actual values from your server](https://storage.googleapis.com/papyrus_images/bf19fa86a71addc68f7bc9d7eda9723dc58208d42db6688dc65e1f10288fc985.png)

make sure to replace this portion with the actual values from your server

*   It will then ask you to complete some steps with a prompt below:
    
        Detected IPv4 address (XXX.XXX.XXX.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.
        
        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.
        xxxxxxx xxxxxxxx xxxxxxx xxxxxxxxxx xxxxxxxx xxxxxxxxxx xxxxxxx
        
        Have you backed up your seed phrase? [y/N]: y
        
        Confirm seed words: xxxxxx xxxxxxxxxxxx xxxxxxxxxxxxxxxxxx
        
        Public Key:   02xxxxxxxxxxxxxxxxxxxxxxxxxxxx
        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 file path /home/circleci/.local/share/nulink/ursula.json
        
        * Review configuration  -> nulink ursula config
        * Start working         -> nulink ursula run
        
    
*   Make sure to keep the information above saved somewhere.
    
*   Let us now RUN the node.
    
        docker run --restart on-failure -d \
        --name ursula \
        -p 9151:9151 \
        -v /root/nulink:/code \
        -v /root/nulink:/home/circleci/.local/share/nulink \
        -e NULINK_KEYSTORE_PASSWORD \
        -e NULINK_OPERATOR_ETH_PASSWORD \
        nulink/nulink nulink ursula run --no-block-until-ready
        
    
*   An ID will be generated if everything goes well, save that ID for future reference.
    
*   Let us now confirm the status of our node by running the command below
    
        docker logs -f ursula
        
    
    It should say something about `Working - Keep Ursula Online!`
    
*   Let us give some BNB to our Worker Node. Go to [BNB Chain’s Faucet](https://www.bnbchain.org/en/testnet-faucet)
    
*   Paste your Worker Node’s Address and click `Send 0.3 BNB`
    

![BNB Chain Faucet](https://storage.googleapis.com/papyrus_images/a62693fe5787787412c61648f6304f61107714682e15745fc011353269ba429d.png)

BNB Chain Faucet

> ### **Congrats! Your node is now running!**

Bond Your Worker Node to your Staking Dashboard
-----------------------------------------------

*   Go back to your NuLink Dashboard `https://dashboard.testnet.nulink.org`
    
*   Click Bond Worker and paste your worker node address, it might take a few minutes before your NODE IP to show up and for the Worker Status to go ONLINE, but you should see your worker address to be populated.
    

![Node Information Dashboard](https://storage.googleapis.com/papyrus_images/bf1fb6ff2eab55f7406aa4361ea25ebbd41a6419a17043cdfd1b8e3147bf8f0f.png)

Node Information Dashboard

Form Submission (IMPORTANT for REWARD Eligibility)
--------------------------------------------------

*   After completing 7 epochs (approximately 7 days 1 epochs = more or less 24 hours) with a living ratio above 80% you need to fill out this [FORM](https://docs.google.com/forms/d/e/1FAIpQLSdY2eXwQD-tKvJ_Ug-6hgdcWK_wUOZjXeJknw5XWSEO8gzJ2w/viewform)
    
*   At the end of Phase One , a raffle will happen for all eligible stakers/node operators.
    
*   Good luck and may the odds be ever in your favor!
    

> **_References and Useful Links:_**_1\._ [_https://docs.nulink.org/products/testnet\\_](https://docs.nulink.org/products/testnet%5C) _2._ [_https://www.nulink.org/blog-posts/nulink-testnet-horus-2-0-phase-one-testing_](https://www.nulink.org/blog-posts/nulink-testnet-horus-2-0-phase-one-testing) _rules  
> 3\._ [_Discord Discussion Channel_](https://discord.com/channels/868390450313170945/1116357847073173554)_4\._ [_Telegram Discussion Channel_](https://t.me/NuLink2021)_5\. Form -_ [_https://forms.gle/9ZZgECdJFJFQHGuz8_](https://forms.gle/9ZZgECdJFJFQHGuz8)

---

*Originally published on [jab0ykn0ws](https://paragraph.com/@jab0ykn0ws/nulink-horus-2-0-testnet-phase-1)*
