# Run a Node

### AarmaChain Node Functions <a href="#fullnodes-functions" id="fullnodes-functions"></a>

* Node stores the full blockchain history on disk and can answer the data request from the network.
* It also receives and validates the new blocks and transactions while also verifies the states of every account.

### Supported Platforms <a href="#supported-platforms" id="supported-platforms"></a>

**Mac OS X**, **Linux**, and **Windows**.

### Steps to Run a Fullnode <a href="#steps-to-run-a-fullnode" id="steps-to-run-a-fullnode"></a>

#### Sync From Snapshot (Recommended) <a href="#sync-from-snapshot-recommended" id="sync-from-snapshot-recommended"></a>

* Download the pre-build binaries from the AarmaChain repository or follow the instructions below

```
# Linux
wget   $(curl -s https://api.github.com/repos/aarmachain/aarma/releases/latest |grep browser_ |grep geth_linux |cut -d\" -f4)
mv geth_linux geth
chmod -v u+x geth

# MacOS
wget   $(curl -s https://api.github.com/repos/aarmachain/aarma/releases/latest |grep browser_ |grep geth_mac |cut -d\" -f4)
mv geth_mac geth
chmod -v u+x geth
```

* Download **genesis.json** and **config.toml** by:

```
# mainnet
wget   $(curl -s https://api.github.com/repos/aarmachain/aarma/releases/latest |grep browser_ |grep mainnet |cut -d\" -f4)
unzip mainnet.zip

# testnet
wget   $(curl -s https://api.github.com/repos/aarmachain/aarma/releases/latest |grep browser_ |grep testnet |cut -d\" -f4)
unzip testnet.zip
```

* **Download snapshot**

Download latest chaindata snapshot.&#x20;

Follow the guide to structure your files.

{% hint style="info" %}
NOTE

Your –datadir flag should point to the folder where the extracted snapshot data is. In our case, we created a new folder named `node`, and we moved the extracted snapshot data to other folder.
{% endhint %}

```
mv server/data-seed/geth/chaindata node/geth/chaindata
mv server/data-seed/geth/chaindata node/geth/triecache
```

1. **Start a node**

```
./geth --config ./config.toml --datadir ./node  --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0
```

Make sure you use the version of geth you downloaded with wget above, and not your local installation of geth, which might be the wrong version.

It will run with Hash-Base Storage Scheme by default

```
./geth --config ./config.toml --datadir ./node  --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none
```

It will run with Path-Base Storage Scheme and enable inline state prune, keeping the latest 90000 blocks’ history state by default.

```
./geth --config ./config.toml --datadir ./node  --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none --state.scheme path
```

2. **Monitor node status**

You can monitor the log from **./node/aarma.log** by default. When your node has started syncing, you should be able to see the following output:

```
t=2022-09-08T13:00:27+0000 lvl=info msg="Imported new chain segment"             blocks=1    txs=177   mgas=17.317   elapsed=31.131ms    mgasps=556.259  number=21,153,429 hash=0x42e6b54ba7106387f0650defc62c9ace3160b427702dab7bd1c5abb83a32d8db dirty="0.00 B"
t=2022-09-08T13:00:29+0000 lvl=info msg="Imported new chain segment"             blocks=1    txs=251   mgas=39.638   elapsed=68.827ms    mgasps=575.900  number=21,153,430 hash=0xa3397b273b31b013e43487689782f20c03f47525b4cd4107c1715af45a88796e dirty="0.00 B"
t=2022-09-08T13:00:33+0000 lvl=info msg="Imported new chain segment"             blocks=1    txs=197   mgas=19.364   elapsed=34.663ms    mgasps=558.632  number=21,153,431 hash=0x0c7872b698f28cb5c36a8a3e1e315b1d31bda6109b15467a9735a12380e2ad14 dirty="0.00 B"
```

#### Sync From Genesis Block (Not Recommended)[¶](https://docs.bnbchain.org/bnb-smart-chain/developers/node_operators/full_node/#sync-from-genesis-block-not-recommended) <a href="#sync-from-genesis-block-not-recommended" id="sync-from-genesis-block-not-recommended"></a>

It is recommended to use HBSS with level DB for archive node, PBSS for archive node is not supported yet. To sync from genesis block, you would need a more powerful hardware. Server should at least have 40k IOPS and be at least an i3/i3en series server.

If you can not download the chaindata snapshot and want to sync from genesis, then you have to generate the genesis block first, for which you have already downloaded the genesis.json in the Step - 2 above where you have downloaded config files.

* Write genesis state locally

```
## It will init genesis with Hash-Base Storage Scheme by default.
./geth --datadir ./node init ./genesis.json
```

* You could see the following output:

```
INFO [05-19|14:53:17.468] Allocated cache and file handles         database=/Users/huangsuyu/Downloads/bsc/node/geth/chaindata cache=16.00MiB handles=16
INFO [05-19|14:53:17.498] Writing custom genesis block
INFO [05-19|14:53:17.501] Persisted trie from memory database      nodes=21 size=56.84KiB time=357.915µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=-574.00B
INFO [05-19|14:53:17.502] Successfully wrote genesis state         database=chaindata hash=7d79cc…fb0d1e
INFO [05-19|14:53:17.503] Allocated cache and file handles         database=/Users/huangsuyu/Downloads/bsc/node/geth/lightchaindata cache=16.00MiB handles=16
INFO [05-19|14:53:17.524] Writing custom genesis block
INFO [05-19|14:53:17.525] Persisted trie from memory database      nodes=21 size=56.84KiB time=638.396µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=-574.00B
INFO [05-19|14:53:17.528] Successfully wrote genesis state         database=lightchaindata hash=7d79cc…fb0d1e
```

* Start fullnode

```
## start a full node
./geth --config ./config.toml --datadir ./node  --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0
```

### Sync Mode <a href="#sync-mode" id="sync-mode"></a>

There are two sync modes for running a full node: **snap** and **full** which can be specified by flag **–syncmode.** The **snap** sync mode is used for initial sync, which will download the latest states rather than execute the blocks from the genesis. When the initial sync is done, it will switch to full sync automatically.

The **full** sync mode can also be used to do initial sync, which will execute all the blocks since genesis. But it is **not recommended**, since the amount of historical data is too large. Instead, you can download a snapshot from the official repo and start full sync from the snapshot.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://aarmaproject.gitbook.io/aarmachain-documentation/guide/run-a-node.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
