avalanchego

module
v1.15.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 8, 2026 License: BSD-3-Clause

README


Node implementation for the Avalanche network - a blockchains platform with high throughput, and blazing fast transactions.

Installation

Avalanche is an incredibly lightweight protocol, so the minimum computer requirements are quite modest. Note that as network usage increases, hardware requirements may change.

The minimum recommended hardware specification for nodes connected to Mainnet is:

  • CPU: Equivalent of 8 AWS vCPU
  • RAM: 16 GiB
  • Storage: 1 TiB
    • Nodes running for very long periods of time or nodes with custom configurations may observe higher storage requirements.
  • OS: Ubuntu 22.04/24.04 or macOS >= 12
  • Network: Reliable IPv4 or IPv6 network connection, with an open public port.

If you plan to build AvalancheGo from source, you will also need the following software:

  • Go version >= 1.25.10
  • gcc
  • g++

Building From Source

Clone The Repository

Clone the AvalancheGo repository:

git clone git@github.com:ava-labs/avalanchego.git
cd avalanchego

This will clone and checkout the master branch.

Building AvalancheGo

Build AvalancheGo by running the build task:

./scripts/run_task.sh build

The avalanchego binary is now in the build directory. To run:

./build/avalanchego

Binary Repository

Install AvalancheGo using an apt repository.

Adding the APT Repository

If you already have the APT repository added, you do not need to add it again.

To add the repository on Ubuntu, run:

sudo su -
wget -qO - https://downloads.avax.network/avalanchego.gpg.key | tee /etc/apt/trusted.gpg.d/avalanchego.asc
source /etc/os-release && echo "deb https://downloads.avax.network/apt $UBUNTU_CODENAME main" > /etc/apt/sources.list.d/avalanche.list
exit
Installing the Latest Version

After adding the APT repository, install avalanchego by running:

sudo apt update
sudo apt install avalanchego

Binary Install

Download the latest build for your operating system and architecture.

The Avalanche binary to be executed is named avalanchego.

Docker Install

Make sure Docker is installed on the machine - so commands like docker run etc. are available.

Building the Docker image of latest avalanchego branch can be done by running:

./scripts/run_task.sh build-image

To check the built image, run:

docker image ls

The image should be tagged as avaplatform/avalanchego:xxxxxxxx, where xxxxxxxx is the shortened commit of the Avalanche source it was built from. To run the Avalanche node, run:

docker run -ti -p 9650:9650 -p 9651:9651 avaplatform/avalanchego:xxxxxxxx /avalanchego/build/avalanchego

Running Avalanche

Connecting to Mainnet

To connect to the Avalanche Mainnet, run:

./build/avalanchego

You should see some pretty ASCII art and log messages.

You can use Ctrl+C to kill the node.

Connecting to Fuji

To connect to the Fuji Testnet, run:

./build/avalanchego --network-id=fuji

Creating a Local Testnet

The avalanche-cli is the easiest way to start a local network.

avalanche network start
avalanche network status

Bootstrapping

A node needs to catch up to the latest network state before it can participate in consensus and serve API calls. This process (called bootstrapping) currently takes several days for a new node connected to Mainnet.

A node will not report healthy until it is done bootstrapping.

Improvements that reduce the amount of time it takes to bootstrap are under development.

The bottleneck during bootstrapping is typically database IO. Using a more powerful CPU or increasing the database IOPS on the computer running a node will decrease the amount of time bootstrapping takes.

Generating Code

AvalancheGo uses multiple tools to generate efficient and boilerplate code.

Running protobuf codegen

To regenerate the protobuf go code, run scripts/run_task.sh generate-protobuf from the root of the repo.

This should only be necessary when upgrading protobuf versions or modifying .proto definition files.

To use this script, you must have buf (v1.31.0), protoc-gen-go (v1.33.0) and protoc-gen-go-grpc (v1.3.0) installed.

To install the buf dependencies:

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.33.0
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0

If you have not already, you may need to add $GOPATH/bin to your $PATH:

export PATH="$PATH:$(go env GOPATH)/bin"

If you extract buf to ~/software/buf/bin, the following should work:

export PATH=$PATH:~/software/buf/bin/:~/go/bin
go get google.golang.org/protobuf/cmd/protoc-gen-go
go get google.golang.org/protobuf/cmd/protoc-gen-go-grpc
scripts/run_task.sh generate-protobuf

For more information, refer to the GRPC Golang Quick Start Guide.

Running mock codegen

See the Contributing document autogenerated mocks section.

Documentation

In-repo documentation conventions are described in docs/documentation-guidelines.md. New feature documentation, package-level docs, and maintainer-oriented context should follow that guide.

Versioning

Version Semantics

AvalancheGo is first and foremost a client for the Avalanche network. The versioning of AvalancheGo follows that of the Avalanche network.

  • v0.x.x indicates a development network version.
  • v1.x.x indicates a production network version.
  • vx.[Upgrade].x indicates the number of network upgrades that have occurred.
  • vx.x.[Patch] indicates the number of client upgrades that have occurred since the last network upgrade.

Library Compatibility Guarantees

Because AvalancheGo's version denotes the network version, it is expected that interfaces exported by AvalancheGo's packages may change in Patch version updates.

AvalancheGo is organized as multiple Go modules that must be consumed together at matching versions. For guidance on depending on these modules in your Go projects, see Depending on AvalancheGo Modules.

API Compatibility Guarantees

APIs exposed when running AvalancheGo will maintain backwards compatibility, unless the functionality is explicitly deprecated and announced when removed.

Supported Platforms

AvalancheGo can run on different platforms, with different support tiers:

  • Tier 1: Fully supported by the maintainers, guaranteed to pass all tests including e2e and stress tests.
  • Tier 2: Passes all unit and integration tests but not necessarily e2e tests.
  • Tier 3: Builds but lightly tested (or not), considered experimental.
  • Not supported: May not build and not tested, considered unsafe. To be supported in the future.

The following table lists currently supported platforms and their corresponding AvalancheGo support tiers:

Architecture Operating system Support tier
amd64 Linux 1
arm64 Linux 1
arm64 Darwin 2
amd64 Darwin Not supported
amd64 Windows Not supported
arm Linux Not supported
i386 Linux Not supported

To officially support a new platform, one must satisfy the following requirements:

AvalancheGo continuous integration Tier 1 Tier 2 Tier 3
Build passes
Unit and integration tests pass
End-to-end and stress tests pass

Security Bugs

We and our community welcome responsible disclosures.

Please refer to our Security Policy and Security Advisories.

Licenses

Unless otherwise stated, all code in this repository is licensed under BSD-3. See our licensing for more details. Specifically, grafted repositories may use a different license, and one must refer to that project's README and LICENSE for more details

Directories

Path Synopsis
api
lru
atomic/atomicmock
Package atomicmock is a generated GoMock package.
Package atomicmock is a generated GoMock package.
codecmock
Package codecmock is a generated GoMock package.
Package codecmock is a generated GoMock package.
codectest
Package codectest provides a test suite for testing codec implementations.
Package codectest provides a test suite for testing codec implementations.
connectproto
databasemock
Package databasemock is a generated GoMock package.
Package databasemock is a generated GoMock package.
merkle/sync
Package sync syncs a merkle trie over the p2p network: a Syncer (client) requests range and change proofs that a ProofHandler (server) generates.
Package sync syncs a merkle trie over the p2p network: a Syncer (client) requests range and change proofs that a ProofHandler (server) generates.
graft
coreth module
evm module
subnet-evm module
ids
idstest
Package codectest provides a test suite for testing functionality related to IDs.
Package codectest provides a test suite for testing functionality related to IDs.
messagemock
Package messagemock is a generated GoMock package.
Package messagemock is a generated GoMock package.
p2p
proto
consensus/snowman/snowmanmock
Package snowmanmock is a generated GoMock package.
Package snowmanmock is a generated GoMock package.
engine/avalanche/state
Package state manages the meta-data required by consensus for an avalanche dag.
Package state manages the meta-data required by consensus for an avalanche dag.
engine/avalanche/vertex/vertexmock
Package vertexmock is a generated GoMock package.
Package vertexmock is a generated GoMock package.
engine/common/commonmock
Package commonmock is a generated GoMock package.
Package commonmock is a generated GoMock package.
engine/snowman/block/blockmock
Package blockmock is a generated GoMock package.
Package blockmock is a generated GoMock package.
engine/snowman/job
Package job provides a Scheduler to manage and execute Jobs with dependencies.
Package job provides a Scheduler to manage and execute Jobs with dependencies.
networking/handler/handlermock
Package handlermock is a generated GoMock package.
Package handlermock is a generated GoMock package.
networking/sender/sendermock
Package sendermock is a generated GoMock package.
Package sendermock is a generated GoMock package.
networking/tracker/trackermock
Package trackermock is a generated GoMock package.
Package trackermock is a generated GoMock package.
uptime/uptimemock
Package uptimemock is a generated GoMock package.
Package uptimemock is a generated GoMock package.
validators/validatorsmock
Package validatorsmock is a generated GoMock package.
Package validatorsmock is a generated GoMock package.
e2e
e2e/banff
Implements tests for the banff network upgrade.
Implements tests for the banff network upgrade.
e2e/x/transfer
Implements X-chain transfer tests.
Implements X-chain transfer tests.
load/main command
reexecute/c command
reexecute/chaos command
tools module
bag
filesystem/filesystemmock
Package filesystemmock is a generated GoMock package.
Package filesystemmock is a generated GoMock package.
hashing/hashingmock
Package hashingmock is a generated GoMock package.
Package hashingmock is a generated GoMock package.
ips
logging/loggingtest
Package loggingtest provides logging.Logger implementations for use in tests.
Package loggingtest provides logging.Logger implementations for use in tests.
math/intmath
Package intmath provides special-case integer arithmetic.
Package intmath provides special-case integer arithmetic.
resource/resourcemock
Package resourcemock is a generated GoMock package.
Package resourcemock is a generated GoMock package.
rpc
set
unwind
Package unwind provides a mechanism for dismantling objects that are constructed in stages should there be a failure partway through.
Package unwind provides a mechanism for dismantling objects that are constructed in stages should there be a failure partway through.
vms
avm
avm/block
Package block is a generated GoMock package.
Package block is a generated GoMock package.
avm/block/executor/executormock
Package executormock is a generated GoMock package.
Package executormock is a generated GoMock package.
avm/metrics/metricsmock
Package metricsmock is a generated GoMock package.
Package metricsmock is a generated GoMock package.
avm/state/statemock
Package statemock is a generated GoMock package.
Package statemock is a generated GoMock package.
avm/txs/txsmock
Package txsmock is a generated GoMock package.
Package txsmock is a generated GoMock package.
components/avax/avaxmock
Package avaxmock is a generated GoMock package.
Package avaxmock is a generated GoMock package.
components/gas
The gas package implements dynamic gas pricing specified in ACP-103: https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/103-dynamic-fees
The gas package implements dynamic gas pricing specified in ACP-103: https://github.com/avalanche-foundation/ACPs/tree/main/ACPs/103-dynamic-fees
components/verify/verifymock
Package verifymock is a generated GoMock package.
Package verifymock is a generated GoMock package.
evm/acp176
ACP176 implements the fee logic specified here: https://github.com/avalanche-foundation/ACPs/blob/main/ACPs/176-dynamic-evm-gas-limit-and-price-discovery-updates/README.md
ACP176 implements the fee logic specified here: https://github.com/avalanche-foundation/ACPs/blob/main/ACPs/176-dynamic-evm-gas-limit-and-price-discovery-updates/README.md
evm/acp226
ACP-226 implements the dynamic minimum block delay mechanism specified here: https://github.com/avalanche-foundation/ACPs/blob/main/ACPs/226-dynamic-minimum-block-times/README.md
ACP-226 implements the dynamic minimum block delay mechanism specified here: https://github.com/avalanche-foundation/ACPs/blob/main/ACPs/226-dynamic-minimum-block-times/README.md
evm/emulate
Package emulate provides temporary emulation of coreth (C-Chain) and subnet-evm (EVM L1) behaviours.
Package emulate provides temporary emulation of coreth (C-Chain) and subnet-evm (EVM L1) behaviours.
fx
platformvm/block
Package block is a generated GoMock package.
Package block is a generated GoMock package.
platformvm/block/executor/executormock
Package executormock is a generated GoMock package.
Package executormock is a generated GoMock package.
platformvm/fx/fxmock
Package fxmock is a generated GoMock package.
Package fxmock is a generated GoMock package.
platformvm/signer/signermock
Package signermock is a generated GoMock package.
Package signermock is a generated GoMock package.
platformvm/txs/fee
TODO: Before Etna, address all TODOs in this package and ensure ACP-103 compliance.
TODO: Before Etna, address all TODOs in this package and ensure ACP-103 compliance.
platformvm/utxo/utxomock
Package utxomock is a generated GoMock package.
Package utxomock is a generated GoMock package.
proposervm/acp181
ACP181 implements the epoch logic specified here: https://github.com/avalanche-foundation/ACPs/blob/main/ACPs/181-p-chain-epoched-views/README.md
ACP181 implements the epoch logic specified here: https://github.com/avalanche-foundation/ACPs/blob/main/ACPs/181-p-chain-epoched-views/README.md
proposervm/proposer/proposermock
Package proposermock is a generated GoMock package.
Package proposermock is a generated GoMock package.
registry/registrymock
Package registrymock is a generated GoMock package.
Package registrymock is a generated GoMock package.
saevm/adaptor
Package adaptor provides a generic alternative to the Snowman block.ChainVM interface, which doesn't require the block to be aware of the VM implementation.
Package adaptor provides a generic alternative to the Snowman block.ChainVM interface, which doesn't require the block to be aware of the VM implementation.
saevm/blocks
Package blocks defines [Streaming Asynchronous Execution] (SAE) blocks.
Package blocks defines [Streaming Asynchronous Execution] (SAE) blocks.
saevm/blocks/blockstest
Package blockstest provides test helpers for constructing [Streaming Asynchronous Execution] (SAE) blocks.
Package blockstest provides test helpers for constructing [Streaming Asynchronous Execution] (SAE) blocks.
saevm/cchain
Package cchain implements the C-Chain VM atop sae.VM.
Package cchain implements the C-Chain VM atop sae.VM.
saevm/cchain/cchaintest
Package cchaintest provides shared helpers for constructing C-Chain blocks in tests.
Package cchaintest provides shared helpers for constructing C-Chain blocks in tests.
saevm/cchain/dynamic
Package dynamic implements the exponential integrators used to ramp C-Chain consensus parameters smoothly between blocks.
Package dynamic implements the exponential integrators used to ramp C-Chain consensus parameters smoothly between blocks.
saevm/cchain/state
Package state manages the on-disk state for the C-Chain's cross-chain transactions.
Package state manages the on-disk state for the C-Chain's cross-chain transactions.
saevm/cchain/statesync
Package statesync wraps the functionality in statesync with the C-Chain specific state.
Package statesync wraps the functionality in statesync with the C-Chain specific state.
saevm/cchain/synchronoustest
Package synchronoustest provides a deterministic, pre-generated C-Chain history crossing every pre-SAE network upgrade, for tests that need realistic synchronous blocks.
Package synchronoustest provides a deterministic, pre-generated C-Chain history crossing every pre-SAE network upgrade, for tests that need realistic synchronous blocks.
saevm/cchain/tx
Package tx defines the Avalanche-specific transaction types used on the C-Chain to interact with the shared memory between the C-Chain and other chains on the Primary Network.
Package tx defines the Avalanche-specific transaction types used on the C-Chain to interact with the shared memory between the C-Chain and other chains on the Primary Network.
saevm/cchain/tx/txtest
Package txtest provides test helpers for using tx.Tx.
Package txtest provides test helpers for using tx.Tx.
saevm/cchain/txpool
Package txpool implements an in-memory pool of cross-chain transactions awaiting inclusion in a block.
Package txpool implements an in-memory pool of cross-chain transactions awaiting inclusion in a block.
saevm/cchain/warp
Package warp handles the parsing, verification, and storage of Avalanche Warp Messages.
Package warp handles the parsing, verification, and storage of Avalanche Warp Messages.
saevm/cchain/warp/warptest
Package warptest provides BLS warp validator sets for tests that need to produce signed warp messages.
Package warptest provides BLS warp validator sets for tests that need to produce signed warp messages.
saevm/cmputils
Package cmputils provides cmp options and utilities for their creation.
Package cmputils provides cmp options and utilities for their creation.
saevm/firewood
Package firewood implements a single-tier trie for the EVM in a database with built-in merkleization.
Package firewood implements a single-tier trie for the EVM in a database with built-in merkleization.
saevm/gasprice
Package gasprice provides gas price statistics and suggestions for timely transaction inclusion.
Package gasprice provides gas price statistics and suggestions for timely transaction inclusion.
saevm/gastime
Package gastime measures time based on the consumption of gas.
Package gastime measures time based on the consumption of gas.
saevm/hook
Package hook defines points in an SAE block's lifecycle at which common or user-injected behaviour needs to be performed.
Package hook defines points in an SAE block's lifecycle at which common or user-injected behaviour needs to be performed.
saevm/hook/hookstest
Package hookstest provides a test double for SAE's hook package.
Package hookstest provides a test double for SAE's hook package.
saevm/network
Package network provides the P2P network for the SAE VM.
Package network provides the P2P network for the SAE VM.
saevm/params
Package params declares [Streaming Asynchronous Execution] (SAE) parameters.
Package params declares [Streaming Asynchronous Execution] (SAE) parameters.
saevm/proxytime
Package proxytime measures the passage of time based on a proxy unit and associated unit rate.
Package proxytime measures the passage of time based on a proxy unit and associated unit rate.
saevm/sae
Package sae implements the [Streaming Asynchronous Execution] (SAE) virtual machine to be compatible with Avalanche consensus.
Package sae implements the [Streaming Asynchronous Execution] (SAE) virtual machine to be compatible with Avalanche consensus.
saevm/sae/rpc
Package rpc converts an SAE VM into forms suitable for backing ethapi, tracers, and filters packages, and for providing other rpc namespaces (e.g.
Package rpc converts an SAE VM into forms suitable for backing ethapi, tracers, and filters packages, and for providing other rpc namespaces (e.g.
saevm/saedb
Package saedb provides functionality related to storage and access of [Streaming Asynchronous Execution] data.
Package saedb provides functionality related to storage and access of [Streaming Asynchronous Execution] data.
saevm/saetest
Package saetest provides testing helpers for [Streaming Asynchronous Execution] (SAE).
Package saetest provides testing helpers for [Streaming Asynchronous Execution] (SAE).
saevm/saetest/escrow
Package escrow provides bytecode and helpers for the [Escrow.sol] contract deployed to 0xf92186Fc58dA366431e98f3Ddd563d0A3cdf4f59 on Ethereum mainnet.
Package escrow provides bytecode and helpers for the [Escrow.sol] contract deployed to 0xf92186Fc58dA366431e98f3Ddd563d0A3cdf4f59 on Ethereum mainnet.
saevm/saetest/paralleltest
Package paralleltest provides a test harness for parallel precompiles executing under SAE.
Package paralleltest provides a test harness for parallel precompiles executing under SAE.
saevm/saexec
Package saexec provides the execution module of [Streaming Asynchronous Execution] (SAE).
Package saexec provides the execution module of [Streaming Asynchronous Execution] (SAE).
saevm/statesync
Package statesync provides all functionality required for an adaptor.SyncableVM and the consensus-critical block getters.
Package statesync provides all functionality required for an adaptor.SyncableVM and the consensus-critical block getters.
saevm/txgossip
Package txgossip provides a mempool for [Streaming Asynchronous Execution], which is also compatible with AvalancheGo's gossip mechanism.
Package txgossip provides a mempool for [Streaming Asynchronous Execution], which is also compatible with AvalancheGo's gossip mechanism.
saevm/txgossip/txgossiptest
Package txgossiptest provides test helpers for mempool operations.
Package txgossiptest provides test helpers for mempool operations.
saevm/types
Package types defines common types that are used throughout the SAE repository which otherwise do not have a clear package to originate from.
Package types defines common types that are used throughout the SAE repository which otherwise do not have a clear package to originate from.
saevm/worstcase
Package worstcase provides the worst-case balance and nonce tracking needed to safely include transactions that are guaranteed to be valid during execution.
Package worstcase provides the worst-case balance and nonce tracking needed to safely include transactions that are guaranteed to be valid during execution.
transitionvm
Package transitionvm implements a smblock.ChainVM that switches from one chain to another at a configured time.
Package transitionvm implements a smblock.ChainVM that switches from one chain to another at a configured time.
vmsmock
Package vmsmock is a generated GoMock package.
Package vmsmock is a generated GoMock package.
wallet
x

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL