Welcome to the Course
Master access control patterns using transaction and contract deployer allowlists with hands-on precompile implementation
Access Restriction
Access restriction is a core requirement for many real-world networks: you may need to control who can submit transactions and who can deploy contracts to meet operational, institutional, and compliance needs.
In Avalanche L1s, these controls are implemented as precompiles (go code wrapped in a solidity interface) that follow a shared, audited permission model: the AllowList interface.
Course Structure
This course is divided into two parts:
Part 1: Fundamentals
The first section covers the basics of access restriction precompiles:
- Introduction — What precompiles are, the AllowList permission model (Admin/Manager/Enabled), and real-world use cases
- Genesis Activation — Create an L1 with Transaction AllowList and Contract Deployer AllowList enabled from genesis, then test that permissions work as expected
Part 2: Advanced Topics
The second section dives deeper into precompile internals and recovery patterns:
- Precompile Flow (Optional) — Understand how Solidity calls route to Go code, and how the blockchain automatically enforces permissions even when you're not directly calling the precompile
- User Error — Intentionally lock yourself out by removing your admin privileges, then observe the resulting failures
- Network Upgrades — Learn how to deactivate and reactivate precompiles via
upgrade.jsonto recover from misconfigurations (requires a self-hosted Docker validator)
Part 1 uses a BuilderHub hosted node for quick setup. Part 2 (Advanced) requires running your own Docker validator to access configuration files for network upgrades.
Prerequisites
Before starting this course, we recommend completing:
- Customizing the EVM — especially the Precompiles section
- Comfort using Core Wallet, Docker, and reading a genesis JSON
Learning Outcomes
By the end of this course, you will be able to:
- Understand what precompiles are and leverage them to implement privileged network features
- Enable Transaction AllowList and Contract Deployer AllowList in genesis
- Activate and Deactivate precompiles via Network Upgrades
Is this guide helpful?
