Developer FAQ

What does Algorand install on my computer?

Information on all locally created binaries and configuration files can be found in the Node Install Files section.

What does the network architecture look like?

Currently, the Algorand network is composed of participation nodes and relay nodes. Participation nodes only read and write through relays. Participation nodes do not have ports open for receiving messages from other nodes. All traffic is routed through relays. In the future, Algorand will implement full peer-to-peer between each node. For more information see Algorand Node Types in the Getting Started Guide.

What is goal?

Goal is the command line utility used to interact with the Algorand node. With goal you can do things like create an account, list account balances, examine the status of the network, and create transactions. See Using goal for a full list of commands.

Can I create my own test network?

Yes. goal network provides functionality to spin up your own private, local network that you can interact with for development purposes. When you are ready, you can deploy your application to the Algorand TestNet for more realistic network conditions. Seeing the section on Testing for more information on best practices for testing your applications. 

Does Algorand have a way of integrating with wallets both on and offline?

Algorand distinguishes between "participation keys", used to participate in the Algorand protocol, and "spending keys", used to transfer funds. Though participation keys must be kept online in order to propose blocks and vote on block proposals, spending keys can be kept offline or on an air-gapped machine.

How do I check the status of my node?

You can check the status of your node with goal node status. To view a detailed, color-coded log of events at each step of the protocol, use carpenter.

What types of nodes does Algorand have? Are there mining nodes?

In a proof-of-stake protocol no mining is required. Algorand nodes are classified as either relay nodes or participation nodes. Participation nodes process the protocol and manage accounts. Relay nodes route communications efficiently between participation nodes. In the future, this will change as more peer-to-peer functionality is added. Relay nodes can also technically manage accounts but for security purposes this is not recommended.

What do I do if my node is not processing blocks?

Generally you can check if your node is processing blocks by using the goal node status -d <data-dir> command described in the Goal guide. Additionally, you can use the carpenter command line tool as well to see if consensus is occurring. If you have established that the node is not processing blocks or has stalled, check to verify that node internet connection is functioning properly. Next check that the node sync time is at 0. If the node is connected and the main network is not stalled, run the update script described in the Introduction - Node Installation to verify that the node has been updated.

Can nodes be configured with specific options like using different port numbers?

Nodes have many configuration options, which are explained in Node Configuration Settings.

What do I do if the update script fails?

Review the update process in Introduction to Installing a Node. If running update.sh -d <data-dir> does not work, try forcing an update by deleting algod and running update.sh -i -c stable -d <data-dir>

How can I create an account on my node?

From within your node directory, run ./goal account new -d <data-dir>
More details on using goal to create accounts located here

What is the difference between an online or offline account?

The primary distinction between an online and offline account is that online accounts are eligible to participate in the consensus protocol (their stake is online) and offline accounts cannot. When calculating stake, Algorand only uses online account data. Both online and offline accounts can send and receive transactions.

How can I get block data using the API?

Use get /v1/block/{round} For example, if you would like to retrieve data for block 5000, run the following command within your node's data directory:

curl http://$(cat algod.net)/v1/block/5000 -H "X-Algo-API-Token: $(cat algod.token)"

Note that if you are not running an archival node, you may get a message like "failed to retrieve information from the ledger". This is because participation nodes are configured to only store the more recent blocks. Try to query a more recent block to view an example block structure. If you would like to be able to query any block, you can change the "archival" property in your node configuration settings to True. See Node Configuration Settings for more details, or read the "How do I change..." topic below.

How do I change my node into an Archival node so I have the full blockchain?

By default, only Relays are automatically configured to be Archival (and they cannot be changed). Non-relay nodes can opt-in as well by setting the Archival parameter to true in your <datadir>/config.json file. See Node Configuration Settings for more details. After changing the parameter to true, you need to shut down your node (goal node stop), then you need to delete the current ledger in order to sync with all of the earlier blocks that have already been removed from your node. To do this, find the latest ledger folder in your data directory (e.g. testnet-version), and delete the ledger.sqlite file contained therein.  You should also delete your crash.sqlite file, though this is generally not recommended. Then you can start your node and let it sync with the full blockchain.

How can I add tokens to my account for testing purposes?

If you are working with our TestNet you can use the Dispenser web app to add 1000 tokens at a time to your account. If you are using a private network, you can set the number of tokens each wallet has (as a percentage) by using a network template JSON file. See Creating a Private Network for more tips on working with private networks.

Why are my transactions not showing up when I use goal account balance?

If you confirmed that you successfully submitted a transaction (e.g. you have a transaction ID) then it is likely that your node has not fully synced with the rest of the network, and while your transactions may have been processed already they may not show up until syncing is complete. You can verify the block your node is processing using the goal node status command. If Sync Time has reached 0.0 and you are producing blocks, then your node is caught up.