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

# Standard Bridge 사용하기

> Standard Bridge가 Layer 1과 Layer 2 간에 ETH 및 ERC-20 토큰을 이동하는 방식을 알아봅니다.

Standard Bridge는 OP Mainnet 및 기타 모든 표준 OP Stack 체인에서 사용할 수 있는 기본 토큰 브리징 시스템입니다.
Standard Bridge를 사용하면 Ethereum과 OP Mainnet 간에 ETH와 대부분의 ERC-20 토큰을 쉽게 이동할 수 있습니다.
Standard Bridge를 통한 Ethereum에서 OP Mainnet으로의 전송은 일반적으로 1\~3분 이내에 완료됩니다.
OP Mainnet에서 Ethereum으로의 전송은 [출금 챌린지 기간](https://docs.optimism.io/ko/app-developers/guides/bridging/messaging.md#understanding-the-challenge-period)으로 인해 7일 후에 완료됩니다.

Standard Bridge는 완전히 무허가형(permissionless)이며 표준 ERC-20 토큰을 지원합니다.
다른 기능과 보안 속성을 제공하는 다른 브리징 시스템도 존재합니다.
이러한 옵션을 살펴보고 자신과 애플리케이션에 가장 적합한 브리지를 찾아보는 것도 좋습니다.

> [!NOTE]
>
> Standard Bridge는 bridge 회계 오류를 일으킬 수 있으므로 [**전송 수수료 토큰(fee on transfer tokens)**](https://github.com/d-xo/weird-erc20#fee-on-transfer)이나 [**리베이싱 토큰(rebasing tokens)**](https://github.com/d-xo/weird-erc20#balance-modifications-outside-of-transfers-rebasingairdrops)을 **지원하지 않습니다**.

## 설계

Standard Bridge를 사용하면 한 체인(예: Ethereum)에 고유한 토큰을 다른 체인(예: OP Mainnet)에서의 해당 토큰 표현으로 변환할 수 있습니다.
사용자는 이후 언제든지 이러한 브리지 표현을 원래의 네이티브 토큰으로 다시 변환할 수 있습니다.

이 브리징 메커니즘은 양방향으로 동일하게 작동합니다. Ethereum 고유 토큰을 OP Mainnet으로 브리지할 수 있는 것처럼, OP Mainnet 고유 토큰도 Ethereum으로 브리지할 수 있습니다.
여기서는 Ethereum에서 OP Mainnet으로 토큰을 이동할 때 Standard Bridge가 어떻게 작동하는지 살펴봅니다.
브리징 메커니즘은 양쪽에서 대칭적으로 동작하므로, 이 설명은 반대 방향에서 브리지가 작동하는 방식도 설명합니다.

### 아키텍처

Standard Bridge는 두 개의 컨트랙트, 즉 [`L1StandardBridge`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/L1/L1StandardBridge.sol)(`Ethereum`에 위치)와 [`L2StandardBridge`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/L2/L2StandardBridge.sol)(`OP Mainnet`에 위치)로 구성됩니다.
이 두 컨트랙트는 Ethereum과 OP Mainnet 간에 메시지를 전송하는 `CrossDomainMessenger` 시스템을 통해 서로 상호작용합니다.
`CrossDomainMessenger`에 대한 자세한 내용은 [L1과 L2 간 데이터 전송](https://docs.optimism.io/ko/app-developers/guides/bridging/messaging.md) 가이드를 참고하십시오.

### 브리지 토큰

Standard Bridge는 다른 블록체인에 고유한 토큰의 브리지 표현을 활용합니다.
한 체인의 고유 토큰을 다른 체인으로 브리지하려면, 먼저 수신 측에 해당 토큰의 브리지 표현이 생성되어 있어야 합니다.

토큰의 브리지 표현은 [`IOptimismMintableERC20`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/interfaces/universal/IOptimismMintableERC20.sol#L10-L18) 인터페이스를 구현하는 ERC-20 토큰입니다.
이 인터페이스에는 `StandardBridge` 컨트랙트가 브리징 과정을 관리하는 데 사용하는 몇 가지 함수가 포함되어 있습니다.
`StandardBridge`와 함께 사용하려면 모든 브리지 버전의 토큰이 **반드시** 이 인터페이스를 구현해야 합니다.
네이티브 토큰은 이 인터페이스를 구현할 필요가 없습니다.

하나의 네이티브 토큰은 동시에 둘 이상의 브리지 표현을 가질 수 있습니다.
사용자는 브리지를 사용할 때 항상 사용하려는 브리지 토큰을 지정해야 합니다.
같은 네이티브 토큰의 서로 다른 브리지 표현은 완전히 독립적인 토큰으로 간주됩니다.

### 네이티브 토큰 브리징

Standard Bridge는 "lock-and-mint" 메커니즘을 사용하여 네이티브 토큰을 브리지 표현으로 변환합니다.
즉, 한쪽에서 **네이티브 토큰이 Standard Bridge에 잠기고(lock)**, 그 후 다른 쪽에서 **브리지 토큰이 발행(mint)됩니다**.
네이티브 토큰을 브리지하는 과정은 몇 단계로 이루어집니다.

**1. 사용자가 Standard Bridge에 allowance 부여**

Standard Bridge는 사용자로부터 토큰을 가져와 브리지 컨트랙트에 잠글 수 있어야 합니다.
이를 위해 사용자는 먼저 브리지 표현으로 변환하려는 토큰 수량만큼 전송할 수 있도록 브리지에 [allowance](https://eips.ethereum.org/EIPS/eip-20#approve)를 부여해야 합니다.

**2. 사용자가 브리징 함수 호출**

충분한 allowance를 부여한 후, 사용자는 네이티브 토큰이 존재하는 체인의 `StandardBridge` 컨트랙트(예: 토큰이 Ethereum 고유 토큰인 경우 `L1StandardBridge` 컨트랙트)에서 [`bridgeERC20To`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L217-L229) 함수를 호출합니다.

사용자는 이 함수 호출에 다음 매개변수를 제공해야 합니다.

* `address _localToken`: 송신 측 네이티브 토큰의 주소입니다.
* `address _remoteToken`: 수신 측 브리지 표현의 주소입니다.
* `address _to`: 토큰을 받을 수신자의 주소로, 일반적으로 송신자의 주소입니다.
* `uint256 _amount`: 전송할 토큰 수량입니다.
* `uint32 _minGasLimit`: 수신 측에서 전송을 완료하는 데 사용할 gas입니다.
* `bytes calldata _extraData`: 선택적인 식별용 추가 데이터입니다.

> [!NOTE]
>
> 사용자는 `address _to` 매개변수를 지정할 필요가 없도록 `bridgeERC20To` 대신 [`bridgeERC20`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L194-L206) 함수를 호출할 수도 있습니다.
> 이 경우 `address _to` 매개변수가 자동으로 `msg.sender`로 설정됩니다.
>
> **일부 스마트 컨트랙트 지갑은 모든 블록체인에서 같은 주소로 배포될 수 없으므로, `bridgeERC20` 함수는 [스마트 컨트랙트 지갑](https://web.archive.org/web/20231012141406/https://blockworks.co/news/what-are-smart-contract-wallets) 사용자에게 잠재적으로 위험할 수 있습니다.**
> 사용자가 실수로 토큰에 대한 접근 권한을 잃는 일을 방지하기 위해, `bridgeERC20` 함수는 스마트 컨트랙트에서 호출되면 항상 revert됩니다.
> 따라서 스마트 컨트랙트 지갑 사용자와 기타 스마트 컨트랙트는 대신 `bridgeERC20To` 함수를 사용해야 합니다.

**3. Standard Bridge가 전송된 토큰을 잠금**

사용자가 네이티브 토큰을 전송하면서 `bridgeERC20To` 함수를 호출하면, Standard Bridge는 사용자 주소에서 `_localToken` 토큰을 `_amount`만큼 가져와 브리지 컨트랙트 내부에 잠급니다.
잠긴 모든 토큰의 기록은 주어진 `_localToken`과 `_remoteToken` 쌍에 대해 입금된 토큰의 총수량을 추적하는 [`deposits` mapping](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L41)에 저장됩니다.

하나의 네이티브 토큰은 둘 이상의 브리지 표현을 가질 수 있으므로, `deposits`는 각 `_localToken`/`_remoteToken` 쌍의 입금 풀을 독립적으로 추적해야 합니다.

예를 들어, 두 사용자가 같은 네이티브 토큰인 `Token A`를 각각 100개씩 입금하되, 서로 다른 두 브리지 토큰인 `Token B`와 `Token C`를 받고자 한다고 가정해 보겠습니다.
이제 Standard Bridge에는 총 200개의 `Token A` 잔액이 있지만, mapping에는 `Token A`/`Token B` 풀과 `Token A`/`Token C` 풀이 각각 100개만 가진 것으로 표시됩니다.

**4. Standard Bridge가 발행 메시지 전송**

네이티브 토큰을 잠근 후, 송신 측의 Standard Bridge 컨트랙트는 [`CrossDomainMessenger`](./messaging) 시스템을 통해 수신 측의 Standard Bridge 컨트랙트로 크로스체인 메시지를 보냅니다.
이 메시지는 사용자가 지정한 매개변수에 따라 토큰을 \*\*발행(mint)\*\*하도록 수신 측에 지시합니다.
구체적으로, 이 메시지는 상대편 Standard Bridge 컨트랙트의 [`finalizeBridgeERC20`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L272-L299) 함수에 대한 인코딩된 호출입니다.
이 시점에서 송신 측의 실행이 종료됩니다.

**5. 발행 메시지 실행**

발행 메시지가 전송되면 수신 측으로 릴레이되어야 합니다.
Ethereum에서 OP Mainnet으로 보낼 때는 메시지 릴레이가 자동으로 이루어지지만, OP Mainnet에서 Ethereum으로 보낼 때는 사용자의 추가 트랜잭션이 필요합니다.
메시지 릴레이 과정에 대한 자세한 내용은 [L1과 L2 간 데이터 전송](https://docs.optimism.io/ko/app-developers/guides/bridging/messaging.md#communication-speed) 가이드를 참고하십시오.

메시지가 릴레이되면 수신 측 Standard Bridge 컨트랙트에서 `finalizeBridgeERC20` 함수가 호출됩니다.
이 함수는 완료까지 실행하기 위해 사용자가 정의한 `_minGasLimit` gas를 받습니다.

**6. 발행 메시지 인증**

실행 시 `finalizeBridgeERC20`은 들어오는 요청에 대해 다음 사항을 검증합니다.

* [요청은 반드시 다른 블록체인의 Standard Bridge 컨트랙트에서 시작되어야 합니다](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L281).
* [Standard Bridge가 긴급 일시 중지 상태가 아니어야 합니다](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L283).
* [브리지 토큰이 `IOptimismMintableERC20` 인터페이스를 올바르게 구현해야 합니다](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L284).
* [브리지 토큰이 원래의 네이티브 토큰을 자신의 `remoteToken()`으로 인식해야 합니다](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L285-L288).

**7. 브리지 토큰 발행**

발행 메시지가 완전히 검증되면, `finalizeBridgeERC20`은 다른 블록체인에 원래 입금된 토큰 수량만큼 [수신자에게 토큰을 발행](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L290)합니다.
이것이 제대로 작동하려면 네이티브 토큰의 브리지 표현이 Standard Bridge가 임의로 토큰을 발행할 수 있도록 하는 `mint` 함수를 올바르게 구현해야 합니다.
이 함수는 [`IOptimismMintableERC20`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/interfaces/universal/IOptimismMintableERC20.sol) 인터페이스의 일부입니다.

이로써 네이티브 토큰을 브리지하는 과정이 완료됩니다.
이 과정은 Ethereum에서 OP Mainnet 방향과 OP Mainnet에서 Ethereum 방향 모두 동일합니다.

### 비네이티브 토큰 브리징

Standard Bridge는 "burn-and-unlock" 메커니즘을 사용하여 토큰의 브리지 표현을 다시 네이티브 토큰으로 변환합니다.
즉, 한쪽의 Standard Bridge에서 **브리지 토큰이 소각(burn)되고**, 그 후 다른 쪽에서 **네이티브 토큰의 잠금이 해제(unlock)됩니다**.
비네이티브 토큰, 즉 토큰의 브리지 표현을 브리지하는 과정은 몇 단계로 이루어집니다.

**1. 사용자가 브리징 함수 호출**

네이티브 토큰을 브리지할 때와 달리, Standard Bridge는 이미 이러한 토큰을 `burn`할 수 있는 권한을 가지고 있으므로 사용자는 브리지 토큰 전송을 위해 승인(approval)을 제공할 필요가 없습니다.
이 경우 사용자는 브리지 토큰이 존재하는 체인의 `StandardBridge` 컨트랙트(예: 토큰이 OP Mainnet으로 브리지된 경우 `L2StandardBridge` 컨트랙트)에서 [`bridgeERC20To`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L217-L229) 함수를 호출합니다.

사용자는 이 함수 호출에 다음 매개변수를 제공해야 합니다.

* `address _localToken`: 송신 측 브리지 토큰의 주소입니다.
* `address _remoteToken`: 수신 측 네이티브 토큰의 주소입니다.
* `address _to`: 토큰을 받을 수신자의 주소로, 일반적으로 송신자의 주소입니다.
* `uint256 _amount`: 전송할 토큰 수량입니다.
* `uint32 _minGasLimit`: 수신 측에서 전송을 완료하는 데 사용할 gas입니다.
* `bytes calldata _extraData`: 선택적인 식별용 추가 데이터입니다.

**2. Standard Bridge가 전송된 토큰을 소각**

사용자가 브리지 토큰을 전송하면서 `bridgeERC20To` 함수를 호출하면, [Standard Bridge는 송신자 주소에서 해당하는 `_amount`만큼의 토큰을 소각합니다](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L359).

**3. Standard Bridge가 잠금 해제 메시지 전송**

브리지 토큰을 소각한 후, 송신 측의 Standard Bridge 컨트랙트는 [`CrossDomainMessenger`](./messaging) 시스템을 통해 수신 측의 Standard Bridge 컨트랙트로 크로스체인 메시지를 보냅니다.
이 메시지는 사용자가 지정한 매개변수에 따라 토큰의 \*\*잠금을 해제(unlock)\*\*하도록 수신 측에 지시합니다.
구체적으로, 이 메시지는 상대편 Standard Bridge 컨트랙트의 [`finalizeBridgeERC20`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L272-L299) 함수에 대한 인코딩된 호출입니다.
이 시점에서 송신 측의 실행이 종료됩니다.

**4. 잠금 해제 메시지 실행**

잠금 해제 메시지가 전송되면 수신 측으로 릴레이되어야 합니다.
Ethereum에서 OP Mainnet으로 보낼 때는 메시지 릴레이가 자동으로 이루어지지만, OP Mainnet에서 Ethereum으로 보낼 때는 사용자의 추가 트랜잭션이 필요합니다.
메시지 릴레이 과정에 대한 자세한 내용은 [L1과 L2 간 데이터 전송](https://docs.optimism.io/ko/app-developers/guides/bridging/messaging.md#communication-speed) 가이드를 참고하십시오.

메시지가 릴레이되면 수신 측 Standard Bridge 컨트랙트에서 `finalizeBridgeERC20` 함수가 호출됩니다.
이 함수는 완료까지 실행하기 위해 사용자가 정의한 `_minGasLimit` gas를 받습니다.

**5. 잠금 해제 메시지 인증**

실행 시 `finalizeBridgeERC20`은 들어오는 요청에 대해 다음 사항을 검증합니다.

* [요청은 반드시 다른 블록체인의 Standard Bridge 컨트랙트에서 시작되어야 합니다](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L281).
* [Standard Bridge가 긴급 일시 중지 상태가 아니어야 합니다](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L283).

**6. 네이티브 토큰 잠금 해제**

잠금 해제 메시지가 완전히 검증되면, `finalizeBridgeERC20`은 다른 블록체인에서 원래 소각된 토큰 수량만큼 [토큰의 잠금을 해제하고 수신자에게 전송](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L292-L293)합니다.

이로써 네이티브 토큰을 브리지하는 과정이 완료됩니다.
이 과정은 Ethereum에서 OP Mainnet 방향과 OP Mainnet에서 Ethereum 방향 모두 동일합니다.

### ETH 브리징

Standard Bridge 컨트랙트는 Ethereum에서 OP Mainnet으로, 또는 그 반대로 ETH를 브리지하는 데에도 사용할 수 있습니다.
ETH 브리징 과정은 일반적으로 ERC-20 브리징 과정보다 덜 복잡합니다.
사용자는 어느 블록체인에서든 [`bridgeETH`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L166-L168) 또는 [`bridgeETHTo`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/universal/StandardBridge.sol#L182-L184) 함수를 호출하면서 ETH를 보내기만 하면 됩니다.

> [!NOTE]
>
> 사용자는 EOA에서 `L1StandardBridgeProxy`로 기본 ETH 전송을 보내는 방식으로도 Ethereum에서 OP Mainnet으로 ETH를 입금할 수 있습니다.
> 이는 `L1StandardBridgeProxy`에 [`receive`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/src/L1/L1StandardBridge.sol#L134-L136) 함수가 포함되어 있기 때문에 가능합니다.
> mainnet 및 testnet 주소는 [컨트랙트 주소](https://docs.optimism.io/ko/op-mainnet/network-information/op-addresses.md) 페이지에서 확인할 수 있습니다.

## 튜토리얼

* [viem으로 ERC-20 토큰을 브리지하는 방법 알아보기](https://docs.optimism.io/ko/app-developers/tutorials/bridging/cross-dom-bridge-erc20.md)
* [표준 또는 커스텀 브리지 토큰을 생성하는 방법 알아보기](https://docs.optimism.io/ko/app-developers/tutorials/bridging/standard-bridge-standard-token.md)
* [L1에서 트랜잭션을 제출하는 방법 알아보기](https://docs.optimism.io/ko/app-developers/tutorials/bridging/cross-dom-bridge-eth.md)

## Superchain Token List

[Superchain Token List](https://docs.optimism.io/ko/app-developers/reference/tokens/tokenlist.md)는 사용자가 특정 네이티브 토큰에 대한 올바른 브리지 토큰 주소를 찾을 수 있도록 돕기 위해 존재합니다.
하나의 네이티브 토큰은 둘 이상의 브리지 표현을 가질 수 있고 서로 다른 브리지 표현은 완전히 독립적인 토큰이므로, 잘못된 토큰을 사용하면 네이티브 토큰이 영구적으로 잠길 수 있습니다.
브리지하기 전에 [브리지 토큰 주소 검증](https://docs.optimism.io/ko/app-developers/guides/bridging/verify-bridged-tokens.md) 가이드를 따라 올바른 브리지 표현을 사용하고 있는지 확인하십시오.

자체 브리지 토큰을 만드는 개발자는 Superchain Token List에 [토큰을 추가](https://github.com/ethereum-optimism/ethereum-optimism.github.io#adding-a-token-to-the-list)하는 것을 고려하십시오.
Superchain Token List에 등록된 토큰은 [Superchain Bridges UI](https://app.optimism.io/bridge?utm_source=op-docs\&utm_medium=docs)와 같은 특정 도구에 자동으로 표시됩니다.
