BenchmarkersSetting Up

Setting up the Benchmarker

This guide will be using the tig-benchmarker to spin up a Master node and Slave nodes to benchmark and compute solutions.

Getting Started

Setting Up & Topping Up the Balance

Head over to the Main Dashboard and select the Benchmarking tab. For testnet, you can use the Testnet Dashboard.

Select Benchmarker

Read the terms and conditions and connect your wallet.

Connect Wallet

To participate in The Innovation Game and start benchmarking, you will need an API Key. The API Key is used for benchmarking, delegating and other network activities.

Click on Obtain API-Key and sign the message with your wallet.

Obtain API-Key

You will now be redirected to the Main Dashboard. Head over to the Benchmarking page.

To start with Benchmarking, you will either need to lock up TIG in the form of a deposit and run a benchmarking node or join a TIG Pool.

Select Start by locking your tokens to make a deposit.

Benchmarker Deposit

Head over to Making Deposits to learn more.

After making a deposit, you will now need to top-up your fee balance to start benchmarking.

Each challenge has its own base fee, which is the amount of TIG deducted from your Available Fee Balance when initiating a benchmark.

Current base fees:

ChallengeFee
satisfiability0.001 TIG
vehicle_routing0.001 TIG
knapsack0.001 TIG
vector_search0.001 TIG

To top-up your balance, click on the Top-Up TIG button on the sidebar.

top-up tig

Here, you can see your total topped up balance, available fee balance and the deducted balance. You can start by topping up your balance with 5 TIG.

top-up tig 2

Click on Burn Tokens and confirm the transaction on your wallet.

⚠️

Making a top-up transaction means that you are burning TIG for paying submission fees. To increase your cutoff, head over to Making Deposits.

You can request for Testnet TIG on Base Sepolia Testnet using the TIG faucet.

Reward Share

Benchmarkers can share a percentage of their rewards with their delegators. The reward share can range from 0% to 25% and can be updated once every 1440 blocks. This is to attract delegators to delegate their deposits to your Benchmarker.

Head over to the Benchmarking page to set or update your reward share percentage.

Reward Share

Read more about Delegated Deposits.

Benchmarkers can use this script to estimate the impact of delegated deposits on their earnings.

Obtaining the API Key

The API Key can be either obtained from the Main Dashboard or by using the Official API.

To obtain the API Key from the UI, click on the copy icon next to the API Key on the sidebar to copy it to your clipboard.

Obtain API-Key

To obtain a testnet API Key, you can head over to the Testnet Dashboard and do the same.

If you wish to use the API directly, you can obtain the API Key by making a POST request to the following endpoint:

curl -X 'POST' \
  'https://mainnet-api.tig.foundation/request-api-key' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "address": "0x7f1ddd40c04ca1682960155d0b95fdb380456826",
  "signature": "0xf9120ef1fb1e95542581c9ea8586dd5ca1b20028e79d6fdac2f450a31de2ddc0b27aac26deb4cce33f44acdc5b15147b7c8e2e75bbb978a69d06dcaacbc2111fbd"
}'

<address> must be lowercase. The <signature> must be generated from signing the following message:

I am signing this message to prove that I control address <address>

This will return the API Key for the connected wallet address.

Setting up the Developer Environment

To set up the environment, clone the TIG Monorepo:

git clone https://github.com/tig-foundation/tig-monorepo.git

Switch to the appropriate branch:

git switch main
## OR
git switch blank_slate

Navigate to the tig-monorepo directory and compile tig-worker:

cd tig-monorepo
cargo build -p tig-worker --release

Setting up the Master node

The Master node is responsible for managing multiple Slave nodes by generating batches for slaves to work on. It also takes care of the benchmarking process, which includes submitting precommits, benchmarks and proofs.

To start the Master node, make sure you are in the tig-benchmarker directory and run the following command:

POSTGRES_USER=postgres \
POSTGRES_PASSWORD=password \
POSTGRES_DB=postgres \
UI_PORT=80 \
DB_PORT=5432 \
MASTER_PORT=5115 \
VERBOSE= \
docker-compose up --build
 
## Set VERBOSE = 1 for debug master logs.
## Set the POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB, UI_PORT, DB_PORT, MASTER_PORT to your desired values.
ℹ️

Make sure that Docker is up and running before starting the Master node.

After running the command, you should see the Master node UI running on http://localhost:80. If you are using a different UI_PORT, you can access the Master node UI on http://localhost:<UI_PORT>.

The Master node UI will look like this:

Master node UI

The Master node is responsible for 4 services:

  • The main master service: The main Master node. Responsible for managing the slave nodes and the benchmarking process. This service by default runs on port 5115.
  • The db service: Responsible for maintaining a local postgres database for your benchmarks and batches. You can use a tool like pgAdmin to query the database. This service by default runs on port 5432.
  • The ui service: Responsible for the user interface of the Master node. This service by default runs on port 80.
  • The nginx service: Responsible for routing the requests to the ui and master.

You can view the logs of each service individually:

docker-compose logs -f `<service>`

Setting up the Configuration

To configure the benchmarker, head over to your localhost Benchmarker UI’s config page. You can edit the configuration to include your api_key, player_id, api_url and configure other benchmarker settings.

https://mainnet-api.tig.foundation
config.json
{
    "player_id": "<YOUR_PLAYER_ID>",
    "api_key": "<YOUR_API_KEY>",
    "api_url": "<TESTNET_OR_MAINNET_API_URL>",
    "job_manager_config": {
        ...
    },
    "slave_manager_config": {
        ...
    },
    "precommit_manager_config": {
        ...
    },
    "difficulty_sampler_config": {
        ...
    },
    "submissions_manager_config": {
        ...
    }
}

Select Config

ℹ️

The player_id is the wallet address of your benchmarker, i.e, the address you used to obtain the API Key and sign the message.

To read more about optimising the configuration, head over to Optimizing Benchmarker Configuration.

Setting up Slave Nodes

The Slave nodes are responsible for benchmarking and computing solutions. Slave node polls the Master node for batches to work on, using tig-worker to compute solutions and batches.

To connect a Slave node to the Master node, make sure you have the tig-worker binary compiled and ready.

Install the dependencies for the Slave node:

pip3 install randomname requests

Start the Slave node by running the following command:

python3 slave.py <path-to-tig-worker> --master <master-ip> --workers <number-of-threads>
  • The master-ip by default should be 0.0.0.0 if you are running the Master node on your local machine. You can leave this empty if you are running the Master node on the same machine.
  • path-to-tig-worker should be the path to the tig-worker binary, which should be located at should be located at tig-monorepo/target/release/tig-worker.
  • The number-of-threads should be the number of threads you want to run for the Slave node.

The Slave node will now be connected to the Master node and will start polling for batches.

You can head over to the Master node UI to view the latest jobs.

Select Config

Benchmarkers can use this script to verify batches submitted by slaves.

Last updated on