Links

FAQ

Frequently asked questions surrounding the Iron Age Testnet

Table of Contents

Nodes (go-quai)

What types of nodes does go-quai support?

The go-quai client currently supports full global nodes, full multi-slice nodes, and full slice nodes.
Full Node: The default node construction. A full node is a node that stores the entire state of the network, and verifies each new state transition from genesis.
Light Node: A node that only verifies new state transitions and does not retain historical state.
Archive Node: A node that verifies new state transitions and maintains the entire historical state of the network, taking and storing a snapshot of state block by block.
Single-Slice (or just Slice): A node running the Prime chain, a self-selected Region chain, and a self-selected Zone chain.
Multi-Slice: A node running the Prime chain, one or more self-selected Region chains, and two or more self-selected Zone chains.
Global: A node running the Prime chain, all Region chains, and all Zone chains.
Green = Currently supported in go-quai
Red = Not currently supported in go-quai
go-quai
Single-Slice
Multi-Slice
Global (All Slices)
Light Node
Light Slice Node
Light Multi-Slice Node
Light Global Node
Full Node
Full Slice Node
Full Multi-Slice Node
Full Global Node
Archive Node
Archive Slice Node
Archive Multi-Slice Node
Archive Global Node

What hardware specifications are required to run a slice node? What about a global node?

The hardware requirement to run a slice node during the Iron Age Testnet:
  • CPU with 4+ cores
  • 16GB RAM
  • 1TB free storage space to sync
  • 10+ MBit/sec download Internet service
The hardware requirement to run a global node during the Iron Age Testnet:
  • Fast CPU with 4+ cores
  • 32GB+ RAM
  • Fast SSD with at least 3TB free space
  • 10+ MBit/sec download Internet service

What is the network.env file for?

The network.env file can be thought of as the configuration file for your node. When starting, your node will look at the network.env file to know which slices to run, which network to run on (colosseum, garden, etc.), where mining rewards should be paid out to, and more.
  • COINBASE : The address in each chain (slice) that mining rewards are paid to. Note that there is one coinbase address per chain.
  • NETWORK : the network (testnet [colosseum], devnet [garden], etc.) your node is running on.
  • SLICES : This parameter determines which slices of the network the node will run (i.e. determines whether the node will be a slice node, a multi-slice node, or a global node).
The “Run a Node” page in the Quai docs contains information on the most important things to change in this file: https://docs.quai.network/node/node-overview/run-a-node#node-configuration

What networks are available to run?

The main network of the Iron Age Testnet is COLOSSEUM. The development network of the Iron Age Testnet is GARDEN. The local development environment is LOCAL.
NOTE: The Garden developer network operates on the BLAKE3 hashing algorithm at low difficulty, meaning the Garden developer network has a significantly higher chance of reorgs than the main Colosseum network.

How do I tell my node which slices to run?

In the codebase, a slice is identified by its region and zone index. Region and zone indices are 0-indexed and range from 0-2.
Region
Zone
Chain Index
Chain Name
Region 1
Zone 1
[0 0]
Cyprus-1
Region 1
Zone 2
[0 1]
Cyprus-2
Region 1
Zone 3
[0 2]
Cyprus-3
Region 2
Zone 1
[1 0]
Paxos-1
Region 2
Zone 2
[1 1]
Paxos-2
Region 2
Zone 3
[1 2]
Paxos-3
Region 3
Zone 1
[2 0]
Hydra-1
Region 3
Zone 2
[2 1]
Hydra-2
Region 3
Zone 3
[2 2]
Hydra-3
The SLICES parameter of the network.env file determines which slices of the network the node will run (i.e. determines whether the node will be a slice node, a multi-slice node, or a global node). To spin up a slice node, edit the network.env file to modify the slices you want to run. For example, if you wanted to run two slices, you would change the SLICES line to the following (be aware of spacing):
SLICES="[FIRST_REGION_NUM, FIRST_ZONE_NUM],[SECOND_REGION_NUM, SECOND_ZONE_NUM]"

I got the error “ERROR: This computer is not publicly reachable and cannot join the P2P network. Please forward the necessary ports or enable UPnP on your router. See https://docs.quai.network/ for guidance.” when trying to start my node. How do I fix this?

If you got this error, it means your router does not have UPNP enabled. Enabling UPNP (Universal Plug and Play) allows other devices (namely other Quai nodes) to discover your node and establish proper networking.
While each router has a different protocol for enabling UPNP, this guide covers how to enable UPNP on routers from many common ISPs: https://www.lifewire.com/enable-upnp-on-a-router-5206124. You can also get help turning on UPNP on your router in the Quai Docs.
If you do not want to enable UPNP on your router, you can specifically open peering ports 30303 through 30315 for both TCP and UDP. You can learn how to open specific ports on your router here: https://nordvpn.com/blog/open-ports-on-router/. If you decide not to enable UPNP, you will need to modify your network.env file to reflect ENABLE_NAT=true and specify your external IP address in EXT_IP.
To verify that your ports are open, you can use this service: https://www.yougetsignal.com/tools/open-ports/.
Once you enable UPNP on your router or open the necessary ports, restart your node.

I got the error "Fatal: Failed to register the Quai service: genesis block mismatch:" when trying to start my node. How do I fix this?

If you got this error, it likely means that your network.env file needs to re-copied.
Start by running the following to determine which tag you are on:
git status
If you are on the correct tag, you need to re-copy your network.env file and re-configure the SLICES, NETWORK, and COINBASE parameters. This will ensure you are running on the correct nonce.
cp network.env.dist network.env
Once you've re-copied and re-configured the network.env file, you should be able to run your node.
If, when you run git status, you are NOT on the correct branch, be sure to update your node following this link and then come back here to re-copy the network.env.

How do I know if my node is working (syncing) properly?

To check if your node is syncing, you can run the following command:
// This command will display a stream of logs containing "Appended" from Cyprus-1.
// To edit which chain's logs will display, edit the chain index.
tail -f nodelogs/zone-0-0.log | grep Appended
This command will start outputting any nodelogs from your identified chain (Cyprus-1 in the above example) that contain the word “Appended”. If your node is appending new blocks, you are syncing.
NOTE: Your node may briefly stop appending blocks for certain periods of time — this is normal, and does not require a restart of the client.
Example output of above command:
INFO [09-15|16:12:44.146] Appended new block number=8950 hash=0x58951201fd240d3dfb18b3022a5b49fd2302e1471871b7b0106a79be3d10aa53 difficulty=1138303393 uncles=0 txs=0 etxs=0 gas=0 gasLimit=5000000 root=0x08e92339eed4cd893bf7cba4e75d4b5e1cb8c6e6b71085c9d31a79e558e630a4 order=2 location=[0 1] elapsed=485.326ms
INFO [09-15|16:12:44.666] Appended new block number=8951 hash=0x3ebb530d87e800a716e126ed5a8ba3743bba8c22312cc95f106ecedb0ef7dfd3 difficulty=1132374729 uncles=0 txs=0 etxs=0 gas=0 gasLimit=5000000 root=0x119881ffd97de077e98660eefab189285185d1d5255ec1790c037c7bff7d5579 order=2 location=[0 1] elapsed=503.089ms
INFO [09-15|16:12:45.195] Appended new block number=8952 hash=0xcaaef10fecebd48dd39133591c9f0ce6e5d13fcda07db40ef00eedfd87e6a6ac difficulty=1132767914 uncles=0 txs=0 etxs=0 gas=0 gasLimit=5000000 root=0x9c09d034fe350fe30c0d9b2c66ddf1548b69a38cc0582fc9f72bbd600d182dc0 order=2 location=[0 1] elapsed=514.5ms
INFO [09-15|16:12:45.747] Appended new block number=8953 hash=0x48e853e9b93fd1f77957e1660680152b7ed3167c0407c26f2505911735c33cb3 difficulty=1111331854 uncles=0 txs=0 etxs=0 gas=0 gasLimit=5000000 root=0xc6845d2e7542766eca51080372c85c2ef1afdc7730776f686cb07772d0d5bdc7 order=2 location=[0 1] elapsed=536.644ms
INFO [09-15|16:12:46.286] Appended new block number=8954 hash=0x37e08286affa6db4a7f465cc883d59c0855d2fe5cb255899d769d95a5e7dfdeb difficulty=1106508365 uncles=0 txs=0 etxs=0 gas=0 gasLimit=5000000 root=0xd488aeb178318ec13081b2aee5784fa547ccf32fb71aaa934bab96e8c5c215f8 order=2 location=[0 1] elapsed=525.032ms
INFO [09-15|16:12:46.832] Appended new block number=8955 hash=0x602b755bc928a056a274440101e8caef8e01b2c7dbef18d6da22633a3d79c3b2 difficulty=1106508365 uncles=0 txs=0 etxs=0 gas=0 gasLimit=5000000 root=0x299944a058026e98c5da8cf8601ea57dbe93428243c62c37fe900d00652139b5 order=2 location=[0 1] elapsed=531.949ms
INFO [09-15|16:12:47.360] Appended new block number=8956 hash=0x5d4578fbd158ab315c7fc2022bab531faaf32441e20eef94d01d1014a924c758 difficulty=1107853080 uncles=0 txs=0 etxs=0 gas=0 gasLimit=5000000 root=0x355f6ea9eecff511726afaff79b341bf5585bb88d028cb3fde994ef80a4a7f14 order=2 location=[0 1] elapsed=518.317ms
INFO [09-15|16:12:47.858] Appended new block number=8957 hash=0xb3ff4f91a59612059ac7e25967f8ab38f42a42e442e224ce9542aabb1c9e00b5 difficulty=1105545052 uncles=0 txs=0 etxs=0 gas=0 gasLimit=5000000 root=0xe55c81413b9b77e8ae6fe9ca895874d08c2d1da22a606f24c3875177fa19437c order=2 location=[0 1] elapsed=484.846ms
INFO [09-15|16:12:48.336] Appended new block number=8958 hash=0x88de45c5a1c251eee302ad0fb6ffe589a4b3dc9bc7d12cea81f9688220e4d982 difficulty=1103817637 uncles=0 txs=0 etxs=0 gas=0 gasLimit=5000000 root=0x714804a56521aa717ab16b51abd5a334c0064731e30f7a4ac819f1c3ab804036 order=2 location=[0 1] elapsed=461.784ms
INFO [09-15|16:12:48.848] Appended new block number=8959 hash=0x67fbc3f36e97e65258fb95083a63579ee0fab915f6fdd4255418f7cb7872502e difficulty=1104775812 uncles=0 txs=0 etxs=0 gas=0 gasLimit=5000000 root=0xa57f3238e07ed719c602a4c71b485b87f93da588b38c7ed744881a54ffdfec55 order=2 location=[0 1] elapsed=496.760ms
You can also check the progress of your node's sync using the client JSON RPC API. The quai_syncing API method can be used easily in the Quai Postman Workspace or via the command line.

How do I know if my node has synced to the network?

To check if your node is synced to the tip of the network, we need to figure out what the most recent blocks your node has appended are.
To show the most recent blocks your node appended in a specific chain, run the following line of code:
// This command will display recent logs containing "Appended" from Cyprus-1.
// To edit which chain's logs will display, edit the chain index.
cat nodelogs/zone-0-0.log | grep Appended
To display an ongoing stream of logs showing which blocks are being appended, run the following line of code (to exit the stream, use ctrl+c):
// This command will display a stream of logs containing "Appended" from Cyprus-1.
// To edit which chain's logs will display, edit the chain index.
tail -f nodelogs/zone-0-0.log | grep Appended
If you are running a global node and/or want to check the logs of all chains simultaneously to see which blocks are being appended, the chain index can be replaced with *:
// This command will display recent logs containing "Appended" from all chains.
cat nodelogs/*.log | grep Appended
// This command will display a stream of logs containing "Appended" from all chains.
tail -f nodelogs/*.log | grep Appended
You can also check the progress of your node's sync using the client JSON RPC API. The quai_syncing API method can be used easily in the Quai Postman Workspace or via the command line. If the API returns false, your node has synced to the current tip of the chain.
Once you’ve determined what block your node has most recently appended, you can visit the Quaiscan block explorer for the chain that you’re checking against, or you can check the node stats page. To see if you’ve synced, check whether the block height on your node corresponds to the latest maximal block height for the same chain on the Kibana dashboard or Quaiscan. If they are the same, your node has synced! If your node’s block height is less than the block height of Kibana/Quaiscan, you are still syncing.
Region
Zone
Chain Index
Chain Name
Quaiscan Link
Region 1
Zone 1
[0 0]
Cyprus-1
Region 1
Zone 2
[0 1]
Cyprus-2
Region 1
Zone 3
[0 2]
Cyprus-3
Region 2
Zone 1
[1 0]
Paxos-1
Region 2
Zone 2
[1 1]
Paxos-2
Region 2
Zone 3
[1 2]
Paxos-3
Region 3
Zone 1
[2 0]
Hydra-1
Region 3
Zone 2
[2 1]
Hydra-2
Region 3
Zone 3
[2 2]
Hydra-3

How do I check my nodelogs?

To show your recent nodelogs for a specific chain, you can run the following:
// This command will display recent logs from Cyprus-1.
// To edit which chain's logs will display, edit the chain index.
cat nodelogs/zone-0-0.log
To stream your nodelogs for a specific chain, you can run the following (to exit the stream, you can run ctrl+c):
// This command will display a stream of logs from Cyprus-1.
// To edit which chain's logs will display, edit the chain index.
tail -f nodelogs/zone-0-0.log
To show the most recent blocks your node appended in a specific chain, run the following line of code:
// This command will display recent logs containing "Appended" from Cyprus-1.
// To edit which chain's logs will display, edit the chain index.
cat nodelogs/zone-0-0.log | grep Appended
To display an ongoing stream of logs showing which blocks are being appended, run the following line of code (to exit the stream, use ctrl+c):
// This command will display a stream of logs containing "Appended" from Cyprus-1.
// To edit which chain's logs will display, edit the chain index.
tail -f nodelogs/zone-0-0.log | grep Appended
If you are running a global node and/or want to check the logs of all chains simultaneously to see which blocks are being appended, the chain index can be replaced with*:
// This command will display a stream of logs from Cyprus-1.
// To edit which chain's logs will display, edit the chain index.
tail -f nodelogs/zone-0-0.log
// This command will display a stream of logs containing "Appended" from all chains.
tail -f nodelogs/*.log | grep Appended

What is the difference between checking Prime, Region, and Zone nodelogs? Which nodelogs should I check?

Quai Network runs a hierarchy of chains. All nodes run the Prime chain and a minimum of one Region and Zone chain.
Slices are identified by Zones. Thus, when checking nodelogs, you should check the logs for the Zone(s) that your node is running. Since block time for Zones are the fastest, checking the Zone nodelogs provides the most accurate understanding of where your node has synced to/what is happening in your node at any given point in time.

If/when a new release of go-quai comes out as part of the Testnet, what do I need to do to update my node?

First, stop your existing node:
make stop
Next, pull the latest code to your machine:
git pull && git fetch --all
Next, check out the newest release:
// Replace [NEW RELEASE] with the newest go-quai release (e.g. v0.17.0-rc.1)
git checkout [NEW RELEASE]
Then, you can remake the go-quai binaries:
make go-quai
Now you’re able to restart your node:
make run
You can check the status of your node using the previously mentioned nodelogs commands.

How do I delete my node's database and reset my state?

NOTE: Do not do this without good reason! There should be no need to clear state for the vast majority of users participating in Testnet. Resetting a node is a NON-REVERSABLE PROCESS -- after you clear your database, you will need to completely re-sync your node from genesis.
Developers and node runners may find that situations arise where they need to completely clear their node of synced state and/or do a full reset in the case of an issue or bug. A full reset of a node involves stopping the node, clearing the current nodelogs, and removing all synced state.
As a final reminder, resetting your node is non-reversible and should only be done if you fully understand the implications of removing all synced state.
For Linux Machines, we'll remove the nodelogs directory and the base .quai directory which contains all synced state. To do this, run the following command:
rm -rf nodelogs ~/.quai
For MacOS machines, we'll use a different command to remove the same directories:
rm -rf nodelogs ~/Library/Quai
After running one of the two above commands, the node has been fully reset and is ready to be restarted.

Can I use a VPS to run a node and/or a virtual GPU to run a miner?

Yes. However, be cautious with how much VPS/virtual GPUs can end up costing, especially with the current hardware requirements to run a node.

GPU Mining (quai-gpu-miner, go-quai-stratum)

What hashing algorithm is used in the Iron Age Testnet?

The Iron Age Testnet is running using the ProgPoW hashing algorithm for mining. The ProgPoW algorithm was chosen due to the difficulty of creating application-specific integrated circuits (ASICs) that can mine ProgPoW. The use of ASIC-able algorithms such as SHA-256 quickly renders consumer-grade hardware impractical, resulting in large barrier to entry for competitive mining.
ProgPoW was developed as an EIP to replace Ethash, but was discarded due to the merge. The original ProgPoW EIP (EIP-1057) can be found here. Additional information on ProgPoW can be found on the ETH Magicians forum here.

What are the hardware requirements for a GPU miner?

To run a GPU miner, you’ll need:
  • A node running a stratum proxy to connect to
  • An AMD or Nvidia GPU
  • An AMD or Intel CPU
  • 4GB+ of RAM

What operating systems are supported by the quai-gpu-miner?

Currently, Ubuntu (Version 20.04) and HiveOS are the only operating systems supported by the miner.

Does my miner have to be running on the same machine as my node?

No. While you can connect the GPU miner to a node on the same machine, it is recommended to run the GPU miner and a node on separate machines, using the stratum proxy to point the miner at the node.

Does my stratum proxy have to be running on the same machine as my node?

Yes. In order for your GPU miner to be able to use the stratum proxy to connect to your node, the stratum proxy and node must be running simultaneously on the same machine.
// REGION-WS-PORT and ZONE-WS-PORT should be replaced with the correct ports.
./build/bin/quai-stratum --region=REGION-WS-PORT --zone=ZONE-WS-PORT
To properly run this command, you'll need to replace REGION-WS-PORT and ZONE-WS-PORT with the correct ports for the slice you wish the proxy to run.
To find the correct WS ports, you can either check the Node Overview page of the docs, or alternatively use the following table to immediately find the correct command:
Chain Name
Chain Index
Command
Cyprus-1
[0 0]
./build/bin/quai-stratum --region=8579 --zone=8611
Cyprus-2
[0 1]
./build/bin/quai-stratum --region=8579 --zone=8643
Cyprus-3
[0 2]
./build/bin/quai-stratum --region=8579 --zone=8675
Paxos-1
[1 0]
./build/bin/quai-stratum --region=8581 --zone=8613
Paxos-2
[1 1]
./build/bin/quai-stratum --region=8581 --zone=8645
Paxos-3
[1 2]
./build/bin/quai-stratum --region=8581 --zone=8677
Hydra-1
[2 0]
./build/bin/quai-stratum --region=8583 --zone=8615
Hydra-2
[2 1]
./build/bin/quai-stratum --region=8583 --zone=8647
Hydra-3
[2 2]
./build/bin/quai-stratum --region=8583 --zone=8679

How do I find the IP address of my stratum proxy?

To find the IP of your stratum proxy, you can run the following command on MacOS:
ipconfig getifaddr en0
Or the following command on Linux:
hostname -I
If your node and stratum proxy are running on a VPS, you can use the following command to find your IP:
curl ifconfig.me
If your node, stratum proxy, and GPU miner are running on the same machine, you should use the IP address 0.0.0.0.

I got the error "Error: No usable mining devices found." How do I fix this?

If you get this error, you're likely running your miner in a virtual machine on top of Windows. Virtual machines on Windows don’t have access to the GPU or its drivers.
To get the miner to work you’ll have to boot Linux or hive, not run a VM.

What port does my stratum proxy run on?

Unless you changed the port in the config file, your stratum proxy will run on port 3333 by default.

Is there a limit to how many GPUs I can connect to a single node?

Not that we've found during our testing! If you end up finding a limit, let us know in the Quai dev discord.

Development & Deployment (quais, hardhat)

What are the prerequisite requirements to deploy a smart contract?

To deploy a smart contract on Quai, you'll need a few things:
  • QUAI to cover gas: similar to a normal transaction, you'll need to set your gas limit. Be aware that contract deployment requires significantly more gas than a simple transfer.
  • Contract Bytecode: generated using a compiler
  • Deployment script or plugin
  • Access to a Quai node: you can do this either by running your own node, accessing a publicly available node, or through API key via a node service.

Do I have to run a local node to deploy, or can I use RPC endpoints?

You can use either. Importantly, however, if you are deploying your contracts using your own local node, you must be synced to the tip of each blockchain you wish to deploy a contract on.
In practice, this means that if you are operating a slice node, you’ll need to use RPC endpoints to deploy to any chains other than the single Zone chain that your node maintains. On the other hand, if you are running a global node, you will be able to deploy against your local node in all chains and will not need to use an RPC endpoint for any chain.

How does the “addApprovedAddress.js” script provided in the docs tutorial change when deploying a QRC-721?

The addApprovedAddress.js script provided in the “Deploy a Multi-Chain Smart Contract” tutorial in the Quai docs is specifically designed to link the deployed QRC-20 contracts. To interlink QRC-721 contracts, you can use the same script, but need to replace all instances of “20” in the script with “721”.
You can use the exact same script to link QRC-721 and QRC-20 contracts only because they use the same method for linking/adding approved contracts. This may not be true for all contracts.

Wallets (Pelagus, Koala)

Why is my Pelagus seed phrase in Spanish?

The Pelagus seed phrases are generated in Spanish to make it impossible to reuse seed phrases used in Pelagus during Testnet on Mainnet. Upon Mainnet, Pelagus will use seed phrases generated in English.

Where can I install Pelagus?

Pelagus Wallet can be installed from the Chrome Web Store.

What browsers is Pelagus supported on?

As a Chromium-based extension, Pelagus is supported on most Chromium browsers, including Google Chrome, Brave, Opera, Edge, and more.

Can I use Pelagus on mobile?

While largely untested, many mobile browsers can offer support for Chromium extensions. We recommend testing the Pelagus extension on mobile Chromium browsers like Kiwi or Yandex. Let us know if it works!

Where can I install Koala Wallet?

Koala Wallet can be installed from the Chrome Web Store, iOS Apple Store, and/or Google Play Store.

When will Koala Wallet be adding support for the Iron Age Testnet?

Currently, Koala Wallet does not support Quai. Koala Wallet has expressed interest in adding support for Quai Network’s Iron Age Testnet as soon as possible after Testnet launch. While no hard date is available for when Koala will support the Testnet, the Koala Twitter and Koala Discord share consistent updates on the status of the project.

How long should I wait for my transaction to process?

Same Zone: Referred to as an “internal” transaction. These transactions receive settlement in ~10 seconds.
Near-Coordinate: A near-coordinate transaction is an “external” transaction that traverses from one Zone to another Zone under the same Region. For example, a transaction from Cyprus-1 to Cyprus-2 is considered “near-coordinate.” Near-coordinate transactions receive settlement in ~300 seconds.
Far-Coordinate: A far-coordinate transaction is an “external” transaction that traverses from one Zone to another Zone under a different Region. For example, a transaction from Cyprus-1 to Paxos-1 is considered “far-coordinate. Far-coordinate transactions receive settlement in ~3,300 seconds.
Transaction Type
ETX Emitted?
Description
Settlement Time
Same Zone
No
A transaction where the originating Zone and the destination Zone are the same.
~10s
Near-Coordinate
Yes
A transaction where the originating Zone and the destination Zone are different, but are subordinate to the same Region.
~300s
Far-Coordinate
Yes
A transaction where the originating Zone and the destination zone are different, and are subordinate to different Regions.
~3,300s

Does Pelagus Wallet auto-refresh like Metamask?

No. Unlike Metamask and most other browser extension wallets, Pelagus only submits RPC calls to update your balance, transaction history, etc. when you open, close, or interact with the application. To get Pelagus to query the RPCs and update your balance, you can close and re-open the extension or switch between accounts.