> ## Documentation Index
> Fetch the complete documentation index at: https://docs.spire.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Chain Setup

> Understand which chain parameters you can configure when deploying an appchain

export const BlockTimeDemo = () => {
  const [running, setRunning] = useState(false);
  const [customTime, setCustomTime] = useState('0.5');
  const [key, setKey] = useState(0);
  const timeoutRef = useRef(null);
  const customBlockTimeSec = parseFloat(customTime) || 0.5;
  const customAvgTime = customBlockTimeSec / 2;
  const customAvgTimeMs = customAvgTime * 1000;
  const maxDuration = Math.max(6000, customAvgTimeMs);
  const startDemo = () => {
    if (timeoutRef.current) {
      clearTimeout(timeoutRef.current);
    }
    setKey(prev => prev + 1);
    setRunning(true);
    timeoutRef.current = setTimeout(() => {
      setRunning(false);
      timeoutRef.current = null;
    }, maxDuration);
  };
  return <>
      <style>{`
        @keyframes fillCircle {
          to {
            stroke-dashoffset: 0;
          }
        }
      `}</style>
      <div className="my-5">
        <div className="flex gap-8 justify-around flex-wrap" key={key}>
          <div style={{
    minWidth: '200px'
  }}>
            <div className="text-center font-bold mb-2">Ethereum Mainnet</div>
            <div style={{
    display: 'flex',
    justifyContent: 'center'
  }}>
              <svg style={{
    width: '120px',
    height: '120px',
    transform: 'rotate(-90deg)'
  }}>
                <circle cx="60" cy="60" r="50" stroke="#e0e0e0" strokeWidth="8" fill="none" />
                {running && <circle cx="60" cy="60" r="50" stroke="#3498db" strokeWidth="8" fill="none" strokeDasharray={314} strokeDashoffset={314} style={{
    animation: `fillCircle 6s linear forwards`
  }} />}
              </svg>
            </div>
            <div className="text-center mt-2 text-sm text-gray-600">12s blocktime (~6s avg)</div>
          </div>
          <div style={{
    minWidth: '200px'
  }}>
            <div className="text-center font-bold mb-2">Default</div>
            <div style={{
    display: 'flex',
    justifyContent: 'center'
  }}>
              <svg style={{
    width: '120px',
    height: '120px',
    transform: 'rotate(-90deg)'
  }}>
                <circle cx="60" cy="60" r="50" stroke="#e0e0e0" strokeWidth="8" fill="none" />
                {running && <circle cx="60" cy="60" r="50" stroke="#0073b7" strokeWidth="8" fill="none" strokeDasharray={314} strokeDashoffset={314} style={{
    animation: `fillCircle 0.5s linear forwards`
  }} />}
              </svg>
            </div>
            <div className="text-center mt-2 text-sm text-gray-600">1s blocktime (~0.5s avg)</div>
          </div>
          <div style={{
    minWidth: '200px'
  }}>
            <div className="text-center font-bold mb-2">Custom</div>
            <div style={{
    display: 'flex',
    justifyContent: 'center'
  }}>
              <svg style={{
    width: '120px',
    height: '120px',
    transform: 'rotate(-90deg)'
  }}>
                <circle cx="60" cy="60" r="50" stroke="#e0e0e0" strokeWidth="8" fill="none" />
                {running && <circle cx="60" cy="60" r="50" stroke="#00c853" strokeWidth="8" fill="none" strokeDasharray={314} strokeDashoffset={314} style={{
    animation: `fillCircle ${customAvgTimeMs}ms linear forwards`
  }} />}
              </svg>
            </div>
            <div className="text-center mt-2 text-sm text-gray-600">{customTime}s blocktime (~{customAvgTime}s avg)</div>
          </div>
        </div>
        <div className="text-center mt-4" style={{
    marginTop: '1.5rem'
  }}>
          <label htmlFor="block-period-input" style={{
    display: 'inline-block',
    marginRight: '8px',
    fontSize: '14px',
    fontWeight: '500'
  }}>
            Custom Block Period (seconds):
          </label>
          <input id="block-period-input" type="number" value={customTime} onChange={e => setCustomTime(e.target.value)} placeholder="0.5" min="0.5" step="0.1" style={{
    width: '80px',
    padding: '4px 8px',
    textAlign: 'center',
    border: '1px solid #d1d5db',
    borderRadius: '4px',
    marginRight: '12px'
  }} />
          <button onClick={startDemo} style={{
    background: '#0073b7',
    color: 'white',
    border: 'none',
    padding: '6px 16px',
    borderRadius: '5px',
    cursor: 'pointer',
    fontSize: '14px',
    fontWeight: '500'
  }}>
            Start Demo
          </button>
        </div>
      </div>
    </>;
};

## Requesting an Appchain

This guide explains the key parameters and tradeoffs to consider when requesting an appchain.

When setting up a new Pylon appchain, three primary parameters define its identity and operational behavior:

1. **Chain Name**: Human-readable identifier used in wallets and explorers
2. **Block Period**: Frequency of block production, affecting latency and throughput
3. **Settlement Layer**: The chain your appchain settles to, determining security and ecosystem access

Pylon appchains are available by request through the **[Spire contact form](https://www.spire.dev/contact)**. In your request please include your desired parameters.

## 1. Chain Name

A human-readable name for the appchain. Use clear, descriptive names like "MyApp-Chain" or "GameFi-L3".

**Guidelines:**

* Keep names under 32 characters for compatibility
* No special characters or spaces
* The name must be unique within the sync zone
* Once set, the name cannot be changed without redeploying

The chain name is used in wallets, explorers, and user interfaces, so choose something memorable and unique.

## 2. Block Period

Block period determines how frequently new blocks are produced on the appchain.

**Default:** 1 second

This setting directly impacts how long users wait for transaction confirmation:

<BlockTimeDemo />

Pylon supports block periods of 500 milliseconds or greater. Values from 500ms to 2 seconds have been tested for stability with Pylon's Reth-based infrastructure.

## 3. Settlement Layer

Choose which settlement layer the appchain settles to. This impacts fees, security, and ecosystem access.

**Available Settlement Layers:**

| Settlement Layer     | Use Case                 | Benefits                         | Learn More                                               |
| -------------------- | ------------------------ | -------------------------------- | -------------------------------------------------------- |
| **Base Mainnet**     | Production applications  | Mainnet liquidity, full security | [L2Beat: Base](https://l2beat.com/scaling/projects/base) |
| **Optimism Sepolia** | Cross-settlement testing | Test different architectures     | [Optimism Docs](https://docs.optimism.io/)               |
| **Celo Mainnet**     | Alternative ecosystems   | Access Celo's DeFi ecosystem     | [L2Beat: Celo](https://l2beat.com/scaling/projects/celo) |

Once deployed, the appchain receives an RPC endpoint:

```
https://pylon.{settlement-layer}.spire.dev/v1/chain/{chain-id}/rpc
```

Add this endpoint to wallets and `foundry.toml` for development.

## 4. Pre-Deployed Utility Contracts

You can request utility contracts to be pre-deployed at deterministic addresses on your appchain. These contracts enable common development patterns without requiring deployment.

**Available contracts:**

* **SettlementForwardingProxyFactory** - Deploy proxies for cross-chain reads
* **CREATE2Factory** - Deterministic contract deployments
* **Multicall** - Batch multiple calls in a single transaction
* **MinimalProxyFactory** - Deploy minimal proxies (EIP-1167) for cheap cloning

Specify which contracts you want pre-deployed and whether to use default addresses or custom addresses when requesting your appchain. If there are others you'd be interested let us know! See **[Pre-Deployed Utility Contracts](/pylon/build-onchain#pre-deployed-utility-contracts)** for details on each contract and their default addresses.

## Next Steps

* **[Build Onchain →](/pylon/build-onchain)** - Deploy and test applications
* **[Connect Users →](/pylon/connect-users)** - Configure wallet integration
* **[Chain Management →](/pylon/chain-management)** - Monitor and maintain your chain
