메인 콘텐츠로 건너뛰기
Standard Bridge는 OP Mainnet 및 기타 모든 표준 OP Stack 체인에서 사용할 수 있는 기본 토큰 브리징 시스템입니다. Standard Bridge를 사용하면 Ethereum과 OP Mainnet 간에 ETH와 대부분의 ERC-20 토큰을 쉽게 이동할 수 있습니다. Standard Bridge를 통한 Ethereum에서 OP Mainnet으로의 전송은 일반적으로 1~3분 이내에 완료됩니다. OP Mainnet에서 Ethereum으로의 전송은 출금 챌린지 기간으로 인해 7일 후에 완료됩니다. Standard Bridge는 완전히 무허가형(permissionless)이며 표준 ERC-20 토큰을 지원합니다. 다른 기능과 보안 속성을 제공하는 다른 브리징 시스템도 존재합니다. 이러한 옵션을 살펴보고 자신과 애플리케이션에 가장 적합한 브리지를 찾아보는 것도 좋습니다.
Standard Bridge는 bridge 회계 오류를 일으킬 수 있으므로 전송 수수료 토큰(fee on transfer tokens)이나 리베이싱 토큰(rebasing tokens)을 지원하지 않습니다.

설계

Standard Bridge를 사용하면 한 체인(예: Ethereum)에 고유한 토큰을 다른 체인(예: OP Mainnet)에서의 해당 토큰 표현으로 변환할 수 있습니다. 사용자는 이후 언제든지 이러한 브리지 표현을 원래의 네이티브 토큰으로 다시 변환할 수 있습니다. 이 브리징 메커니즘은 양방향으로 동일하게 작동합니다. Ethereum 고유 토큰을 OP Mainnet으로 브리지할 수 있는 것처럼, OP Mainnet 고유 토큰도 Ethereum으로 브리지할 수 있습니다. 여기서는 Ethereum에서 OP Mainnet으로 토큰을 이동할 때 Standard Bridge가 어떻게 작동하는지 살펴봅니다. 브리징 메커니즘은 양쪽에서 대칭적으로 동작하므로, 이 설명은 반대 방향에서 브리지가 작동하는 방식도 설명합니다.

아키텍처

Standard Bridge는 두 개의 컨트랙트, 즉 L1StandardBridge(Ethereum에 위치)와 L2StandardBridge(OP Mainnet에 위치)로 구성됩니다. 이 두 컨트랙트는 Ethereum과 OP Mainnet 간에 메시지를 전송하는 CrossDomainMessenger 시스템을 통해 서로 상호작용합니다. CrossDomainMessenger에 대한 자세한 내용은 L1과 L2 간 데이터 전송 가이드를 참고하십시오.

브리지 토큰

Standard Bridge는 다른 블록체인에 고유한 토큰의 브리지 표현을 활용합니다. 한 체인의 고유 토큰을 다른 체인으로 브리지하려면, 먼저 수신 측에 해당 토큰의 브리지 표현이 생성되어 있어야 합니다. 토큰의 브리지 표현은 IOptimismMintableERC20 인터페이스를 구현하는 ERC-20 토큰입니다. 이 인터페이스에는 StandardBridge 컨트랙트가 브리징 과정을 관리하는 데 사용하는 몇 가지 함수가 포함되어 있습니다. StandardBridge와 함께 사용하려면 모든 브리지 버전의 토큰이 반드시 이 인터페이스를 구현해야 합니다. 네이티브 토큰은 이 인터페이스를 구현할 필요가 없습니다. 하나의 네이티브 토큰은 동시에 둘 이상의 브리지 표현을 가질 수 있습니다. 사용자는 브리지를 사용할 때 항상 사용하려는 브리지 토큰을 지정해야 합니다. 같은 네이티브 토큰의 서로 다른 브리지 표현은 완전히 독립적인 토큰으로 간주됩니다.

네이티브 토큰 브리징

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

사용자가 Standard Bridge에 allowance 부여

Standard Bridge는 사용자로부터 토큰을 가져와 브리지 컨트랙트에 잠글 수 있어야 합니다. 이를 위해 사용자는 먼저 브리지 표현으로 변환하려는 토큰 수량만큼 전송할 수 있도록 브리지에 allowance를 부여해야 합니다.
2

사용자가 브리징 함수 호출

충분한 allowance를 부여한 후, 사용자는 네이티브 토큰이 존재하는 체인의 StandardBridge 컨트랙트(예: 토큰이 Ethereum 고유 토큰인 경우 L1StandardBridge 컨트랙트)에서 bridgeERC20To 함수를 호출합니다.사용자는 이 함수 호출에 다음 매개변수를 제공해야 합니다.
  • address _localToken: 송신 측 네이티브 토큰의 주소입니다.
  • address _remoteToken: 수신 측 브리지 표현의 주소입니다.
  • address _to: 토큰을 받을 수신자의 주소로, 일반적으로 송신자의 주소입니다.
  • uint256 _amount: 전송할 토큰 수량입니다.
  • uint32 _minGasLimit: 수신 측에서 전송을 완료하는 데 사용할 gas입니다.
  • bytes calldata _extraData: 선택적인 식별용 추가 데이터입니다.
사용자는 address _to 매개변수를 지정할 필요가 없도록 bridgeERC20To 대신 bridgeERC20 함수를 호출할 수도 있습니다. 이 경우 address _to 매개변수가 자동으로 msg.sender로 설정됩니다.일부 스마트 컨트랙트 지갑은 모든 블록체인에서 같은 주소로 배포될 수 없으므로, bridgeERC20 함수는 스마트 컨트랙트 지갑 사용자에게 잠재적으로 위험할 수 있습니다. 사용자가 실수로 토큰에 대한 접근 권한을 잃는 일을 방지하기 위해, bridgeERC20 함수는 스마트 컨트랙트에서 호출되면 항상 revert됩니다. 따라서 스마트 컨트랙트 지갑 사용자와 기타 스마트 컨트랙트는 대신 bridgeERC20To 함수를 사용해야 합니다.
3

Standard Bridge가 전송된 토큰을 잠금

사용자가 네이티브 토큰을 전송하면서 bridgeERC20To 함수를 호출하면, Standard Bridge는 사용자 주소에서 _localToken 토큰을 _amount만큼 가져와 브리지 컨트랙트 내부에 잠급니다. 잠긴 모든 토큰의 기록은 주어진 _localToken과 _remoteToken 쌍에 대해 입금된 토큰의 총수량을 추적하는 deposits mapping에 저장됩니다.하나의 네이티브 토큰은 둘 이상의 브리지 표현을 가질 수 있으므로, 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 시스템을 통해 수신 측의 Standard Bridge 컨트랙트로 크로스체인 메시지를 보냅니다. 이 메시지는 사용자가 지정한 매개변수에 따라 토큰을 **발행(mint)**하도록 수신 측에 지시합니다. 구체적으로, 이 메시지는 상대편 Standard Bridge 컨트랙트의 finalizeBridgeERC20 함수에 대한 인코딩된 호출입니다. 이 시점에서 송신 측의 실행이 종료됩니다.
5

발행 메시지 실행

발행 메시지가 전송되면 수신 측으로 릴레이되어야 합니다. Ethereum에서 OP Mainnet으로 보낼 때는 메시지 릴레이가 자동으로 이루어지지만, OP Mainnet에서 Ethereum으로 보낼 때는 사용자의 추가 트랜잭션이 필요합니다. 메시지 릴레이 과정에 대한 자세한 내용은 L1과 L2 간 데이터 전송 가이드를 참고하십시오.메시지가 릴레이되면 수신 측 Standard Bridge 컨트랙트에서 finalizeBridgeERC20 함수가 호출됩니다. 이 함수는 완료까지 실행하기 위해 사용자가 정의한 _minGasLimit gas를 받습니다.
7

브리지 토큰 발행

발행 메시지가 완전히 검증되면, finalizeBridgeERC20은 다른 블록체인에 원래 입금된 토큰 수량만큼 수신자에게 토큰을 발행합니다. 이것이 제대로 작동하려면 네이티브 토큰의 브리지 표현이 Standard Bridge가 임의로 토큰을 발행할 수 있도록 하는 mint 함수를 올바르게 구현해야 합니다. 이 함수는 IOptimismMintableERC20 인터페이스의 일부입니다.이로써 네이티브 토큰을 브리지하는 과정이 완료됩니다. 이 과정은 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 함수를 호출합니다.사용자는 이 함수 호출에 다음 매개변수를 제공해야 합니다.
  • address _localToken: 송신 측 브리지 토큰의 주소입니다.
  • address _remoteToken: 수신 측 네이티브 토큰의 주소입니다.
  • address _to: 토큰을 받을 수신자의 주소로, 일반적으로 송신자의 주소입니다.
  • uint256 _amount: 전송할 토큰 수량입니다.
  • uint32 _minGasLimit: 수신 측에서 전송을 완료하는 데 사용할 gas입니다.
  • bytes calldata _extraData: 선택적인 식별용 추가 데이터입니다.
2

Standard Bridge가 전송된 토큰을 소각

사용자가 브리지 토큰을 전송하면서 bridgeERC20To 함수를 호출하면, Standard Bridge는 송신자 주소에서 해당하는 _amount만큼의 토큰을 소각합니다.
3

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

브리지 토큰을 소각한 후, 송신 측의 Standard Bridge 컨트랙트는 CrossDomainMessenger 시스템을 통해 수신 측의 Standard Bridge 컨트랙트로 크로스체인 메시지를 보냅니다. 이 메시지는 사용자가 지정한 매개변수에 따라 토큰의 **잠금을 해제(unlock)**하도록 수신 측에 지시합니다. 구체적으로, 이 메시지는 상대편 Standard Bridge 컨트랙트의 finalizeBridgeERC20 함수에 대한 인코딩된 호출입니다. 이 시점에서 송신 측의 실행이 종료됩니다.
4

잠금 해제 메시지 실행

잠금 해제 메시지가 전송되면 수신 측으로 릴레이되어야 합니다. Ethereum에서 OP Mainnet으로 보낼 때는 메시지 릴레이가 자동으로 이루어지지만, OP Mainnet에서 Ethereum으로 보낼 때는 사용자의 추가 트랜잭션이 필요합니다. 메시지 릴레이 과정에 대한 자세한 내용은 L1과 L2 간 데이터 전송 가이드를 참고하십시오.메시지가 릴레이되면 수신 측 Standard Bridge 컨트랙트에서 finalizeBridgeERC20 함수가 호출됩니다. 이 함수는 완료까지 실행하기 위해 사용자가 정의한 _minGasLimit gas를 받습니다.
5

잠금 해제 메시지 인증

6

네이티브 토큰 잠금 해제

잠금 해제 메시지가 완전히 검증되면, finalizeBridgeERC20은 다른 블록체인에서 원래 소각된 토큰 수량만큼 토큰의 잠금을 해제하고 수신자에게 전송합니다.이로써 네이티브 토큰을 브리지하는 과정이 완료됩니다. 이 과정은 Ethereum에서 OP Mainnet 방향과 OP Mainnet에서 Ethereum 방향 모두 동일합니다.

ETH 브리징

Standard Bridge 컨트랙트는 Ethereum에서 OP Mainnet으로, 또는 그 반대로 ETH를 브리지하는 데에도 사용할 수 있습니다. ETH 브리징 과정은 일반적으로 ERC-20 브리징 과정보다 덜 복잡합니다. 사용자는 어느 블록체인에서든 bridgeETH 또는 bridgeETHTo 함수를 호출하면서 ETH를 보내기만 하면 됩니다.
사용자는 EOA에서 L1StandardBridgeProxy로 기본 ETH 전송을 보내는 방식으로도 Ethereum에서 OP Mainnet으로 ETH를 입금할 수 있습니다. 이는 L1StandardBridgeProxy에 receive 함수가 포함되어 있기 때문에 가능합니다. mainnet 및 testnet 주소는 컨트랙트 주소 페이지에서 확인할 수 있습니다.

튜토리얼

Superchain Token List

Superchain Token List는 사용자가 특정 네이티브 토큰에 대한 올바른 브리지 토큰 주소를 찾을 수 있도록 돕기 위해 존재합니다. 하나의 네이티브 토큰은 둘 이상의 브리지 표현을 가질 수 있고 서로 다른 브리지 표현은 완전히 독립적인 토큰이므로, 잘못된 토큰을 사용하면 네이티브 토큰이 영구적으로 잠길 수 있습니다. 브리지하기 전에 브리지 토큰 주소 검증 가이드를 따라 올바른 브리지 표현을 사용하고 있는지 확인하십시오. 자체 브리지 토큰을 만드는 개발자는 Superchain Token List에 토큰을 추가하는 것을 고려하십시오. Superchain Token List에 등록된 토큰은 Superchain Bridges UI와 같은 특정 도구에 자동으로 표시됩니다.