# attester

Run a Task Attester node

#### Usage

```
otnode run attester [options] <bootnodes>

Arguments:
  bootnodes                               (required) The multiaddr of the bootnodes you would like to connect to
```

#### Examples

{% tabs %}
{% tab title="Single Aggregator" %}

```bash
otnode run attester \
    /ip4/127.0.0.1/tcp/9876/p2p/<BOOTSTRAP_NODE_ID> \
    --avs-webapi http://10.8.0.42 \
    --avs-webapi-port <PORT> \
    --l1-chain holesky \
    --l2-chain amoy
```

{% endtab %}

{% tab title="Multiple Aggregators" %}

```
command: [
    "run",
    "attester",
    "/ip4/{Aggregator_IP1}/tcp/9876/p2p/${OTHENTIC_BOOTSTRAP_ID}, 
    /ip4/{Aggregator_IP2}/tcp/9876/p2p/${OTHENTIC_BOOTSTRAP_ID},
    /ip4/{Aggregator_IP3}/tcp/9876/p2p/${OTHENTIC_BOOTSTRAP_ID}",
    --avs-webapi <HOST>,
    --l1-chain holesky,
    --l2-chain amoy,base-sepolia,
]
```

{% endtab %}
{% endtabs %}

`BOOTSTRAP_NODE_ID` can be saved in the **.env** file as per the Bootstrap node configuration.

#### **Options**

<mark style="color:blue;">**--avs-webapi**</mark> `required`

**url**

Specifies the URL of the HTTP server used for the AVS Web API.

***

<mark style="color:blue;">**--avs-webapi-port**</mark>  `required`&#x20;

**port**

Defines the port on which the AVS Web API HTTP server will run.

***

<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;">**--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;">**--status-check-interval**</mark> `optional`                                                                                         &#x20;

**milliseconds**

Interval for checking operator status (default: `5000` ms).

A throttling mechanism has been added to operator status checks to reduce idle RPC usage. Configure this using the optional `--status-check-interval <interval>` flag, with a default of 5000 milliseconds.

```
otnode run attester --status-check-interval 8000
```

***

<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**\
Comma-separated addresses the node should announce to the network (useful for NAT/firewall setups).

The `announce` option in libp2p allows nodes to explicitly define which addresses they advertise to peers, **overriding** any automatically detected addresses. This is particularly useful when running behind a **load balancer or NAT**, where the external address needs to be manually set. To enable this option in our CLI, users should start their nodes with the `--announced-addresses <multi-address>` flag, specifying the desired multiaddr. This ensures that peers connect using the correct external address rather than any internally detected ones.

```
otnode run attester --announced-addresses /dnsaddr/{dns-name}/tcp/{port1}/p2p/{Peer ID},/ip4/{resolved dns ip}/tcp/{port1}/p2p/{Peer ID}
```

***

<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.
