L1 Creation
Create an L1 with Transaction and Contract Deployer Precompiles enabled(using self-hosted node)
Objectives
By the end of this exercise, you will be able to:
- Create an Avalanche L1 record in Builder Console with a custom genesis
- Enable Transaction AllowList and Contract Deployer AllowList at genesis
- Run a self-hosted node via Docker and connect Core Wallet to your L1
Prerequisites
Before starting this exercise, ensure you have:
- BuilderHub account (create one if needed)
- Core Wallet installed and set to the correct network mode
- Docker installed and running locally
- A funded wallet (testnet AVAX) to create the Subnet + Chain transactions - get tokens from the Console Faucet
Instructions
Step 1: Create the Subnet + Chain in Console
Use Builder Console to create the Subnet and then create your chain. You’ll edit the Genesis JSON before finalizing.
Checking requirements...
In Step 2: Create a Chain, open the Genesis JSON tab and add the two allowlist configs under config:
{
"config": {
"txAllowListConfig": {
"blockTimestamp": 0,
"adminAddresses": ["0x...YOUR_WALLET_EVM_ADDRESS"]
},
"contractDeployerAllowListConfig": {
"blockTimestamp": 0,
"adminAddresses": ["0x...YOUR_WALLET_EVM_ADDRESS"]
}
}
}If you enable these allowlists but do not include your own wallet as an admin at genesis, you can immediately lock yourself out of the network.
Step 2: Run a self-hosted node (Docker)
This course does not use BuilderHub-managed nodes. Run your node locally with Docker so you control startup flags and can restart easily during troubleshooting.
L1 Node Setup with Docker
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# Install Dockersudo yum update -ysudo yum install -y dockersudo systemctl start dockersudo systemctl enable dockersudo usermod -aG docker $USERnewgrp docker# Test installationdocker run -it --rm hello-world# 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# Install Docker Desktop for Mac# Download from: https://www.docker.com/products/docker-desktop/echo "Please download and install Docker Desktop for Mac from the official Docker website."# After installation, you can test it by running:docker run -it --rm hello-worldIf you do not want to use Docker, you can follow the instructions here.
Select L1
Enter the Avalanche Subnet ID of the L1 you want to run a node for
Step 3: Connect Core Wallet and verify precompiles are active
Once your node is running and you’ve added the network to Core Wallet:
- Try sending a simple transaction (it should succeed for your admin wallet)
- Confirm the precompiles are reachable at:
- Transaction AllowList:
0x0200000000000000000000000000000000000002 - Contract Deployer AllowList:
0x0200000000000000000000000000000000000000
- Transaction AllowList:
Expected Output
You should have:
- A running L1 node (Docker)
- Core Wallet connected to your L1
- Both allowlist precompiles enabled from genesis
Verification
To verify you've completed this exercise successfully:
- Your wallet can send a transaction on the L1
- You can open the allowlist consoles in the next section and view your role as Admin
Troubleshooting
I can’t send transactions after enabling the allowlist
- Ensure your wallet address is included in
txAllowListConfig.adminAddressesat genesis.
I can’t deploy contracts after enabling the deployer allowlist
- Ensure your wallet address is included in
contractDeployerAllowListConfig.adminAddressesat genesis.
Next Steps
Next, we’ll start interacting with these precompiles and then intentionally break permissions to learn recovery patterns.
Is this guide helpful?