# aeternity

## Aeternity node

[![CircleCI](https://circleci.com/gh/aeternity/aeternity.svg?style=shield)](https://circleci.com/gh/aeternity/aeternity)[![License](https://img.shields.io/badge/license-ISC-blue.svg)](https://github.com/aeternity/aeternity/blob/master/LICENSE)[![Build Tool](https://img.shields.io/badge/build%20tool-rebar3-orange.svg)](https://www.rebar3.org)

A new blockchain for æpps.

Optimized for scalability via smart contracts inside state-channels.

Has a built-in oracle for integration with real-world data.

Comes with a naming system, for developerability.

Written in Erlang.

To install and run the Aeternity node, see the instructions [below](#how-to-start) or just follow the progress of the project via GitHub Issues.

If you have discovered a bug or security vulnerability please get in touch. The Aeternity Crypto Foundation pays bug bounties up to 100.000 AE Tokens for critical vulnerabilities. Please get in touch via <security@aeternity-foundation.org>.

### Documentation

For an overview of the installation process for different platforms,\
building the package from source, configuration and operation of the Aeternity\
node please refer to [Aeternity node documentation](https://docs.aeternity.io/).

We keep our protocol, APIs and research spec in separate [protocol](https://github.com/aeternity/protocol)\
repository.

## How to start

We [publish packages](https://github.com/aeternity/aeternity/releases) for major platforms on GitHub.\
Each release comes with [release notes](https://github.com/aeternity/docs/blob/master/docs/release-notes/README.md) describing the\
changes of the Aeternity node in each particular version.

Please use the [latest published stable release](https://github.com/aeternity/aeternity/releases/latest) rather than the [`master` branch](https://github.com/aeternity/aeternity/tree/master).\
The `master` branch tracks the ongoing efforts towards the next stable release to be published though it is not guaranteed to be stable.

### Quick Install

**Linux / Mac**

By using the installer to install the latest stable version:

```bash
bash <(curl -s https://install.aeternity.io/install.sh)
```

See the documentation for [starting](https://docs.aeternity.io/en/stable/operation/#start-the-node) and [configuring](https://docs.aeternity.io/en/stable/configuration/#example) the node.

### Docker

Alternatively, you can run the node client as a docker container:

**Linux / Mac**

Or running a docker container (latest tag):

```bash
mkdir -p ~/.aeternity/maindb
docker pull aeternity/aeternity
docker run -p 3013:3013 -p 3015:3015 \
    -v ~/.aeternity/maindb:/home/aeternity/node/data/mnesia \
    aeternity/aeternity
```

**Windows**

```bash
mkdir %APPDATA%\aeternity\maindb
docker pull aeternity/aeternity
docker run -p 3013:3013 -p 3015:3015 -v %APPDATA%/aeternity/maindb:/home/aeternity/node/data/mnesia aeternity/aeternity
```

**Restore from snapshot**

To speed up the initial blockchain synchronization the node database can be restored from a snapshot following the below steps:

* delete the contents of the database if the node has been started already
* download the database snapshot
* verify if the snapshot checksum matches the downloaded file
* unarchive the database snapshot

**Note that the docker container must be stopped before replacing the database**

The following snippet can be used to replace the current database with the latest mainnet snapshot assuming the database path is `~/.aeternity/maindb`:

```bash
rm -rf ~/.aeternity/maindb/ && mkdir -p ~/.aeternity/maindb/
curl -o ~/.aeternity/mnesia_main_v-1_latest.tar.zst https://aeternity-database-backups.s3.eu-central-1.amazonaws.com/main_backup_v1_full_latest.tar.zst
CHECKSUM=$(curl https://aeternity-database-backups.s3.eu-central-1.amazonaws.com/main_backup_v1_full_latest.tar.zst.md5)
diff -qs <(echo $CHECKSUM) <(openssl md5 -r ~/.aeternity/mnesia_main_v-1_latest.tar.zst | awk '{ print $1; }')
test $? -eq 0 && tar --use-compress-program=unzstd -xf ~/.aeternity/mnesia_main_v-1_latest.tar.zst -C ~/.aeternity/maindb/
```

### Additional resources

* [Threat Model](https://github.com/aeternity/aetmodel/blob/master/ThreatModel.md)


---

# 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://docs.aeternity.com/developer-documentation/aeternity.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.
