# aggregator

Run a Task Aggregator node

#### Usage

```
otnode run aggregator [options] 
```

#### Examples

<pre><code><strong>otnode run aggregator \
</strong>  --json-rpc \
  --l1-chain holesky \
  --l2-chain amoy,base-sepolia \
  --internal-tasks \
  --metrics \
  --delay 1500
</code></pre>

#### Options

<mark style="color:blue;">**--json-rpc**</mark> `required`                                                                                                                                   &#x20;

**flag**

Enables the JSON-RPC API for the node. Disabled by default.

***

<mark style="color:blue;">**--json-rpc.port**</mark>  `optional`                                                                                                                  &#x20;

**number**

Port number for the JSON-RPC server (default: `8545`).

***

<mark style="color:blue;">**--json-rpc.custom-message-enabled**</mark> `optional`                                                                               &#x20;

**flag**

Enables custom message support via the p2p communication layer. Useful for advanced messaging scenarios.

***

<mark style="color:blue;">**--p2p.port**</mark> `optional`                                                                                                                      &#x20;

**number**

Port used for low-level peer-to-peer (p2p) communication.

***

<mark style="color:blue;">**--p2p.datadir**</mark> `optional`                                                                                                                    &#x20;

**file  path**

Path to the directory for persistent p2p data storage. If the directory doesn't exist, it will be created automatically using LevelDatastore.

***

<mark style="color:blue;">**--p2p.discovery-interval**</mark> `optional`**.**                                                                                &#x20;

**number (in ms)**\
Time interval for the p2p discovery mechanism, specified in milliseconds.

***

<mark style="color:blue;">**--internal-tasks**</mark> `optional`                                                                                                                        &#x20;

**flag**\
Enables internal tasks on the node, usually related to maintenance or operations.

***

<mark style="color:blue;">**--metrics**</mark> `optional`                                                                                                                                      &#x20;

**flag**

Enables the metrics exporter for the node. Disabled by default.

***

<mark style="color:blue;">**--metrics.port**</mark> `optional`                                                                                                                     &#x20;

**number**

Port number for the metrics HTTP server.

***

<mark style="color:blue;">**--metrics.export-url**</mark> `optional`                                                                                                                    &#x20;

**url**

URL to export metrics to Prometheus Pushgateway for external monitoring.

***

<mark style="color:blue;">**--aggregator.simulate-transactions**</mark> `optional`                                                                         &#x20;

**boolean**

Enables transaction simulation before submitting by the aggregator (default: `false`).

***

<mark style="color:blue;">**--delay**</mark> `optional`                                                                                                                   &#x20;

&#x20;**number (in ms)**

This flag enables you to specify an additional waiting period after achieving 2/3 of the voting power, allowing more attestations to arrive before submitting the transaction. The aggregator will wait for the specified delay before submitting the transaction on-chain. (default: `0`).

{% hint style="info" %}
When operating multiple **Aggregator nodes**, transaction simulation and delayed submission help mitigate race conditions. If two aggregators submit the same task, the first transaction accepted on-chain will succeed, while the second will fail.&#x20;
{% endhint %}

***

<mark style="color:blue;">**--announced-addresses**</mark> `optional`                                                                                                     &#x20;

<mark style="color:blue;">**--p2p.public-ip**</mark> `optional`&#x20;

**string**

Public-facing IP address of the node.

Used to automatically construct the announced libp2p multiaddress as `/ip4/<public-ip>/tcp/<port>/p2p/<PeerID>`. This is useful when the node is behind NAT or a firewall, and its actual reachable IP needs to be explicitly advertised.

If this flag is not provided, the node will attempt to auto-detect the public IP.

```bash
othentic-cli node attester --p2p.public-ip 203.0.113.1
```

***

<mark style="color:blue;">**--p2p.dns-url**</mark> `optional`&#x20;

**string**

{% hint style="success" %}
Use `--p2p.public-ip` and `--p2p.dns-url` together to automatically generate announced addresses for your node.&#x20;
{% endhint %}

DNS address that resolves to the public IP of the node.

Used to generate an additional announced libp2p address in the format `/dnsaddr/<dns-url>/tcp/<port>/p2p/<PeerID>`. This is useful when nodes are hosted behind a domain name or behind a load balancer.

If this flag is not provided, no DNS-based address will be added.

```bash
othentic-cli node attester --p2p.dns-url attester.example.com
```

***

<mark style="color:blue;">**--announced-addresses**</mark> `optional`                                                                                                     &#x20;

**string**

Addresses the node will announce to the network (useful for NAT or firewall configurations).

***

<mark style="color:blue;">**--slashing-challenger**</mark> `optional`                                                                                                                        &#x20;

**flag**

Enable [Challenger system](https://docs.othentic.xyz/main/learn/core-concepts/slashing-and-ejection/modules#challenger-system) watchdog and automatically submit challenge transactions for slashable offenses

***

<mark style="color:blue;">**--keystore**</mark> `optional`                                                                                                                        &#x20;

**file path**

The path to the keystore file used for signing the transaction.

***

<mark style="color:blue;">**--keystore-password**</mark> `optional`                                                                                                    &#x20;

**file path**

The path to the file containing the keystore password.

***

<mark style="color:blue;">**--l1-gas-multiplier**</mark> `optional`                                                                                                    &#x20;

**string**

The gas multiplier for L1 transactions. Use values greater than `1` to add buffer. Example: `1.2`

***

<mark style="color:blue;">**--l2-gas-multiplier**</mark> `optional`            &#x20;

**string**

The gas multiplier for L2 transactions. Use values greater than `1` to add buffer. Example: `1.2`
