Why vertical L3 chains need boilerplates
The blockchain scaling narrative has shifted. In 2026, the focus has moved from generic Layer 2 aggregators to specialized vertical L3 appchains. Builders no longer need to compromise on execution environment or data availability; they need sovereign rollups that settle on Layer 2 while offering full control over their application logic StarkWare.
However, building a sovereign rollup from scratch involves complex infrastructure: sequencer nodes, prover networks, data availability layers, and bridge contracts. This complexity creates a high barrier to entry, slowing down iteration and innovation. Without standardized tools, developers spend weeks configuring infrastructure rather than building product features.
Boilerplates solve this friction. They provide a pre-configured, production-ready foundation for L3 appchains, allowing teams to spin up a fully functional testnet quickly. This speed is critical for DevRel and rapid prototyping, enabling builders to validate their economic models and user flows before committing to mainnet deployment.
Using a boilerplate isn't just about convenience; it's about standardization. It ensures that your rollup adheres to best practices for security, data availability, and settlement from day one. This allows your team to focus on the unique value proposition of your application rather than reinventing the wheel for every new project.
Spin up a sovereign rollup locally
The L3 appchain boilerplate is designed for speed. It removes the friction of configuring rollup nodes, sequencers, and settlement layers from scratch. You can stand up a fully functional sovereign rollup on your localhost in under five minutes.
This setup provides a local development environment that mirrors mainnet behavior. It allows you to test smart contracts, verify gas costs, and debug transaction flows without spending real capital or waiting for block confirmations on public networks.
Follow the sequence below to clone the repository, install dependencies, and initialize your local chain.
Configure the L2 settlement layer
Your L3 appchain needs a foundation to post data and settle state. This section walks you through connecting your L3 to its underlying Layer 2. We use the Spire L3 boilerplate as our reference implementation because it handles the heavy lifting of RPC configuration and chain ID mapping.
The goal is to ensure your L3 can read L2 blocks synchronously. This real-time data availability is what distinguishes a based L3 from a simple sidechain. If this connection fails, your L3 will be unable to finalize transactions or prove state roots to the Layer 2.
1. Select your L2 provider
Open the config.ts file in your boilerplate directory. Locate the l2Provider section. You will need to input your L2 RPC endpoint. For local development, this is usually http://localhost:8545. For mainnet or testnet deployments, use a reliable provider like Alchemy, Infura, or Ankr.
// config.ts
export const l2Config = {
rpcUrl: process.env.L2_RPC_URL || 'http://localhost:8545',
chainId: parseInt(process.env.L2_CHAIN_ID || '42161'), // Example: Arbitrum One
providerType: 'json-rpc',
};
2. Map the chain IDs
Ensure the chainId in your L3 configuration matches the Layer 2 chain you are settling on. Mismatched IDs cause signature verification failures and node sync errors. The boilerplate uses these IDs to route cross-chain messages correctly.
If you are testing on a local fork, verify that your local node is running the correct chain ID. You can check this by running web3.eth.getChainId() in your console.
3. Verify the connection
Run the boilerplate’s health check script. This command attempts to fetch the latest Layer 2 block number and validates the RPC response.
npm run check-l2-connection
If the script returns a block number, your L3 is successfully connected to the Layer 2. If it times out, check your RPC URL and network permissions. Ensure your firewall allows outbound HTTPS connections to the provider.
4. Test data synchronization
With the connection active, deploy a simple contract to your L3. Then, check the Layer 2 explorer to see if the transaction data is being posted. Synchronous reading means your L3 can query Layer 2 state instantly. This is critical for applications that rely on Layer 2 data for logic execution.
Validate the rollup before scaling
Before deploying to a testnet or mainnet, verify that the boilerplate’s core components are communicating correctly. This validation step confirms that the sequencer is processing transactions and the prover is generating valid proofs for the L3 state. Skipping this check often leads to silent failures that are expensive to debug later.
Check the sequencer status
Start by ensuring the sequencer service is running and accepting transactions. You can verify this by sending a simple transaction to the L3 endpoint and checking the block explorer or logs.
- Start the sequencer service if it isn’t already running:
make start-sequencer - Send a test transaction using the provided CLI or a web interface.
- Check the sequencer logs for
Block committedor similar success markers.
If the sequencer fails to produce blocks, check the connection to the Layer 2. Misconfigured RPC endpoints are the most common cause of sequencer stalls.
Verify proof generation
The prover must generate valid zk-proofs to settle state on the underlying Layer 2. Validate this by triggering a proof generation cycle and checking the output directory or service logs.
- Trigger a proof generation cycle:
make generate-proof - Check the prover logs for
Proof generated successfully. - Verify the proof file exists in the designated output directory.
A failed proof generation usually indicates a mismatch between the VM configuration and the prover setup. Ensure the VM binary matches the version expected by the prover.
Confirm Layer 2 settlement
Finally, verify that the L3 state root is being posted to the Layer 2. This confirms the end-to-end flow from transaction inclusion to Layer 2 settlement.
- Check the Layer 2 block explorer for the latest L3 state root.
- Compare the state root with the one reported by the L3 service.
- Ensure the transaction receipt on Layer 2 matches the expected L3 state.
Once these checks pass, the boilerplate is ready for further customization and scaling.
Integrate DevRel kits for adoption
The boilerplate is only as valuable as the developers who use it. Once your L3 appchain is running on localhost, the next step is reducing friction for external contributors. You do this by integrating DevRel kits directly into the repository structure.
A DevRel kit is not a marketing brochure; it is a functional onboarding package. It typically includes a standardized README.md, a local development script, and a simple example contract or frontend component. The goal is to allow a new developer to clone the repo, run one command, and see a working application within minutes. This mirrors the "five-minute" promise of the boilerplate itself.
Place these assets in a dedicated devrel/ or docs/ directory. Include a quickstart.sh script that automates dependency installation and local node startup. Provide a minimal example that demonstrates interaction with your chain’s unique features. If your chain handles specific data types or fees, the example should reflect that reality, not a generic token transfer.
This approach shifts the burden of understanding from the developer to your infrastructure. When onboarding is automated and predictable, community growth becomes a function of distribution rather than support tickets.
-
Create a devrel/ directory in the root of your repository.
-
Write a README.md that explains the chain’s purpose in three sentences.
-
Add a quickstart.sh script that installs dependencies and starts the local node.
-
Include one minimal example contract or frontend component that interacts with the chain.
-
Test the kit with a fresh clone on a different machine to verify it works without prior setup.
Common questions about L3 appchain boilerplates
Can I spin up an L3 appchain boilerplate in under five minutes?
Yes, the initial setup takes under five minutes on localhost. The boilerplate handles the heavy lifting of configuring the sequencer, executor, and state syncer. This speed applies to the development environment, not a mainnet deployment. You can verify the chain is live by checking the block explorer endpoint immediately after running the start script.
How does the L3 appchain handle Layer 2 settlement?
The boilerplate is designed for based rollups, meaning it synchronously reads data from its Layer 2. This ensures that the L3 maintains a direct, real-time link to the Layer 2 security model. The demo code shows how to query the Layer 2 state to validate L3 transactions, ensuring finality without reinventing the bridge logic.
Is this boilerplate suitable for production mainnet use?
No. This codebase is a DevRel utility and a development foundation. It is optimized for rapid iteration and testing on testnets or local nodes. Production deployments require additional security audits, custom sequencer configurations, and robust fault detection mechanisms that are not included in the standard boilerplate package.

No comments yet. Be the first to share your thoughts!