Elixir full node implementation of the aeternity specification
This implementation aims to be a aims to be a full node that complies with the aeternity specification, in the current state this is not ready yet and should never be used to join the aeternity network.
This is an elixir full node implementation of the aeternity specification.
Compatibility to the erlang aeternity implementation is documented in docs/aeternity-erlang-compatibility.md.
Elixir 1.6 with Erlang/OTP20 is the basis of the project
Rust is needed for persistent storage dependency
libsodium 1.0.16 is needed for elliptic curve support
sudo apt-get install autoconf autogen libtool libgmp3-dev lsof
wget -O libsodium-src.tar.gz https://github.com/jedisct1/libsodium/releases/download/1.0.16/libsodium-1.0.16.tar.gz
mkdir libsodium-src && tar -zxf libsodium-src.tar.gz -C libsodium-src --strip-components=1
cd libsodium-src && ./configure && make && make check && sudo make install && cd ..
mix deps.get
Start the application in interactive Elixir
make iex-0
MIX_ENV=prod make iex-0
The default sync port is 3015, this can be adjusted using SYNC_PORT=some_port iex -S mix phx.server
.
The node will run an http api at localhost:4000
, this can be adjusted using PORT=some_port iex -S mix phx.server
.
Miner.resume()
to start the miner
Miner.suspend()
to stop the miner
Miner.mine_sync_block_to_chain()
mine the next block
Chain.top_block()
to get the top block of the current chain
Chain.top_block_chain_state()
to get the top block chainstate
Chain.chain_state(block_hash)
to get the chainstate of certain block
Pool.get_pool()
to get all transactions from the pool
Peers.all_peers()
to get all connected peers
Peers.try_connect(%{host: host, port: port, pubkey: pubkey})
to manually connect a new peer
Peers.get_info_try_connect(uri)
to connect to another elixir node, providing a get connection info interface
Run the testsuite with mix test
Debug, error, warning and info logs is found in apps/aecore/logs
A Dockerfile
and docker-compose.yml
are found in the base directory, prebuilt images are not yet published.
Build container docker build . -t elixir-node
Run node in container docker run --name elixir-node -it -p 4000:4000 -p 3015:3015 elixir-node
Run multiple nodes network with docker compose docker-compose up
runs 3 connected nodes, with 2 mining