Permissioned L1s Create an L1 Lesson 1 of 5

Subnet Creation

A quick review of creating a Subnet on Avalanche - the foundation for our permissioned L1

In the Avalanche Fundamentals course, you learned how to quickly set up an L1 using the Developer Console. This section provides an in depth review of that flow, understanding what comes pre-configured in our genesis, and laying the foundation for what we will need for our Permissioned L1.

Creating a Subnet

Let's create a fresh new Subnet that we can use during this course to test all of the tools and flows for managing Permissioned L1s.

Create Builder Account & Fund Wallet

Before creating your Subnet, we recommend setting up an Avalanche Builder Account for easier access to testnet resources.

Create Avalanche Builder Account

Benefits of a Builder Account:

  • Faucet: C-Chain and P-Chain Testnet AVAX directly sent to your account without needing to claim
  • Free Managed Testnet Infrastructure: Access free managed testnet nodes and ICM relayers for your L1
  • No Docker Required: Launch and manage nodes directly from the Builder Console without local setup

After creating your account:

  1. Download Core Wallet if not already installed
  2. Set Core to Testnet mode (upper-right toggle button)
  3. Visit the Builder Console to claim test AVAX on both C-Chain and P-Chain

Create Subnet and Blockchain Records

Create the Subnet by issuing two transactions on the P-Chain (hence the need for test AVAX on the P-chain).

These transactions are:

  1. CreateSubnetTx - Creates a Subnet identified by the transaction hash
  2. CreateChainTx - Adds a blockchain to the Subnet

For this guide, we will create our blockchain as an uncustomized EVM so you just need to rename it (if you want).

On Step 2: Create a Chain select the Genesis JSON tab to the right and skim through it. No need to understand it all but good to get familiar with it before the next section.

Interactive exercise
Builder Console

Checking requirements…

Key Parameters:

  • Subnet Owner: P-chain address of your connected wallet
  • Chain Name: Your blockchain's name
  • VM ID: Default value srEX...Dy when creating with an uncustomized VM
  • Genesis Data: Initial blockchain configuration

Set Up Validator Node

Launch a node to track your Subnet. This node will become a validator for your Subnet, and later will be managed by the Validator Manager contract when we convert to L1.

Use our free managed testnet infrastructure - no Docker installation or AWS account required:

Interactive exercise
Builder Console

Checking requirements…

Managing Your Nodes

After creating nodes, you can view and manage them at the Testnet Infrastructure Console.

Managed nodes automatically shut down after 3 days. For production or extended testing, see the self-hosted option below.

Production & Extended Testing Environments

For production environments or extended testing periods, you should use Docker to run your nodes.

Docker Setup Guide:

Interactive exercise
Builder Console

L1 Node Setup with Docker

Configure your node settings, select your L1, and run Docker to start your node.

  1. Configure Node Settings

    Choose your network, node type, and settings. The config preview updates as you go.

    Network

    Node type

    Log level · info is the default

    2000ms
    0ms (fastest)1000ms2000ms (default)

    Minimum time between blocks. Lower is faster blocks but more network load.

    Storage

    Removes old state data to cut disk usage. Savings depend on your L1's transaction volume. Recommended for validators and pruned RPC nodes.

    Bootstraps from a recent state snapshot instead of replaying every block from genesis. Recommended for faster initial sync.

    API

    Enables administrative APIs. Only enable if needed and secured.

    Configuration Preview

    Subnet-EVM config.json
    Configure your node to see the Subnet-EVM chain config

    Storage Requirements

    Mainnet · estimate
    Initial
    240GB
    Growth
    +12GB/mo
    After 1 yr
    384GB
    1.2TB0
    Now6mo1yr
    Your config
    Archival (1.2TB)
    Pruning ONState SyncTX Index
  2. Set up Instance

    Provision a server with these specs.

    CPU4 vCPU
    RAM8 GB
    Storage~200 GB Mainnet
    Open ports9651 P2P

    Port 9651 is P2P and 9650 is RPC. For a production L1, run 5+ validator nodes across regions. A single node is fine for local dev and quick demos.

  3. Docker Installation

    Make sure you have Docker installed on your system. You can use the following commands to install it:

    # Install Docker using convenience scriptcurl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.shsudo usermod -aG docker $USERnewgrp docker# Test installationdocker run -it --rm hello-world

    Not using Docker? Follow the manual installation instructions.

  4. Select L1

    Enter the Subnet ID of the L1 you want to run a node for.

    No L1 selected

    Enter a Subnet ID to generate the config files and Docker command.

Key Takeaways

  • P-Chain Registry: All validators and blockchains are registered on the P-Chain
  • Subnet Foundation: Your Subnet provides the blockchain infrastructure necessary for this course
  • Managed Infrastructure or Self-Hosted: Builder Hub provides free managed testnet nodes, eliminating the need for Docker or AWS setup - you can also choose to run it yourself.

Optional Alternative: Self-Hosted Infrastructure

The free managed testnet nodes are a great option for playing around with Avalanche L1s, but are not intended for running on production environments. They are shut down automatically after 3 days. If you want to test out your production environment, running beyond 3 days, or anything more complex you should run nodes on your own infrastructure using Docker:

Interactive exercise
Builder Console

L1 Node Setup with Docker

Configure your node settings, select your L1, and run Docker to start your node.

  1. Configure Node Settings

    Choose your network, node type, and settings. The config preview updates as you go.

    Network

    Node type

    Log level · info is the default

    2000ms
    0ms (fastest)1000ms2000ms (default)

    Minimum time between blocks. Lower is faster blocks but more network load.

    Storage

    Removes old state data to cut disk usage. Savings depend on your L1's transaction volume. Recommended for validators and pruned RPC nodes.

    Bootstraps from a recent state snapshot instead of replaying every block from genesis. Recommended for faster initial sync.

    API

    Enables administrative APIs. Only enable if needed and secured.

    Configuration Preview

    Subnet-EVM config.json
    Configure your node to see the Subnet-EVM chain config

    Storage Requirements

    Mainnet · estimate
    Initial
    240GB
    Growth
    +12GB/mo
    After 1 yr
    384GB
    1.2TB0
    Now6mo1yr
    Your config
    Archival (1.2TB)
    Pruning ONState SyncTX Index
  2. Set up Instance

    Provision a server with these specs.

    CPU4 vCPU
    RAM8 GB
    Storage~200 GB Mainnet
    Open ports9651 P2P

    Port 9651 is P2P and 9650 is RPC. For a production L1, run 5+ validator nodes across regions. A single node is fine for local dev and quick demos.

  3. Docker Installation

    Make sure you have Docker installed on your system. You can use the following commands to install it:

    # Install Docker using convenience scriptcurl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.shsudo usermod -aG docker $USERnewgrp docker# Test installationdocker run -it --rm hello-world

    Not using Docker? Follow the manual installation instructions.

  4. Select L1

    Enter the Subnet ID of the L1 you want to run a node for.

    No L1 selected

    Enter a Subnet ID to generate the config files and Docker command.

Is this guide helpful?