# Swellchain

> Swellchain is a restaking-powered Layer 2 network built on the OP Stack that extends Ethereum's security through EigenLayer's restaking mechanism while leveraging Optimism's proven infrastructure for scalability.

Swellchain documentation provides comprehensive resources for developers, validators, and users to understand and interact with the Swellchain ecosystem.

## Table of Contents

- [developer-resources](#developer-resources)
  - [Bridges](#bridges)
  - [Contract Addresses/Metadata](#contract-addresses/metadata)
  - [RPC Providers](#rpc-providers)
- [fundamentals](#fundamentals)
  - [About Swellchain](#about-swellchain)
  - [FAQs](#faqs)
- [guides](#guides)
  - [Block Explorers](#block-explorers)
  - [Deploy Safe Multisig](#deploy-safe-multisig)
  - [Getting Started](#getting-started)
  - [SuperchainERC20 Quickstart](#superchainerc20-quickstart)
- [Core](#core)
  - [Welcome](#welcome)
- [node-operation](#node-operation)
  - [Node Operation Overview](#node-operation-overview)
  - [Pectra Readiness Upgrade](#pectra-readiness-upgrade)

---

## developer-resources

### Bridges

*Source: [https://build.swellnetwork.io/docs/developer-resources/bridges.md](https://build.swellnetwork.io/docs/developer-resources/bridges.md)*

## Bridges


### Bridge via Superbridge



### Bridging Assets

The Standard Bridge contract enables asset transfers between Ethereum and Swellchain through a lock-and-mint mechanism. 
Please refer to the [Contract Addresses](/docs/developer-resources/contract-addresses) page for the addresses of the bridge and token contracts.


Please note that these addresses are subject to change. Always verify contract addresses through official sources before interacting with them.



To bridge assets, call the `bridgeERC20To()` function on the bridge contract with the following parameters: 


---

### Bridging ETH

To bridge ETH between Ethereum and Swellchain, call the `bridgeETH()` or `bridgeETHTo()` functions on the bridge contract:

<TypeTable
  type={{
    recipient: {
      description: 'The address to receive the bridged ETH (only for bridgeETHTo)',
      type: 'address',
      default: '-'
    },
    gasLimit: {
      description: 'Minimum gas limit for the bridge transaction',
      type: 'uint256',
      default: '-'
    },
    extraData: {
      description: 'Optional additional data for the bridge transaction',
      type: 'bytes',
      default: '0x'
    }
  }}
/>

<Callout type="info">
You can also bridge by sending a basic ETH transfer from an EOA directly to the Bridge Contract address.
This is possible because the Bridge Contract includes a receive function that enables direct ETH transfers from an EOA on Ethereum to Swellchain without calling specific bridge functions.
Find the contract addresses for mainnet and testnet in the [Contract Addresses](/docs/developer-resources/contract-addresses) section.




### Bridge Mechanics

The bridge locks the tokens on the source chain and mints equivalent tokens on the destination chain. 
Transfers from Ethereum to Swellchain complete in 1-3 minutes, while transfers back to Ethereum have a 7-day challenge period.


For more information on bridging assets via the Standard Bridge Contract, refer to the [Standard Bridge documentation](https://docs.optimism.io/builders/app-developers/bridging/standard-bridge).

---

### Contract Addresses/Metadata

*Source: [https://build.swellnetwork.io/docs/developer-resources/contract-addresses.md](https://build.swellnetwork.io/docs/developer-resources/contract-addresses.md)*

## Mainnet Contracts

### Core Protocol Contracts

| Name | Network | Address |
|------|---------|----------|
| AddressManager | Mainnet | [0xa54a84f17c2180148c762D79bC57BdfF7FdAFC8A](https://etherscan.io/address/0xa54a84f17c2180148c762D79bC57BdfF7FdAFC8A#code) |
| AnchorStateRegistryProxy | Mainnet | [0x14387438EE964e826A4EAeB95B2BCe7754174dD1](https://etherscan.io/address/0x14387438EE964e826A4EAeB95B2BCe7754174dD1#code) |
| BatchSubmitter | Mainnet | [0xf854cd5B26bfd73d51236c0122798907Ed65B1f2](https://etherscan.io/address/0xf854cd5B26bfd73d51236c0122798907Ed65B1f2#code) |
| OptimismPortalProxy | Mainnet | [0x758E0EE66102816F5C3Ec9ECc1188860fbb87812](https://etherscan.io/address/0x758E0EE66102816F5C3Ec9ECc1188860fbb87812#code) |
| SystemConfigProxy | Mainnet | [0xD3d4c6B703978a5d24FecF3a70a51127667Ff1A4](https://etherscan.io/address/0xD3d4c6B703978a5d24FecF3a70a51127667Ff1A4#code) |

### L1 Contracts

| Name | Network | Address |
|------|---------|----------|
| L1StandardBridgeProxy | Mainnet | [0x7aA4960908B13D104bf056B23E2C76B43c5AACc8](https://etherscan.io/address/0x7aA4960908B13D104bf056B23E2C76B43c5AACc8#code) |
| L1CrossDomainMessengerProxy | Mainnet | [0xe6a99Ef12995DeFC5ff47EC0e13252f0E6903759](https://etherscan.io/address/0xe6a99Ef12995DeFC5ff47EC0e13252f0E6903759#code) |
| L1ERC721BridgeProxy | Mainnet | [0xfd7618330E63B493070DC8C491Ad4aD26144Bc1e](https://etherscan.io/address/0xfd7618330E63B493070DC8C491Ad4aD26144Bc1e#code) |

### Bridge and Token Contracts

| Name  | Address |
|------|----------|
| L2StandardBridge  | [0x4200000000000000000000000000000000000010](https://swellchainscan.io/address/0x4200000000000000000000000000000000000010) |
| USDT | - |
| WETH | [0x4200000000000000000000000000000000000006](https://swellchainscan.io/address/0x4200000000000000000000000000000000000006) |
| uBTC | [0xb5668713E9BA8bC96f97D691663E70b54CE90b0A](https://swellchainscan.io/address/0xb5668713E9BA8bC96f97D691663E70b54CE90b0A) |
| stBTC | [0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3](https://swellchainscan.io/address/0xf6718b2701D4a6498eF77D7c152b2137Ab28b8A3) |
| Swell Governance Token (SWELL)|[0x2826D136F5630adA89C1678b64A61620Aab77Aea](https://swellchainscan.io/address/0x2826D136F5630adA89C1678b64A61620Aab77Aea)
| rSWELL(rSWELL) |	[0x939f1cC163fDc38a77571019eb4Ad1794873bf8c](https://swellchainscan.io/address/0x939f1cC163fDc38a77571019eb4Ad1794873bf8c)
| swBTC (swBTC) | [0x1cf7b5f266A0F39d6f9408B90340E3E71dF8BF7B](https://swellchainscan.io/address/0x1cf7b5f266A0F39d6f9408B90340E3E71dF8BF7B) |
| Swell Earn ETH (earnETH) | [0x9Ed15383940CC380fAEF0a75edacE507cC775f22](https://swellchainscan.io/address/0x9Ed15383940CC380fAEF0a75edacE507cC775f22) |
| wSWELL(wSWELL) | [0xda1F8EA667dc5600F5f654DF44b47F1639a83DD1](https://swellchainscan.io/address/0xda1F8EA667dc5600F5f654DF44b47F1639a83DD1) |
| Wrapped eETH (weETH) | [0xA6cB988942610f6731e664379D15fFcfBf282b44](https://swellchainscan.io/address/0xA6cB988942610f6731e664379D15fFcfBf282b44) |
| rswETH (rswETH) | [0x18d33689AE5d02649a859A1CF16c9f0563975258](https://swellchainscan.io/address/0x18d33689AE5d02649a859A1CF16c9f0563975258) |
| swETH (swETH) | [0x09341022ea237a4DB1644DE7CCf8FA0e489D85B7](https://swellchainscan.io/address/0x09341022ea237a4DB1644DE7CCf8FA0e489D85B7) |
| Renzo Restaked ETH (ezETH)	| [0x2416092f143378750bb29b79eD961ab195CcEea5](https://swellchainscan.io/address/0x2416092f143378750bb29b79eD961ab195CcEea5) |
| Renzo Restaked LST (pzETH)	| [0x9cb41CD74D01ae4b4f640EC40f7A60cA1bCF83E7](https://swellchainscan.io/address/0x9cb41CD74D01ae4b4f640EC40f7A60cA1bCF83E7) |
| KelpDao Restaked ETH (rsETH)	| [0xc3eACf0612346366Db554C991D7858716db09f58](https://swellchainscan.io/address/0xc3eACf0612346366Db554C991D7858716db09f58) |
| Wrapped liquid staked Ether 2.0 (wstETH) | [0x7c98E0779EB5924b3ba8cE3B17648539ed5b0Ecc](https://swellchainscan.io/address/0x7c98E0779EB5924b3ba8cE3B17648539ed5b0Ecc) |
| USDe | [0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34](https://swellchainscan.io/address/0x5d3a1Ff2b6BAb83b63cd9AD0787074081a52ef34) |
| Staked USDe (sUSDe) | [0x211Cc4DD073734dA055fbF44a2b4667d5E5fE5d2](https://swellchainscan.io/address/0x211Cc4DD073734dA055fbF44a2b4667d5E5fE5d2) |
| ENA | [0x58538e6A46E07434d7E7375Bc268D3cb839C0133](https://swellchainscan.io/address/0x58538e6A46E07434d7E7375Bc268D3cb839C0133) |


### Infrastructure Contracts


#### Euler

##### Core addresses:

| Name | Address |
|------|----------|
| balanceTracker (TrackingRewardStreams) | [0x9fb7215ef6297498D6807caf9f3aC8BA3154db29](https://swellchainscan.io/address/0x9fb7215ef6297498D6807caf9f3aC8BA3154db29) |
| eVaultFactory (GenericFactory) | [0x165D303A586670a7EC14b752908Cb78D40615207](https://swellchainscan.io/address/0x165D303A586670a7EC14b752908Cb78D40615207) |
| eVaultFactoryGovernor (FactoryGovernor) | [0x2faBDeE15F4917F54c37Cc29f184D34CCCdA2993](https://swellchainscan.io/address/0x2faBDeE15F4917F54c37Cc29f184D34CCCdA2993) |
| eVaultImplementation (EVault) | [0xF64c02DfBBfc05b278E82cd2B619e9b2BB0Fc594](https://swellchainscan.io/address/0xF64c02DfBBfc05b278E82cd2B619e9b2BB0Fc594) |
| EVC (EthereumVaultConnector) | [0x08739CBede6E28E387685ba20e6409bD16969Cde](https://swellchainscan.io/address/0x08739CBede6E28E387685ba20e6409bD16969Cde) |
| Permit2 | [0x000000000022D473030F116dDEE9F6B43aC78BA3](https://swellchainscan.io/address/0x000000000022D473030F116dDEE9F6B43aC78BA3) |
| ProtocolConfig | [0x6682Af2820633067A1de5bE99b2DCb2d38F1e241](https://swellchainscan.io/address/0x6682Af2820633067A1de5bE99b2DCb2d38F1e241) |
| SequenceRegistry | [0x0Ce473898d87717F87daFE7b4F37047ACEEb7C2C](https://swellchainscan.io/address/0x0Ce473898d87717F87daFE7b4F37047ACEEb7C2C) |

##### Lens Addresses:

| Name | Address |
|------|----------|
| accountLens | [0x8D6A63585C73327BeA14988e91ca0eA567bB95CE](https://swellchainscan.io/address/0x8D6A63585C73327BeA14988e91ca0eA567bB95CE) |
| eulerEarnVaultLens | [0xAa7FD634FB992305398A40F6681102FdA0D9c63B](https://swellchainscan.io/address/0xAa7FD634FB992305398A40F6681102FdA0D9c63B) |
| irmLens | [0x1E7827Df835B4DBBDa56f403b032Ef62acBB3D8D](https://swellchainscan.io/address/0x1E7827Df835B4DBBDa56f403b032Ef62acBB3D8D) |
| oracleLens | [0xb16D7583D776006CF5d9Ff7DcAA0d2b9f38c3CF5](https://swellchainscan.io/address/0xb16D7583D776006CF5d9Ff7DcAA0d2b9f38c3CF5) |
| utilsLens | [0x43d5E93d4A2B7fa86EF177d7B9fBb5e67e51F397](https://swellchainscan.io/address/0x43d5E93d4A2B7fa86EF177d7B9fBb5e67e51F397) |
| vaultLens | [0x7caA3c60D730D94D4b5E0E80E3b7D461fD153526](https://swellchainscan.io/address/0x7caA3c60D730D94D4b5E0E80E3b7D461fD153526) |

##### Periphery Addresses:

| Name | Address |
|------|----------|
| escrowedCollateralPerspective | [0x55EcfD077416b31De55c659d4626543D1C81B1b1](https://swellchainscan.io/address/0x55EcfD077416b31De55c659d4626543D1C81B1b1) |
| eulerUngoverned0xPerspective | [0x29C623291342e1A063CEdfeED209Da691c37A54B](https://swellchainscan.io/address/0x29C623291342e1A063CEdfeED209Da691c37A54B) |
| eulerUngovernedNzxPerspective | [0xc560a229e4990621ef91572F6eD18b9a34719A41](https://swellchainscan.io/address/0xc560a229e4990621ef91572F6eD18b9a34719A41) |
| evkFactoryPerspective | [0x7A84D412f94Da9702ed85994c153438C26401685](https://swellchainscan.io/address/0x7A84D412f94Da9702ed85994c153438C26401685) |
| externalVaultRegistry | [0x575fcBb7a9f72F8550E578f8fEed6Ac40e0b3b5C](https://swellchainscan.io/address/0x575fcBb7a9f72F8550E578f8fEed6Ac40e0b3b5C) |
| feeFlowController | [0x4b6151032fD9609796bfcC1Dcc0C21060A73a50E](https://swellchainscan.io/address/0x4b6151032fD9609796bfcC1Dcc0C21060A73a50E) |
| governedPerspective | [0x8441EFc2b1135b8a0460041d9De54544F266251C](https://swellchainscan.io/address/0x8441EFc2b1135b8a0460041d9De54544F266251C) |
| irmRegistry | [0xF2cF6897F60d7ecf26F9a9DBB6980952d8Fb8ce9](https://swellchainscan.io/address/0xF2cF6897F60d7ecf26F9a9DBB6980952d8Fb8ce9) |
| kinkIRMFactory | [0xBECb652Fded7024765575165A98Bfe30b7374058](https://swellchainscan.io/address/0xBECb652Fded7024765575165A98Bfe30b7374058) |
| oracleAdapterRegistry | [0x049B9404B9cB8E0A02191e563faEFEAA8D87E619](https://swellchainscan.io/address/0x049B9404B9cB8E0A02191e563faEFEAA8D87E619) |
| oracleRouterFactory | [0x0135fC2605ff2C89E550C2d4C7d75068A4782B43](https://swellchainscan.io/address/0x0135fC2605ff2C89E550C2d4C7d75068A4782B43) |
| swapVerifier | [0xE5E7E30Ee398fd3aBF026BcAE5496cE60F5C1E51](https://swellchainscan.io/address/0xE5E7E30Ee398fd3aBF026BcAE5496cE60F5C1E51) |
| swapper | [0xCAB0BCDf23f505322bCf2aF367989E23cEd80Fd3](https://swellchainscan.io/address/0xCAB0BCDf23f505322bCf2aF367989E23cEd80Fd3) |
| termsOfUseSigner | [0xAD8E191ae4D4F6266BbD1bb248Fa2379c98b5b44](https://swellchainscan.io/address/0xAD8E191ae4D4F6266BbD1bb248Fa2379c98b5b44) |

#### LayerZero

| Name | Address |
|------|----------|
| LayerZero Labs DVN | [0x6788f52439aca6bff597d3eec2dc9a44b8fee842](https://swellchainscan.io/address/0x6788f52439aca6bff597d3eec2dc9a44b8fee842) |
| endpointV2 | [0xcb566e3B6934Fa77258d68ea18E931fa75e1aaAa](https://swellchainscan.io/address/0xcb566e3B6934Fa77258d68ea18E931fa75e1aaAa) |
| sendUln302 | [0xc1B621b18187F74c8F6D52a6F709Dd2780C09821](https://swellchainscan.io/address/0xc1B621b18187F74c8F6D52a6F709Dd2780C09821) |
| receiveUln302 | [0x377530cdA84DFb2673bF4d145DCF0C4D7fdcB5b6](https://swellchainscan.io/address/0x377530cdA84DFb2673bF4d145DCF0C4D7fdcB5b6) |
| sendUln301 | [0xe1844c5D63a9543023008D332Bd3d2e6f1FE1043](https://swellchainscan.io/address/0xe1844c5D63a9543023008D332Bd3d2e6f1FE1043) |
| receiveUln301 | [0xfd76d9CB0Bac839725aB79127E7411fe71b1e3CA](https://swellchainscan.io/address/0xfd76d9CB0Bac839725aB79127E7411fe71b1e3CA) |
| executor | [0xa20DB4Ffe74A31D17fc24BD32a7DD7555441058e](https://swellchainscan.io/address/0xa20DB4Ffe74A31D17fc24BD32a7DD7555441058e) |

#### Nucleus/earnETH

| Name | Address |
|------|----------|
| boringVault | [0x9ed15383940cc380faef0a75edace507cc775f22](https://swellchainscan.io/address/0x9ed15383940cc380faef0a75edace507cc775f22) |
| manager | [0x69fc700226e9e12d8c5e46a4b50a78efb64f50c0](https://swellchainscan.io/address/0x69fc700226e9e12d8c5e46a4b50a78efb64f50c0) |
| accountant | [0x411c78bc8c36c3c66784514f28c56209e1df2755](https://swellchainscan.io/address/0x411c78bc8c36c3c66784514f28c56209e1df2755) |
| teller | [0x6D207874DDc8B1C3954a0BB2b21c6Fce2Aa18Dba](https://swellchainscan.io/address/0x6D207874DDc8B1C3954a0BB2b21c6Fce2Aa18Dba) |
| rolesAuthority | [0x1f5dddf627c3796a589c6271b36a570f18d3a016](https://swellchainscan.io/address/0x1f5dddf627c3796a589c6271b36a570f18d3a016) |

#### Neptune

| Name | Address |
|------|----------|
| RouterAggregator | [0xE5C689d34E03611aC55A603831B00606A8800514](https://swellchainscan.io/address/0xE5C689d34E03611aC55A603831B00606A8800514) |
| GelatoPineCore | [0xe18319897d04667aF0495eA6cc156dBe3636C4EE](https://swellchainscan.io/address/0xe18319897d04667aF0495eA6cc156dBe3636C4EE) |
| LimitOrders | [0x464953a839c424261546C8c5647EFbF8777aD525](https://swellchainscan.io/address/0x464953a839c424261546C8c5647EFbF8777aD525) |
| AggregationExecutor | [0x18BB314A6615BEe12e408c9DF36dE4afb6805833](https://swellchainscan.io/address/0x18BB314A6615BEe12e408c9DF36dE4afb6805833) |
| CLFactory | [0xD78a40cA54090f4178c9c9212c78e9E0C2722231](https://swellchainscan.io/address/0xD78a40cA54090f4178c9c9212c78e9E0C2722231) |
| CLPool | [0x1073Fc2EaFF48B2670b993Ba61A6885C924F77B5](https://swellchainscan.io/address/0x1073Fc2EaFF48B2670b993Ba61A6885C924F77B5) |
| CustomSwapFeeModule | [0x24D2623F52FcafA77987D1195aB3092625e21cbD](https://swellchainscan.io/address/0x24D2623F52FcafA77987D1195aB3092625e21cbD) |
| CustomUnstakedFeeModule | [0x4E88550314914c2a0e971fd9f2294F52e2859044](https://swellchainscan.io/address/0x4E88550314914c2a0e971fd9f2294F52e2859044) |
| NFTDescriptor | [0x9ae9112748c9AD3588D97a3059679A117125CB8D](https://swellchainscan.io/address/0x9ae9112748c9AD3588D97a3059679A117125CB8D) |
| NonfungiblePositionManager | [0x075EF0bE7f0E83c3B55bCE7603cbBf1acC3171f8](https://swellchainscan.io/address/0x075EF0bE7f0E83c3B55bCE7603cbBf1acC3171f8) |
| NonfungibleTokenPositionDescriptor | [0x63f510879ecE26Ae072d11f328C5E53B5413def8](https://swellchainscan.io/address/0x63f510879ecE26Ae072d11f328C5E53B5413def8) |
| QuoterV2 | [0xc3EF87b6e483F6c05e394BDc760684045De887b3](https://swellchainscan.io/address/0xc3EF87b6e483F6c05e394BDc760684045De887b3) |
| SugarHelper | [0x8D930B783eeCa08AAEBF6ab439cEc6D155B44e02](https://swellchainscan.io/address/0x8D930B783eeCa08AAEBF6ab439cEc6D155B44e02) |
| TickLens | [0x6B17A35eCEa59DEdfda3596aA3d68eDC536A21a2](https://swellchainscan.io/address/0x6B17A35eCEa59DEdfda3596aA3d68eDC536A21a2) |

#### RedStone Price Feeds 

| Name | Address |
|------|----------|
| wstETH/stETH | [0xa8a94Da411425634e3Ed6C331a32ab4fd774aa43](https://swellchainscan.io/address/0xa8a94Da411425634e3Ed6C331a32ab4fd774aa43) |
| swETH/ETH | [0x3587a73AA02519335A8a6053a97657BECe0bC2Cc](https://swellchainscan.io/address/0x3587a73AA02519335A8a6053a97657BECe0bC2Cc) |
| rswETH/ETH | [0x4BAD96DD1C7D541270a0C92e1D4e5f12EEEA7a57](https://swellchainscan.io/address/0x4BAD96DD1C7D541270a0C92e1D4e5f12EEEA7a57) |
| weETH/ETH | [0x3fd49f2146FE0e10c4AE7E3fE04b3d5126385Ac4](https://swellchainscan.io/address/0x3fd49f2146FE0e10c4AE7E3fE04b3d5126385Ac4) |
| rsETH/ETH | [0x197225B3B017eb9b72Ac356D6B3c267d0c04c57c](https://swellchainscan.io/address/0x197225B3B017eb9b72Ac356D6B3c267d0c04c57c) |
| ezETH/ETH | [0xbbF121624c3b85C929Ac83872bf6c86b0976A55e](https://swellchainscan.io/address/0xbbF121624c3b85C929Ac83872bf6c86b0976A55e) |
| pzETH/ETH | [0x09639692CE6ff12A06CA3AE9A24b3Aae4CD80DC8](https://swellchainscan.io/address/0x09639692CE6ff12A06CA3AE9A24b3Aae4CD80DC8) |
| USDe/USDC | [0x83c6f7F61A55Fc7A1337AbD45733AD9c1c68076D](https://swellchainscan.io/address/0x83c6f7F61A55Fc7A1337AbD45733AD9c1c68076D) |
| USDC | [0x3401DAF2b1f150Ef0c709Cc0283b5F2e55c3DF29](https://swellchainscan.io/address/0x3401DAF2b1f150Ef0c709Cc0283b5F2e55c3DF29) |
| USDT | [0x6A1c87d11dDe3D1d52c24f8EC59B91019f14170D](https://swellchainscan.io/address/0x6A1c87d11dDe3D1d52c24f8EC59B91019f14170D) |
| ETH/USDC | [0x84AD474c33c9cCefB1a2D8b77Bdd88bDc592f96b](https://swellchainscan.io/address/0x84AD474c33c9cCefB1a2D8b77Bdd88bDc592f96b) |


## Testnet Contracts (Sepolia)

### Core Protocol Contracts

| Name | Network | Address |
|------|---------|----------|
| AddressManager | Sepolia | 0x9c7d8212d8c996ab3c849bf4d6d5cc0a597a5ce5 |
| SystemConfigProxy | Sepolia | 0xb8db232300f007833592befd46e141c6ad3558ec |
| OptimismPortalProxy | Sepolia | 0x595329c60c0b9e54a5246e98fb0fa7fcfd454f64 |
| DisputeGameFactoryProxy | Sepolia | 0xf098dc3596d96b6dfd43fde6066551449242fc15 |
| AnchorStateRegistryProxy | Sepolia | 0x6d1443dd3f58889c6a8de51e74b5fca9c7116513 |

### Bridge and Token Contracts

| Name | Network | Address |
|------|---------|----------|
| L2StandardBridge | Swellchain Testnet | 0x4200000000000000000000000000000000000010 |
| USDT | Swellchain Testnet | 0x41a0bD84E65e75Bc30AFBbe6ea142eBBcc347542 |
| WETH | Swellchain Testnet | 0x4200000000000000000000000000000000000006 |
| USDT | Sepolia | 0xfd665f836095Ed02fDBF3C4F24174D70DFD6b69c |
| WETH | Sepolia | 0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9 |


### L1 Contracts

| Name | Network | Address |
|------|---------|----------|
| L1StandardBridgeProxy | Sepolia | 0xebb79a1d00b2d489f53adee985a2ded2a3553f22 |
| L1CrossDomainMessengerProxy | Sepolia | 0xd89f9ec2d109fb5f978a3b5b846d6aa1959872fb |
| L1ERC721BridgeProxy | Sepolia | 0x2cff2fda74b121b7d6371c740d5166f47a93d45c |

Please note that these addresses are subject to change. Always verify contract addresses through official sources before interacting with them.

## Contract Metadata

You can get additional information about the rollup config in the [Swellchain Mainnet Info](https://rollup-info.altlayer.io/news-school-enough/swell_mainnet) or the [Swellchain Testnet Info](https://rollup-info.altlayer.io/bacon-look-analyst/swell_testnet) provided by AltLayer.



  <Tab value="Mainnet">
    ```json title="ContractMetadata.json"
    {
    "Contract Address": {
        "AddressManager": "0xa54a84f17c2180148c762D79bC57BdfF7FdAFC8A",
        "AnchorStateRegistryProxy": "0x14387438EE964e826A4EAeB95B2BCe7754174dD1",
        "BatchSubmitter": "0xf854cd5B26bfd73d51236c0122798907Ed65B1f2",
        "Challenger": "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A",
        "DelayedWETHProxy": "0xe6a99Ef12995DeFC5ff47EC0e13252f0E6903759",
        "DisputeGameFactoryProxy": "0x87690676786cDc8cCA75A472e483AF7C8F2f0F57",
        "L1CrossDomainMessengerProxy": "0xe6a99Ef12995DeFC5ff47EC0e13252f0E6903759",
        "L1ERC721BridgeProxy": "0xfd7618330E63B493070DC8C491Ad4aD26144Bc1e",
        "L1StandardBridgeProxy": "0x7aA4960908B13D104bf056B23E2C76B43c5AACc8",
        "MIPS": "0x16e83cE5Ce29BF90AD9Da06D2fE6a15d5f344ce4",
        "OptimismMintableERC20FactoryProxy": "0xc2b228cd433eBaE788DE287EDE2abE55B3F3F603",
        "OptimismPortalProxy": "0x758E0EE66102816F5C3Ec9ECc1188860fbb87812",
        "PermissionedDisputeGame": "0xa0cFbe3402d6E0a74e96D3C360F74D5ea4Fa6893",
        "PreimageOracle": "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277",
        "Proposer": "0xfE5dD32c3799249dC6A5D637CCB2f28e0ec227e3",
        "ProxyAdmin": "0x4C4710a4Ec3F514A492CC6460818C4A6A6269dd6",
        "ProxyAdminOwner": "0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A",
        "SuperchainConfig": "0x95703e0982140D16f8ebA6d158FccEde42f04a4C",
        "SystemConfigOwner": "0x06F7fB1C74147e34Fce04a6828c7BF809B038d0E",
        "SystemConfigProxy": "0xD3d4c6B703978a5d24FecF3a70a51127667Ff1A4",
        "UnsafeBlockSigner": "0x6967D304E9b7E26b5eb3f5A1FD1239DaAD3215E6"
    },
    "Deploy Config": {
        "fundDevAccounts": false,
        "l2GenesisBlockNonce": "0x0",
        "l2GenesisBlockGasLimit": "0x3938700",
        "l2GenesisBlockDifficulty": null,
        "l2GenesisBlockMixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "l2GenesisBlockNumber": "0x0",
        "l2GenesisBlockGasUsed": "0x0",
        "l2GenesisBlockParentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "l2GenesisBlockBaseFeePerGas": "0x3b9aca00",
        "proxyAdminOwner": "0x6b1bae59d09fccbddb6c6cceb07b7279367c4e3b",
        "finalSystemOwner": "0x5a0aae59d09fccbddb6c6cceb07b7279367c3d2a",
        "baseFeeVaultRecipient": "0xdd351af083469402dee244ee21618e2e7a2cd1de",
        "l1FeeVaultRecipient": "0xdd351af083469402dee244ee21618e2e7a2cd1de",
        "sequencerFeeVaultRecipient": "0xdd351af083469402dee244ee21618e2e7a2cd1de",
        "baseFeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000",
        "l1FeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000",
        "sequencerFeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000",
        "baseFeeVaultWithdrawalNetwork": 1,
        "l1FeeVaultWithdrawalNetwork": 1,
        "sequencerFeeVaultWithdrawalNetwork": 1,
        "enableGovernance": false,
        "governanceTokenSymbol": "OP",
        "governanceTokenName": "Optimism",
        "governanceTokenOwner": "0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead",
        "gasPriceOracleOverhead": 0,
        "gasPriceOracleScalar": 0,
        "gasPriceOracleBaseFeeScalar": 1368,
        "gasPriceOracleBlobBaseFeeScalar": 810949,
        "useCustomGasToken": false,
        "customGasTokenAddress": "0x0000000000000000000000000000000000000000",
        "p2pSequencerAddress": "0x6967d304e9b7e26b5eb3f5a1fd1239daad3215e6",
        "batchSenderAddress": "0xf854cd5b26bfd73d51236c0122798907ed65b1f2",
        "eip1559Elasticity": 6,
        "eip1559Denominator": 50,
        "eip1559DenominatorCanyon": 250,
        "l2GenesisRegolithTimeOffset": "0x0",
        "l2GenesisCanyonTimeOffset": "0x0",
        "l2GenesisDeltaTimeOffset": "0x0",
        "l2GenesisEcotoneTimeOffset": "0x0",
        "l2GenesisFjordTimeOffset": "0x0",
        "l2GenesisGraniteTimeOffset": "0x0",
        "l1ChainID": 1,
        "l2ChainID": 1923,
        "l2BlockTime": 2,
        "finalizationPeriodSeconds": 12,
        "maxSequencerDrift": 600,
        "sequencerWindowSize": 3600,
        "channelTimeout": 300,
        "batchInboxAddress": "0x005de5857e38dfd703a1725c0900e9c6f24cbde0",
        "systemConfigStartBlock": 0,
        "useAltDA": false,
        "daCommitmentType": "",
        "daChallengeWindow": 0,
        "daResolveWindow": 0,
        "daBondSize": 0,
        "daResolverRefundPercentage": 0,
        "l1BlockTime": 12,
        "l1GenesisBlockTimestamp": "0x0",
        "l1GenesisBlockNonce": "0x0",
        "l1GenesisBlockGasLimit": "0x0",
        "l1GenesisBlockDifficulty": null,
        "l1GenesisBlockMixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "l1GenesisBlockCoinbase": "0x0000000000000000000000000000000000000000",
        "l1GenesisBlockNumber": "0x0",
        "l1GenesisBlockGasUsed": "0x0",
        "l1GenesisBlockParentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "l1GenesisBlockBaseFeePerGas": null,
        "l1StartingBlockTag": "0xd904f8475cc7b74a9ef4749d0ee9aeca3b233aa3dc143667e8a20ffe43789a26",
        "requiredProtocolVersion": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "recommendedProtocolVersion": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "superchainConfigGuardian": "0x0000000000000000000000000000000000000001",
        "l2OutputOracleSubmissionInterval": 1,
        "l2OutputOracleStartingTimestamp": 1,
        "l2OutputOracleStartingBlockNumber": 0,
        "l2OutputOracleProposer": "0x0000000000000000000000000000000000000001",
        "l2OutputOracleChallenger": "0x0000000000000000000000000000000000000001",
        "useFaultProofs": true,
        "faultGameAbsolutePrestate": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "faultGameMaxDepth": 0,
        "faultGameClockExtension": 0,
        "faultGameMaxClockDuration": 0,
        "faultGameGenesisBlock": 0,
        "faultGameGenesisOutputRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "faultGameSplitDepth": 0,
        "faultGameWithdrawalDelay": 604800,
        "preimageOracleMinProposalSize": 126000,
        "preimageOracleChallengePeriod": 86400,
        "proofMaturityDelaySeconds": 604800,
        "disputeGameFinalityDelaySeconds": 302400,
        "respectedGameType": 0,
        "l1StandardBridgeProxy": "0x7aa4960908b13d104bf056b23e2c76b43c5aacc8",
        "l1CrossDomainMessengerProxy": "0xe6a99ef12995defc5ff47ec0e13252f0e6903759",
        "l1ERC721BridgeProxy": "0xfd7618330e63b493070dc8c491ad4ad26144bc1e",
        "systemConfigProxy": "0xd3d4c6b703978a5d24fecf3a70a51127667ff1a4",
        "optimismPortalProxy": "0x758e0ee66102816f5c3ec9ecc1188860fbb87812",
        "daChallengeProxy": "0x0000000000000000000000000000000000000000",
        "protocolVersionsProxy": "0x8062abc286f5e7d9428a0ccb9abd71e50d93b935",
        "deploymentWaitConfirmations": 0
    }
    }
    ```
  
  
    ```json title="ContractMetadata.json"
    {
    "Contract Address": {
        "superchainDeployment": {
            "proxyAdminAddress": "0xdee57160aafcf04c34c887b5962d0a69676d3c8b",
            "superchainConfigProxyAddress": "0xc2be75506d5724086deb7245bd260cc9753911be",
            "superchainConfigImplAddress": "0x0000000000000000000000000000000000000000",
            "protocolVersionsProxyAddress": "0x79add5713b383daa0a138d3c4780c7a1804a8090",
            "protocolVersionsImplAddress": "0x0000000000000000000000000000000000000000"
        },
        "opChainDeployment": {
            "proxyAdminAddress": "0x85046864b00763415af4da8d7bd6fa9404385690",
            "addressManagerAddress": "0x9c7d8212d8c996ab3c849bf4d6d5cc0a597a5ce5",
            "l1ERC721BridgeProxyAddress": "0x2cff2fda74b121b7d6371c740d5166f47a93d45c",
            "systemConfigProxyAddress": "0xb8db232300f007833592befd46e141c6ad3558ec",
            "optimismMintableERC20FactoryProxyAddress": "0xba2b3e7a330ce394202acb258f670b2926db63be",
            "l1StandardBridgeProxyAddress": "0xebb79a1d00b2d489f53adee985a2ded2a3553f22",
            "l1CrossDomainMessengerProxyAddress": "0xd89f9ec2d109fb5f978a3b5b846d6aa1959872fb",
            "optimismPortalProxyAddress": "0x595329c60c0b9e54a5246e98fb0fa7fcfd454f64",
            "disputeGameFactoryProxyAddress": "0xf098dc3596d96b6dfd43fde6066551449242fc15",
            "anchorStateRegistryProxyAddress": "0x6d1443dd3f58889c6a8de51e74b5fca9c7116513",
            "anchorStateRegistryImplAddress": "0xc5f9c44f7abdb1c9b17c48504825ca031be0781d",
            "permissionedDisputeGameAddress": "0x01fe650fb880a287d1b7c2df6e830da0540387fa",
            "delayedWETHPermissionedGameProxyAddress": "0x0884e58d229e180bfcc8301a3f8c0043936a896f"
        },
        "implementationsDeployment": {
            "opcmProxyAddress": "0xf564eea7960ea244bfebcbbb17858748606147bf",
            "delayedWETHImplAddress": "0x07f69b19532476c6cd03056d6bc3f1b110ab7538",
            "optimismPortalImplAddress": "0x35028bae87d71cbc192d545d38f960ba30b4b233",
            "preimageOracleSingletonAddress": "0x92240135b46fc1142da181f550ae8f595b858854",
            "mipsSingletonAddress": "0x47b0e34c1054009e696babaad56165e1e994144d",
            "systemConfigImplAddress": "0xccdd86d581e40fb5a1c77582247bc493b6c8b169",
            "l1CrossDomainMessengerImplAddress": "0xd3494713a5cfad3f5359379dfa074e2ac8c6fd65",
            "l1ERC721BridgeImplAddress": "0xae2af01232a6c4a4d3012c5ec5b1b35059caf10d",
            "l1StandardBridgeImplAddress": "0x64b5a5ed26dcb17370ff4d33a8d503f0fbd06cff",
            "optimismMintableERC20FactoryImplAddress": "0xe01efbeb1089d1d1db9c6c8b135c934c0734c846",
            "disputeGameFactoryImplAddress": "0xa51bea7e4d34206c0bcb04a776292f2f19f0beec"
        }
    },
    "Deploy Config": {
        "fundDevAccounts": false,
        "l2GenesisBlockNonce": "0x0",
        "l2GenesisBlockGasLimit": "0x3938700",
        "l2GenesisBlockDifficulty": null,
        "l2GenesisBlockMixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "l2GenesisBlockNumber": "0x0",
        "l2GenesisBlockGasUsed": "0x0",
        "l2GenesisBlockParentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "l2GenesisBlockBaseFeePerGas": "0x3b9aca00",
        "proxyAdminOwner": "0xba9b48e881c79c5e8e00891dd0dbfd9322632da7",
        "finalSystemOwner": "0xba9b48e881c79c5e8e00891dd0dbfd9322632da7",
        "baseFeeVaultRecipient": "0x7f52c2198f60e3221c10cbe843eb253934fc98b4",
        "l1FeeVaultRecipient": "0x7f52c2198f60e3221c10cbe843eb253934fc98b4",
        "sequencerFeeVaultRecipient": "0x7f52c2198f60e3221c10cbe843eb253934fc98b4",
        "baseFeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000",
        "l1FeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000",
        "sequencerFeeVaultMinimumWithdrawalAmount": "0x8ac7230489e80000",
        "baseFeeVaultWithdrawalNetwork": 1,
        "l1FeeVaultWithdrawalNetwork": 1,
        "sequencerFeeVaultWithdrawalNetwork": 1,
        "enableGovernance": true,
        "governanceTokenSymbol": "OP",
        "governanceTokenName": "Optimism",
        "governanceTokenOwner": "0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead",
        "gasPriceOracleOverhead": 0,
        "gasPriceOracleScalar": 0,
        "gasPriceOracleBaseFeeScalar": 1368,
        "gasPriceOracleBlobBaseFeeScalar": 810949,
        "useCustomGasToken": false,
        "customGasTokenAddress": "0x0000000000000000000000000000000000000000",
        "p2pSequencerAddress": "0xace029eaf8513fe15f03a511976f311454e4b423",
        "batchSenderAddress": "0x77c60efdbda83410ee0373eda2ed06891238c93d",
        "eip1559Elasticity": 10,
        "eip1559Denominator": 50,
        "eip1559DenominatorCanyon": 250,
        "l2GenesisRegolithTimeOffset": "0x0",
        "l2GenesisCanyonTimeOffset": "0x0",
        "l2GenesisDeltaTimeOffset": "0x0",
        "l2GenesisEcotoneTimeOffset": "0x0",
        "l2GenesisFjordTimeOffset": "0x0",
        "l2GenesisGraniteTimeOffset": "0x0",
        "l1ChainID": 11155111,
        "l2ChainID": 1924,
        "l2BlockTime": 2,
        "finalizationPeriodSeconds": 12,
        "maxSequencerDrift": 600,
        "sequencerWindowSize": 3600,
        "channelTimeout": 300,
        "batchInboxAddress": "0x00e4162c4fe9db4796787e515f616a55650791b7",
        "systemConfigStartBlock": 0,
        "useAltDA": false,
        "daCommitmentType": "",
        "daChallengeWindow": 0,
        "daResolveWindow": 0,
        "daBondSize": 0,
        "daResolverRefundPercentage": 0,
        "l1BlockTime": 12,
        "l1GenesisBlockTimestamp": "0x0",
        "l1GenesisBlockNonce": "0x0",
        "l1GenesisBlockGasLimit": "0x0",
        "l1GenesisBlockDifficulty": null,
        "l1GenesisBlockMixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "l1GenesisBlockCoinbase": "0x0000000000000000000000000000000000000000",
        "l1GenesisBlockNumber": "0x0",
        "l1GenesisBlockGasUsed": "0x0",
        "l1GenesisBlockParentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "l1GenesisBlockBaseFeePerGas": null,
        "l1StartingBlockTag": "0xd99f5dc5bb430b382da5e70964a2faf49808c0f450d4e8fa4bb3d4f7f9e3c18a",
        "requiredProtocolVersion": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "recommendedProtocolVersion": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "superchainConfigGuardian": "0x0000000000000000000000000000000000000001",
        "l2OutputOracleSubmissionInterval": 1,
        "l2OutputOracleStartingTimestamp": 1,
        "l2OutputOracleStartingBlockNumber": 0,
        "l2OutputOracleProposer": "0x0000000000000000000000000000000000000001",
        "l2OutputOracleChallenger": "0x0000000000000000000000000000000000000001",
        "useFaultProofs": true,
        "faultGameAbsolutePrestate": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "faultGameMaxDepth": 0,
        "faultGameClockExtension": 0,
        "faultGameMaxClockDuration": 0,
        "faultGameGenesisBlock": 0,
        "faultGameGenesisOutputRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "faultGameSplitDepth": 0,
        "faultGameWithdrawalDelay": 604800,
        "preimageOracleMinProposalSize": 126000,
        "preimageOracleChallengePeriod": 86400,
        "proofMaturityDelaySeconds": 604800,
        "disputeGameFinalityDelaySeconds": 302400,
        "respectedGameType": 0,
        "l1StandardBridgeProxy": "0xebb79a1d00b2d489f53adee985a2ded2a3553f22",
        "l1CrossDomainMessengerProxy": "0xd89f9ec2d109fb5f978a3b5b846d6aa1959872fb",
        "l1ERC721BridgeProxy": "0x2cff2fda74b121b7d6371c740d5166f47a93d45c",
        "systemConfigProxy": "0xb8db232300f007833592befd46e141c6ad3558ec",
        "optimismPortalProxy": "0x595329c60c0b9e54a5246e98fb0fa7fcfd454f64",
        "daChallengeProxy": "0x0000000000000000000000000000000000000000",
        "protocolVersionsProxy": "0x79add5713b383daa0a138d3c4780c7a1804a8090",
        "cliqueSignerAddress": "0x0000000000000000000000000000000000000000",
        "l1UseClique": false,
        "deploymentWaitConfirmations": 0
    }
    }
    ```
  
</Tabs>

---

### RPC Providers

*Source: [https://build.swellnetwork.io/docs/developer-resources/rpc-providers.md](https://build.swellnetwork.io/docs/developer-resources/rpc-providers.md)*

## RPC Provider

To connect to Swellchain, you can use the following RPC providers. Please note that some of these providers require an API key, and differ in their usage of HTTPS and WSS endpoints.

1. [Infura RPC](#infura-rpc)
2. [dRPC](#drpc)
3. [AltLayer RPC](#altlayer-rpc)
4. [Ankr RPC](#ankr-rpc)

---

### Infura RPC

Infura provides access to Swellchain through its Decentralized Infrastructure Network (DIN) service, which routes calls to partner infrastructure providers rather than hosting the nodes directly. This helps maintain network decentralization while providing reliable access.

| Network | HTTPS Endpoint |
| --- | --- |
| Mainnet | https://swellchain-mainnet.infura.io/v3/YOUR_API_KEY |

To use Infura with Swellchain:

1. Create an Infura account at [infura.io](https://infura.io)
2. Create a new API key and ensure Swellchain network is enabled for your project
3. Replace `YOUR_API_KEY` in the endpoint URL with your actual Infura API key
4. Use this endpoint in your development environment, wallet, or dApp configuration

Examples of making requests to Swellchain via Infura:


  <Tab value="curl">
```bash
curl https://swellchain-mainnet.infura.io/v3/YOUR_API_KEY \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1}'
```
  
  
```javascript

// Request headers
const headers = {
  'Content-Type': 'application/json',
};

// Request body
const body = JSON.stringify({
  jsonrpc: '2.0',
  method: 'eth_blockNumber',
  params: [],
  id: 1,
});

fetch('https://swell.drpc.org', {
  method: 'POST',
  headers: headers,
  body: body,
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
```
  
  
```javascript
const Web3 = require('web3');

const url = "https://swell.drpc.org" // url string

const web3 = new Web3(new Web3.providers.HttpProvider(url));

web3.eth.getBlockNumber((error, blockNumber) => {
    if(!error) {
        console.log(blockNumber);
    } else {
        console.log(error);
    }
});
```
  
  
```javascript
const ethers = require("ethers")

// HTTPS endpoint
const provider = new ethers.providers.JsonRpcProvider(
  "https://swell.drpc.org"
)

// Or use WebSocket endpoint
// const provider = new ethers.providers.WebSocketProvider(
//   "wss://swell.drpc.org"
// )

provider
  .getBlockNumber()
  .then((blockNumber) => {
    console.log(blockNumber)
  })
  .catch((error) => {
    console.error(error)
  })
```
  
  
```go
package main


const url = "https://rpc.ankr.com/swell" // url string

const web3 = new Web3(new Web3.providers.HttpProvider(url));

web3.eth.getBlockNumber((error, blockNumber) => {
    if(!error) {
        console.log(blockNumber);
    } else {
        console.log(error);
    }
});
```
  
  
```javascript
const ethers = require("ethers")

// HTTPS endpoint
const provider = new ethers.providers.JsonRpcProvider(
  "https://rpc.ankr.com/swell"
)

// Or use WebSocket endpoint
// const provider = new ethers.providers.WebSocketProvider(
//   "wss://rpc.ankr.com/swell/ws"
// )

provider
  .getBlockNumber()
  .then((blockNumber) => {
    console.log(blockNumber)
  })
  .catch((error) => {
    console.error(error)
  })
```
  
  
```python
from web3 import Web3
from web3.providers.http import HTTPProvider
          
url = "https://rpc.ankr.com/swell"  # url string
    
web3 = Web3(HTTPProvider(url))
print(web3.eth.block_number)
```
  
</Tabs>

More information: [Ankr Docs](https://www.ankr.com/docs/) and [Ankr Swellchain Documentation](https://www.ankr.com/docs/rpc-service/chains/chains-list/#swell)


You can add the network to your wallet and see additional RPC endpoints on [ChainList](https://chainlist.org/?search=swell&testnets=true).

---

## fundamentals

### About Swellchain

*Source: [https://build.swellnetwork.io/docs/fundamentals/about-swellchain.md](https://build.swellnetwork.io/docs/fundamentals/about-swellchain.md)*

## Overview

Swellchain operates as a restaking-powered Layer 2 network built on the OP Stack.
The network extends Ethereum's security through EigenLayer's restaking mechanism while leveraging Optimism's proven infrastructure for transaction processing and scalability.

## Technical Architecture

### Restaking Infrastructure

Swellchain implements three vertically integrated AltLayer Actively Validated Services (AVSs) that work together to provide security and performance:

```mermaid
graph TD
    A[Swellchain] --> B[MACH AVS]
    A --> C[VITAL AVS]
    A --> D[SQUAD AVS]
    B --> E[EigenLayer]
    C --> E
    D --> E
    E --> F[Ethereum]
```

*Note: Above is a mermaid diagram code that represents a visual element in the documentation.*


[MACH AVS](https://docs.altlayer.io/altlayer-documentation/restaked-rollups/mach-for-faster-finality)  provides fast finality and cross-rollup interoperability, completing transaction confirmation in under 10 seconds compared to Ethereum's ~13 minute finality. This enables efficient bridge operations and MEV mitigation.

[VITAL AVS](https://docs.altlayer.io/altlayer-documentation/restaked-rollups/vital-for-decentralised-verification)  handles state verification through fraud proofs or ZK proofs, providing L1-level security guarantees through permissionless verification nodes. The service maintains high availability while enabling community participation through staking.

[SQUAD AVS](https://docs.altlayer.io/altlayer-documentation/restaked-rollups/squad-for-decentralised-sequencing) decentralizes the sequencing layer by distributing transaction ordering across multiple nodes. This eliminates single points of failure and enables community participation through sequencer staking, while providing censorship resistance.

These services leverage EigenLayer's restaking mechanism to provide shared security across the network while maintaining decentralization and performance.

### Optimism Integration

The network operates as part of the Optimism Superchain, inheriting:

```solidity
interface IOptimismFeatures {
    // Shared security model
    function bridging() external;
    function governance() external;
    function upgrades() external;
    function communication() external;
}
```

## Network Specifications

### Performance Metrics

| Metric | Value |
|--------|--------|
| Block Time | ~2 seconds |
| Time to Finality | \~10m (300 blocks) |
| Gas Limit | 30,000,000 |

### Security Model

Swellchain implements a multi-layered security approach:

1. Base security from Ethereum through EigenLayer restaking
2. Additional validation through distributed AVS networks
3. Optimism's proven fraud-proof system
4. Decentralized sequencer network
 

## Economic Design

The network operates with a dual-token model:

```solidity
interface ITokenomics {
    // Native gas token
    function WETH() external returns (address);
    
    // Governance token
    function SWELL() external returns (address);
}
```

Transaction fees are split between:

- Restakers providing security
- AVS operators maintaining network services
- Protocol treasury for ongoing development

## Development Focus

Swellchain prioritizes:

1. Scalable DeFi infrastructure
2. Cross-chain interoperability
3. Developer-friendly environment

## Network Status

View current network status [here](https://swell-mainnet-status.alt.technology/)

## Future Development

The development roadmap focuses on:

1. Expanding AVS integrations
2. Implementing advanced MEV protection
3. Enhancing cross-chain capabilities
4. Scaling validator participation

## Technical Resources

- [GitHub](https://github.com/swellnetwork)
- [Network Explorer](https://swellchainscan.io)
- [Telegram](https://t.me/+QvXky2aKNc8yYTI1)

---

### FAQs

*Source: [https://build.swellnetwork.io/docs/fundamentals/faq.md](https://build.swellnetwork.io/docs/fundamentals/faq.md)*

## Basics


  <Accordion title="What is Swellchain?">
    Swellchain is a restaking-powered Layer 2 network built on the OP Stack. It extends Ethereum's security through EigenLayer's restaking mechanism while leveraging Optimism's proven infrastructure for transaction processing and scalability.
  

  
    Yes, Swellchain is built on the Optimism OP-Stack which is open source. The code is available at [https://github.com/ethereum-optimism/optimism](https://github.com/ethereum-optimism/optimism). Swellchain operates as an OP-Stack L2 similar to Optimism, Base, Ink, and Unichain.
    

  
    Swellchain inherits the consensus mechanism of the OP Stack, which uses a sequencer to order transactions that are then submitted to Ethereum.
  
</Accordions>

## Tokenomics and Economics


  <Accordion title="Can additional coins be minted by authorized entities or through protocol consensus?">
    No, Swellchain does not allow additional minting of coins by authorized entities or through protocol consensus. This follows the standard bridging mechanisms of the OP Stack, where tokens are bridged representations that are locked on L1 and minted on L2.
  

  
    No, there is no mechanism for authorized entities or protocol consensus to burn coins outside of the standard bridge operations. When tokens are withdrawn from L2 to L1, the corresponding L2 representation is burned.
  

  
    For ETH transfers, no approval is needed. For ERC-20 tokens, standard approval mechanisms apply where you need to call `approve()` before transferring tokens to another contract.
  

  
    Swellchain transactions include two components:
    1. L2 Execution Fee: Cost for transaction execution on L2
    2. L1 Security Fee: Estimated cost for L1 publication
  
</Accordions>

## Security and Administration


  <Accordion title="Can authorized entities freeze or suspend accounts?">
    No, Swellchain does not have mechanisms for authorized entities to freeze or suspend accounts. The network follows the same security model as the Ethereum base layer.
  

  
    No, there is no mechanism to freeze the entire network.
  

  
    Smart contracts on Swellchain can implement standard ownership transfer mechanisms, such as the Ownable pattern from OpenZeppelin. The ProxyAdmin contract in Optimism's architecture can transfer ownership of upgradeable contracts, and the protocol includes upgrade mechanisms where ownership or admin rights can be transferred through governance processes.
  

  
    No, network upgrades follow a governance process and require consensus from network participants. It follows the same process as the OP Stack.
  

  
    No, Swellchain does not support dark-coin functionalities or privacy features for tracking transactions. All transactions are publicly visible on the blockchain.
  

</Accordions>

## Bridging and Interoperability


  <Accordion title="How does bridging work between Ethereum and Swellchain?">
    The Standard Bridge contract enables asset transfers between Ethereum and Swellchain through a lock-and-mint mechanism. When assets are bridged to Swellchain, they are locked on Ethereum and minted as representations on Swellchain. When withdrawn, the L2 tokens are burned, and the original assets are unlocked on L1.
  

  
    The Standard Bridge utilizes bridged representations of tokens that are native to another blockchain. Before a token native to one chain can be bridged to the other chain, a bridged representation of that token must be created on the receiving side.
  

  
    Bridging from Ethereum to Swellchain is relatively quick (minutes), while bridging from Swellchain back to Ethereum requires the L2 finality period (approximately 7 days) to ensure security.
  
</Accordions>

## Technical Operations


  <Accordion title="How do I run a Swellchain node?">
    To run a Swellchain node, refer to the [Node Operation Overview](/docs/node-operation/overview) documentation which provides detailed instructions on hardware requirements, installation, and maintenance.
  

  
    Swellchain supports multiple RPC providers including:
    - Infura RPC
    - dRPC
    - AltLayer RPC
    - Ankr RPC

    For detailed information and connection instructions, see the [RPC Providers](/docs/developer-resources/rpc-providers) page.
  

  
    The official block explorer for Swellchain is available at [https://swellchainscan.io](https://swellchainscan.io).
  
</Accordions>

## Centralized Exchange (CEX) Information


  <Accordion title="Can CEXs directly integrate with Swellchain?">
    Yes, Swellchain supports CEX integrations. The network operates on the OP Stack, which is widely used and supported by major exchanges.
  

  
    CEXs should understand that Swellchain's Standard Bridge utilizes bridged representations of tokens. This means:
    - Tokens bridged from Ethereum are represented as wrapped versions on Swellchain
    - When bridging back, the L2 token is burned and the L1 token is unlocked
    - Bridge operations from L2 to L1 have a finality period of approximately 7 days
  

  
    CEXs should:
    1. Implement proper confirmation counts (30+ blocks recommended)
    2. Understand the bridge mechanics for cross-chain transfers
    3. Monitor bridge contracts for deposits coming from other chains
    4. Use the Standard Bridge contract for withdrawals to ensure security
  

  
    CEXs should note that:
    - The network cannot mint additional coins outside the bridge mechanism
    - There is no mechanism to freeze or suspend accounts
    - All transactions are publicly verifiable
    - The network follows the same security model as Ethereum
  
</Accordions>

---

## guides

### Block Explorers

*Source: [https://build.swellnetwork.io/docs/guides/block-explorers.md](https://build.swellnetwork.io/docs/guides/block-explorers.md)*

## Etherscan / Swellchainscan


## Blockscout

---

### Deploy Safe Multisig

*Source: [https://build.swellnetwork.io/docs/guides/deploy-safe.md](https://build.swellnetwork.io/docs/guides/deploy-safe.md)*

export function ArcadeEmbed() {
  return (
    
      <iframe
        src="https://demo.arcade.software/JvhryD7m7z1ZgRKMxDhD?embed&embed_mobile=tab&embed_desktop=inline&show_copy_link=true"
        title="Superchain Safe – Welcome"
        frameBorder="0"
        loading="lazy"
        allowFullScreen
        allow="clipboard-write"
        style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%', colorScheme: 'light' }}
      />
    
  )
}

## Safe Multisig Wallet

Safe (formerly Gnosis Safe) provides a secure way to manage digital assets with multiple signers. This guide walks through deploying a Safe multisig wallet on Swellchain and performing basic operations.



---

## Deploying a Safe Multisig

### Prerequisites
- A wallet with a small amount of ETH on Swellchain for transaction fees
- The wallet addresses of all intended signers

### Deployment Steps

1. Navigate to [https://safe.optimism.io/](https://safe.optimism.io/) and connect your wallet.

2. Select the Swellchain network from the network dropdown. If Swellchain isn't listed, you can add it manually with the following parameters:

   | Parameter | Value |
   | --- | --- |
   | Chain Name | Swellchain |
   | Chain ID | 1923 |
   | RPC URL | https://swell-mainnet.alt.technology |
   | Block Explorer | https://swellchainscan.io |

3. Click "Create new Safe" to begin the deployment process.

4. Select the network where you want to deploy your Safe. You can deploy to multiple networks if needed.

5. Configure your Safe by adding signers:
   - Add the wallet addresses of all intended signers
   - Set the threshold (minimum number of signatures required to approve transactions)
   - The threshold should be between 1 and the total number of signers

6. Review your configuration and confirm the deployment.

   <Callout type="info">
   The deployment requires a small amount of ETH for transaction fees. This amount is typically minimal (approximately 0.000001 ETH).
   

7. After deployment, you'll need to activate your Safe by funding it and signing an initial transaction.

---

## Using Your Safe Multisig

### Managing Funds

To send funds from your Safe:

1. Select "New Transaction" from the Safe interface.
2. Choose "Send tokens" as the transaction type.
3. Enter the recipient address and the amount to send.
4. Submit the transaction for approval.
5. Once the required number of signers (meeting your threshold) have approved, execute the transaction.

### Interacting with Smart Contracts

Your Safe can interact with any smart contract on Swellchain:

1. Select "New Transaction" from the Safe interface.
2. Choose "Contract interaction" as the transaction type.
3. Enter the contract address and ABI, or use the interface to select the function and parameters.
4. Submit the transaction for approval by the required signers.
5. Execute the approved transaction.

### Managing Signers

You can modify your Safe configuration after deployment:

1. Navigate to the "Settings" tab in your Safe interface.
2. Select "Owners" to add or remove signers.
3. Select "Policies" to modify the approval threshold.
4. Any changes to the configuration require approval from the current signers based on the existing threshold.

---

## Security Considerations

- The security of your Safe multisig depends on how you manage the signer keys. Each signer should follow best practices for key management.
- Consider using hardware wallets for signer accounts to maximize security.
- Test transactions with small amounts before moving significant assets.
- Regularly review your Safe's transaction history and settings to ensure they remain secure.

For more information about Safe, visit the [official Safe documentation](https://docs.safe.global/home/what-is-safe).

---

### Getting Started

*Source: [https://build.swellnetwork.io/docs/guides/getting-started.md](https://build.swellnetwork.io/docs/guides/getting-started.md)*

## Introduction

In this guide, we will cover the following:
1. Setting up your wallet and network configuration
2. Bridging assets between Ethereum and Swellchain
3. Obtaining testnet funds for development
4. Deploying smart contracts to the network
5. Interacting with deployed contracts

This will enable you to get a feel of the Swellchain and start building on top of it.

---

## Network Configuration

To interact with Swellchain, you need to add the following networks to your wallet:



  <Tab value="Mainnet">
    | Parameter | Value |
    | --- | --- |
    | Chain Name | Swellchain |
    | Chain ID | 1923 |
    | RPC URL | https://swell-mainnet.alt.technology |
    | Block Explorer | https://swellchainscan.io |
  
  
    | Parameter | Value |
    | --- | --- |
    | Chain Name | Swellchain Testnet |
    | Chain ID | 1924 |
    | RPC URL | https://swell-testnet.alt.technology |
    | Block Explorer | https://swell-testnet-explorer.alt.technology |
  
</Tabs>

The networks can also be added through [ChainList](https://chainlist.org/?search=swell&testnets=true).

---

## Development Setup

### Obtaining Test ETH

1. Switch your wallet network to Swellchain Testnet
2. Bridge ETH from Sepolia testnet using the [L1StandardBridgeProxy contract](https://sepolia.etherscan.io/address/0xebb79a1d00b2d489f53adee985a2ded2a3553f22)
3. Or use [Superbridge](https://superbridge.swellnetwork.io/)

### Bridging Assets

The Standard Bridge contract enables asset transfers between Ethereum and Swellchain through a lock-and-mint mechanism. 
Please refer to the [Contract Addresses](/docs/developer-resources/contract-addresses) page for the addresses of the bridge and token contracts.


Please note that these addresses are subject to change. Always verify contract addresses through official sources before interacting with them.



To bridge assets, call the `bridgeERC20To()` function on the bridge contract with the following parameters: 


---

### Bridge via Superbridge



---

### Bridging ETH

To bridge ETH between Ethereum and Swellchain, call the `bridgeETH()` or `bridgeETHTo()` functions on the bridge contract:

<TypeTable
  type={{
    recipient: {
      description: 'The address to receive the bridged ETH (only for bridgeETHTo)',
      type: 'address',
      default: '-'
    },
    gasLimit: {
      description: 'Minimum gas limit for the bridge transaction',
      type: 'uint256',
      default: '-'
    },
    extraData: {
      description: 'Optional additional data for the bridge transaction',
      type: 'bytes',
      default: '0x'
    }
  }}
/>

<Callout type="info">
You can also bridge by sending a basic ETH transfer from an EOA directly to the Bridge Contract address.
This is possible because the Bridge Contract includes a receive function that enables direct ETH transfers from an EOA on Ethereum to Swellchain without calling specific bridge functions.
Find the contract addresses for mainnet and testnet in the [Contract Addresses](/docs/developer-resources/contract-addresses) section.




### Bridge Mechanics

The bridge locks the tokens on the source chain and mints equivalent tokens on the destination chain. 
Transfers from Ethereum to Swellchain complete in 1-3 minutes, while transfers back to Ethereum have a 7-day challenge period.


For more information on bridging assets via the Standard Bridge Contract, refer to the [Standard Bridge documentation](https://docs.optimism.io/builders/app-developers/bridging/standard-bridge).

---

## Smart Contract Development

Let's deploy your first contract on Swellchain.
Use the following code as a template. 
It is a simple counter contract that can be incremented and decremented.

```solidity title="Counter.sol"
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;

contract Counter {
    uint256 public count;

    // Function to get the current count
    function get() public view returns (uint256) {
        return count;
    }

    // Function to increment count by 1
    function inc() public {
        count += 1;
    }

    // Function to decrement count by 1
    function dec() public {
        // This function will fail if count = 0
        count -= 1;
    }
}
```

Open in the [Remix IDE](https://remix.ethereum.org/?#code=Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNjsKCmNvbnRyYWN0IENvdW50ZXIgewogICAgdWludDI1NiBwdWJsaWMgY291bnQ7CgogICAgLy8gRnVuY3Rpb24gdG8gZ2V0IHRoZSBjdXJyZW50IGNvdW50CiAgICBmdW5jdGlvbiBnZXQoKSBwdWJsaWMgdmlldyByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIGNvdW50OwogICAgfQoKICAgIC8vIEZ1bmN0aW9uIHRvIGluY3JlbWVudCBjb3VudCBieSAxCiAgICBmdW5jdGlvbiBpbmMoKSBwdWJsaWMgewogICAgICAgIGNvdW50ICs9IDE7CiAgICB9CgogICAgLy8gRnVuY3Rpb24gdG8gZGVjcmVtZW50IGNvdW50IGJ5IDEKICAgIGZ1bmN0aW9uIGRlYygpIHB1YmxpYyB7CiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgY291bnQgPSAwCiAgICAgICAgY291bnQgLT0gMTsKICAgIH0KfQo&lang=en&optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.26+commit.8a97fa7a.js)

---

## Network Architecture

Swellchain combines the Optimism Superchain with AltLayer's restaking infrastructure:

### Core Components

- **Optimism Superchain**: A unified network of OP Chains sharing bridging, governance, and communication layers
- **AltLayer AVSs**:
  - MACH: Provides accelerated finality
  - VITAL: Enables decentralized verification
  - SQUAD: Powers decentralized sequencing

These services leverage Ethereum's security through EigenLayer's restaking mechanism.

## Transaction Fees

Swellchain transactions include two components:

1. **L2 Execution Fee**: Cost for transaction execution on L2
2. **L1 Security Fee**: Estimated cost for L1 publication

Fee optimization strategies:
- Submit transactions during low L1 gas periods (weekends)
- Monitor L2 congestion for optimal execution timing

---

## Network Status

Monitor network status at [status.swellnetwork.io](https://status.swellnetwork.io/)

---

### SuperchainERC20 Quickstart

*Source: [https://build.swellnetwork.io/docs/guides/superchainERC20.md](https://build.swellnetwork.io/docs/guides/superchainERC20.md)*

The SuperchainERC20 standard is ready for production deployments. Please note that the OP Stack interoperability upgrade, required for crosschain messaging, is currently in active development.



Welcome to the SuperchainERC20 quickstart guide! In this guide, we'll cover how the token works and deployment process. Whether you're a seasoned developer or just starting out, this guide has got you covered.


## What is SuperchainERC20?

SuperchainERC20 provides a standardized token implementation enabling seamless token transfers across the Superchain. 

SuperchainERC20 extends the standard ERC-20 token with cross-chain mint and burn capabilities, enabling seamless interoperability across the [Superchain interop cluster](https://docs.optimism.io/stack/interop/explainer#superchain-interop-cluster). This token standard implements the [ERC-7802](https://eips.ethereum.org/EIPS/eip-7802) interface to enable 1-block latency cross-chain mint/burn functionality.

## How does SuperchainERC20 work?

[SuperchainERC20](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/L2/SuperchainERC20.sol) and [SuperchainTokenBridge](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/L2/SuperchainTokenBridge.sol) work together to allow ERC-20 tokens to be transferred from one chain to the other.

SuperchainERC20 cross-chain transfers require two transactions:

1. **Initiate Transaction**: On the source chain, tokens are burned and a cross-chain message is emitted
2. **Execute Transaction**: The message is relayed to the destination chain, triggering token minting

This flow ensures tokens maintain consistent total supply across the entire Superchain ecosystem and eliminates the need for liquidity pools or wrapped tokens. 

## Why SuperchainERC20 matters for users, token issuers, and apps on Swellchain

Superchain interop provides Swellchain with essential cross-chain capabilities that enhance the network's interoperability. When token issuers use SuperchainERC20 over a typical ER-C20 deployment it gives token issuers access to the broader Superchain network effects, ensuring your tokens can seamlessly be used by apps and users across the Superchain. 

SuperchainERC20 deployment creates opportunities for:

- **Enhanced Liquidity**: Unified token representation across chains improves capital efficiency
- **Simplified Developer Experience**: Consistent API for projects building on Swellchain
- **Reduced Fragmentation**: Improved capital efficiency for DeFi applications across the Superchain ecosystem - one chain to rule them all

## Deploying SuperchainERC20 - Quickstart

This guide provides a streamlined approach to deploying SuperchainERC20 tokens on Swellchain

### Prerequisites

- Foundry toolchain
- Node.js and pnpm
- Wallet with funds on Swellchain

Install Foundry toolchain:

```bash
curl -L https://foundry.paradigm.xyz | bash
foundryup
```

### Setup and Deployment

1. Clone the starter kit repository:

```bash
git clone https://github.com/ethereum-optimism/superchainerc20-starter.git
cd superchainerc20-starter
```

2. Install dependencies:

```bash
pnpm i
```

3. Initialize environment files:

```bash
pnpm init:env
```

4. Configure deployment parameters in `deploy-config.toml`:


The `chains` field accepts a list of chain identifiers.
You can find more here in the [Superchain Registry](https://github.com/ethereum-optimism/superchain-registry/blob/main/chainList.json).


```toml
[deploy-config]
salt = "your-unique-salt"  # Used for deterministic deployment
chains = ["mainnet/swell", "mainnet/op"]  # List of target chains

[token]
owner_address = "0xYourWalletAddress"  # Token owner address
name = "YourTokenName"  # Token name
symbol = "YTK"  # Token symbol
decimals = 18  # Token decimals
```

5. Update RPC endpoints:

```bash
pnpm contracts:update:rpcs
```

6. Deploy your token:

```bash
pnpm contracts:deploy:token
```

This deployment process uses `Create2` to ensure your token deploys to the same address across all specified chains, a critical requirement for cross-chain functionality.


Verify that your token is deployed at the same address on all target chains by checking each chain's block explorer with the contract address.



## Security Considerations


To ensure security, you must either design the deployer to allow only a specific trusted ERC-20 contract, such as SuperchainERC20, to be deployed through it, or call CREATE2 to deploy the contract directly from an EOA you control.

This precaution is critical because if an unauthorized ERC-20 contract is deployed at the same address on any Superchain network, it could allow malicious actors to mint unlimited tokens and bridge them to the network where the original ERC-20 contract resides.


For production deployments, ensure that:

1. Grant permissions to the `SuperchainTokenBridge`(address `0x4200000000000000000000000000000000000028`) to call `crosschainMint` and `crosschainBurn`.
2. The same salt value is used across all deployments to maintain address consistency. If you do not deploy the contract to a specific destination chain, users will be unable to successfully move their tokens to that chain.
3. Token supply is properly managed across chains to prevent inflation


<Tab value="Correct Implementation">
```solidity
// Only the bridge can call crosschainMint and crosschainBurn
function crosschainMint(address to, uint256 amount) external {
    require(msg.sender == address(Predeploys.SUPERCHAIN_TOKEN_BRIDGE), "Not bridge");
    _mint(to, amount);
}
```


```solidity
// VULNERABLE: Anyone can mint tokens
function crosschainMint(address to, uint256 amount) external {
    _mint(to, amount);
}
```

</Tabs>

## Testing Your Deployment

After deployment, verify your token functions correctly:

1. Start the local development environment:

```bash
pnpm dev
```

2. Use the Superchain Dev Console to mint tokens and test transfers between chains.

Verify that tokens are correctly burned on the source chain and minted on the destination chain with consistent total supply.

## Advanced Integration

For projects requiring custom token behavior while maintaining cross-chain compatibility, consider:

- Extending the base SuperchainERC20 contract with additional functionality
- Implementing specific business logic through the owner interface
- Adding governance controls for managing permissions and parameters

### Converting Existing ERC20 Tokens

For projects with existing ERC20 tokens, migration to SuperchainERC20 requires:

1. Creating a new SuperchainERC20 implementation
2. Deploying it deterministically across all target chains
3. Setting up a migration mechanism for existing token holders
4. Configuring cross-chain permissions correctly

This process preserves token economics while enabling cross-chain functionality.

## Resources and Documentation

SuperchainERC20 enables token issuers to seamlessly access Superchain network effects. By leveraging SuperchainERC20 and Superchain interop, developers can focus on building features rather than solving complex cross-chain challenges.

- Use Supersim, a local development tool, to [deploy a SuperchainERC20 or build an interop-enabled app](https://docs.optimism.io/app-developers/get-started)
- Learn more about the [technical architecture of Superchain interop](https://docs.optimism.io/stack/interop/explainer)
- Learn about how [other token standards can benefit from Superchain interop](https://docs.optimism.io/stack/interop/compatible-tokens)

---

## Core

### Welcome

*Source: [https://build.swellnetwork.io/docs/index.md](https://build.swellnetwork.io/docs/index.md)*

# Welcome to Swellchain

Welcome to the Swellchain documentation. For information about the Swell community and governance, visit the [Swell Website](https://swellnetwork.io).

## Developer Quick Links

Start building on Swellchain with these essential resources:



---

## Featured Developer Tools



## Start Building



## Join the Community

---

## node-operation

### Node Operation Overview

*Source: [https://build.swellnetwork.io/docs/node-operation/overview.md](https://build.swellnetwork.io/docs/node-operation/overview.md)*

Swell Network operates as an Optimistic Rollup chain based on the OP Stack. This guide explains the process of setting up and running a Swell Network node using Docker.

## Prerequisites

The following components must be available on your system:

- Docker Engine 24.0.0+
- Docker Compose v2.20.0+
- 16GB RAM minimum (32GB recommended)
- 4 CPU cores minimum
- 1TB SSD storage (NVME recommended)
- Linux operating system
- Access to Ethereum L1 RPC and Beacon endpoints

## Node Setup Process

### 1. Environment Configuration

1. Create a new directory for your node and clone the repository:

```bash
git clone https://github.com/alt-research/opstack-fullnode-sync.git
```

```bash
cd opstack-fullnode-sync
```

2. Generate JWT file:

```bash
openssl rand -hex 32 > jwt.txt
```

3. Create `.env` file from the example and update the required values:

```bash
cp .env.example .env
```

Update the following values in your `.env` file:

- `L1_RPC`: Your Ethereum L1 RPC endpoint
- `L1_BEACON`: Your Ethereum L1 Beacon endpoint

The other values are pre-configured for Swell Network:

- Chain ID: 1923
- Bootnodes and P2P configuration
- Genesis and rollup configuration URLs
- Docker images and versions

Here is an example of the `.env` file:

```bash title="mainnet.env"
# geth image
GETH_IMAGE=us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101411.0
# l1 rpc url
# node image
NODE_IMAGE=us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:v1.9.4
L1_RPC=
# l1 rpc kind(standard/basic/quicknode/alchemy/erigon)
# https://docs.optimism.io/builders/node-operators/tutorials/node-from-docker
L1_RPC_KIND=standard
# node libp2p bootnodes
P2P_STATIC="/dns/swell-mux.altlayer.network/tcp/30659/p2p/16Uiu2HAmVYZ79ta2QFs2P2Y1n83gaRVRrGg7o7qps2nQPBW2DKRp,/dns/swell-mux.altlayer.network/tcp/30259/p2p/16Uiu2HAmPxWph3g2j6drH5G4LEgSquJkp613sr2orveVVSp1pTE9,/dns/swell-mux.altlayer.network/tcp/30605/p2p/16Uiu2HAm39XBcL8NXy7nm4YpqewLuHT6ZiSwMySYWczpezSCpksu"
# rollup config file url link
ROLLUP_CONFIG_URL="https://operator-public.s3.us-west-2.amazonaws.com/swell/mainnet/rollup.json"
# tx forward endpoint
SEQUENCER_HTTP=http://swell-mainnet.alt.technology/
# op-l2 geth bootnodes
BOOTNODES="enode://71cc695fd5317998d25b6311a06901e37ea06f2cc3e31b0ce90b27b7ed2c88957739892a07fcf9042266bb52678a1c705555d8c012f74cd0f6f1228ae4cc9130@swell-mux.altlayer.network:30239,enode://a7ede29f0c2aee9c2894b878dbfd58a026e2d7d1fb17d3486c8f8ef3a7231a9a9426d655a4d44543948a9e8f436cb9aa120000ea907e992a42d5aa3b7e1c6867@swell-mux.altlayer.network:32105,enode://72ba41a98a8b158f61ac22ab282fade95d16c1559c3c48fc543d9a86cc723ffcbd7c8028ce4f5caae34df81bc8e06d0b43737752f549ca6175c27539291f58c4@swell-mux.altlayer.network:30533"
# genesis file url link
GENESIS_URL="https://operator-public.s3.us-west-2.amazonaws.com/swell/mainnet/genesis.json"
# sync mode(full or snap)
SYNC_MODE=full
# gc mode(archive or full)
GC_MODE=archive
# plasma enabled(true or false)
PLASMA_ENABLED=false
# plasma da server url
PLASMA_DA_SERVER=
# beacon url
L1_BEACON="<L1_BEACON>"
```

---
## Operating the Node

### Starting the Node

Start the node using Docker Compose:

```bash
docker compose --env-file .env up -d
```

This will start both the execution client (op-geth) and consensus client (op-node).

### Monitoring Logs

View op-node logs:
```bash
docker compose logs -f node
```


View op-geth logs:
```bash
docker compose logs -f geth
```


### Verifying Sync Status

Check the sync status:

```bash
curl --location 'localhost:8545' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"method": "eth_syncing",
"params": [],
"id": 2
}'
```

If the node is syncing, you'll see a response with sync progress details. When syncing is complete, it will return `{"jsonrpc":"2.0","id":2,"result":false}`.

Check the current block number after syncing:

```bash
curl --location 'localhost:8545' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"method": "eth_blockNumber",
"id": 2
}'
```


### Stopping the Node

To stop the node:

```bash
docker compose down
```


## Configuration Options

The node can be configured through the `.env` file with the following key options:

- `SYNC_MODE`: Choose between `full` or `snap` sync
- `GC_MODE`: Choose between `archive` or `full` for garbage collection
- `PLASMA_ENABLED`: Enable/disable plasma features

## Network Information


<Tabs items={['Mainnet', 'Testnet']} groupId="network" persist>
  <Tab value="Mainnet">
    | Parameter | Value |
    | --- | --- |
    | Chain Name | Swellchain |
    | Chain ID | 1923 |
    | RPC URL | https://swell-mainnet.alt.technology |
    | Block Explorer | https://swellchainscan.io |
  
  
    | Parameter | Value |
    | --- | --- |
    | Chain Name | Swellchain Testnet |
    | Chain ID | 1924 |
    | RPC URL | https://swell-testnet.alt.technology |
    | Block Explorer | https://swell-testnet-explorer.alt.technology |
  
</Tabs>
For more detailed information about the network configuration, refer to the [rollup configuration](https://operator-public.s3.us-west-2.amazonaws.com/swell/mainnet/rollup.json) and [genesis file](https://operator-public.s3.us-west-2.amazonaws.com/swell/mainnet/genesis.json).

---

### Pectra Readiness Upgrade

*Source: [https://build.swellnetwork.io/docs/node-operation/upgrade.md](https://build.swellnetwork.io/docs/node-operation/upgrade.md)*

Do not upgrade your node yet - this guide is for reference only.
AltLayer did not upgrade the rollup yet.


This guide outlines the process for upgrading your Swellchain node to version 1.11.1. The upgrade introduces improvements in node performance and stability. Choose the appropriate upgrade path based on your deployment method.


Do not upgrade your node yet - this guide is for reference only.
AltLayer did not upgrade the rollup yet.



  <Tab value="Standard Upgrade">
    ## Pre-upgrade Checks

    Before proceeding with the upgrade, verify your current node status:

    ```bash
    curl localhost:8545 -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
    ```

    Ensure your node is fully synced before proceeding with the upgrade.

    ## Backup Process

    Create backups of your critical configuration files:

    ```bash
    cp .env .env.backup
    cp jwt.txt jwt.txt.backup
    ```

    ## Upgrade Steps

    1. Stop your current node:

    ```bash
    docker compose down
    ```

    2. Update the repository:

    ```bash
    git fetch origin
    git pull
    ```

    3. Update your `.env` file with the new image versions:

    ```bash
    # Update these specific lines in your .env file
    GETH_IMAGE=us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101411.1
    NODE_IMAGE=us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:v1.11.1
    ```

    4. Clean the Docker environment:

    ```bash
    docker compose down -v
    docker system prune -f
    ```

    5. Pull the new images:

    ```bash
    docker compose pull
    ```

    6. Start the upgraded node:

    ```bash
    docker compose up -d
    ```
  

  
    ## Pre-upgrade Requirements

    The AltLayer upgrade process requires a clean installation in a new directory. This method ensures a fresh start with the latest configurations.

    ## Upgrade Steps

    1. Create a new directory for the upgraded node:

    ```bash
    mkdir swell-node-v1.11.1
    cd swell-node-v1.11.1
    ```

    2. Clone the AltLayer repository:

    ```bash
    git clone https://github.com/alt-research/opstack-node-v1.11.1.git .
    ```

    3. Copy your existing configuration:

    ```bash
    cp ../your-old-node-directory/.env .
    cp ../your-old-node-directory/jwt.txt .
    ```

    4. Update the environment variables:

    ```bash
    # Update or verify these values in your .env file
    GETH_IMAGE=us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101411.1
    NODE_IMAGE=us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:v1.11.1
    L2_RPC=http://localhost:8545
    P2P_LISTEN_IP=0.0.0.0
    ```

    5. Stop the old node:

    ```bash
    cd ../your-old-node-directory
    docker compose down
    ```

    6. Start the new node:

    ```bash
    cd ../swell-node-v1.11.1
    docker compose up -d
    ```
  
</Tabs>

## Post-upgrade Verification

After the upgrade, verify your node is operating correctly:

1. Check the node sync status:

```bash
curl localhost:8545 -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
```

2. Monitor the logs for any errors:

```bash
docker compose logs -f node
docker compose logs -f geth
```

3. Verify the current block height:

```bash
curl localhost:8545 -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
```

## Troubleshooting

If you encounter issues during the upgrade:

1. Check the node logs for specific error messages
2. Verify all environment variables are correctly set in your `.env` file
3. Ensure sufficient disk space is available
4. Confirm network connectivity to L1 endpoints

If problems persist, revert to the backup configuration:

```bash
# For Standard Upgrade
cp .env.backup .env
cp jwt.txt.backup jwt.txt
docker compose down
docker compose up -d

# For AltLayer Upgrade
cd ../your-old-node-directory
docker compose up -d
```

The node upgrade process typically takes 10-15 minutes to complete. Monitor the logs to ensure proper synchronization after the upgrade.

---

