옵티미스틱 롤업 L2 심층 분석 시리즈

옵티미즘과 아비트럼을 통한 릴레이 트랜잭션 분석 #1

Ethan.K
Tokamak Network
21 min readSep 27, 2023

--

포스팅을 작성하는 데에 도움을 준 Suah.K, Theo.L, Jake.J, Austin.O, Justin.G에게 감사를 표합니다.

이번 시리즈에서는 옵티미스틱 롤업을 기반으로 하는 L2 네트워크들을 깊게 파헤치고, 옵티미스틱 롤업의 핵심 특징부터 구현 시 고려해야 할 사항까지를 다루는 아티클을 제시하고자 한다.

1편에서는 개요를 간략히 살펴보고, 그 이후 2편에서는 프로젝트별 자세한 코드 분석을 진행할 예정이다.

0. 요약

  • 릴레이 트랜잭션은 입금/출금 뿐만 아니라 서로 다른 레이어 간 주고 받는 모든 메세지나 정보들을 포괄한다.
  • 대표적인 옵티미스틱 롤업 프로젝트인 옵티미즘과 아비트럼에 초점을 맞추어 릴레이 트랜잭션을 분석한다.
  • 네트워크의 안정성을 도모하기 위해서 릴레이 트랜잭션의 구조를 안전하게 설계해야한다. 두 프로젝트들은 가스리밋을 파라미터로 지정하는 가스리밋 모델을 구성하여 네트워크 안정성을 도모했다. 그 외 프로젝트 별 특징으로 인해 릴레이 트랜잭션을 처리하는 방식의 차이 있다.

1. L2(Layer 2)란 ?

L2는 L1 블록체인의 확장 솔루션이다. L2는 L1 블록체인을 확장시키는 해결책으로, 주된 목표는 메인 블록체인의 확장성 문제를 극복하고 트랜잭션 처리량을 크게 향상시키는 것이다. 이 아티클의 L1은 이더리움이다. 특히 이더리움은 하루에 처리되는 트랜잭션이 백만 건 이상이 되면서 트랜잭션 처리 속도와 가스 비용이 급증하는 문제를 겪고 있다. 이러한 과제를 극복하기 위해 이더리움의 보안성을 기반으로 하는 L2가 개발되어, 트랜잭션 속도와 처리량을 크게 향상시키고자 한다.

출처 : ethscan.io(https://etherscan.io/chart/tx)

현재 가장 일반적으로 사용되는 L2 솔루션 중 하나는 롤업(Rollup)이다. 롤업은 옵티미스틱 롤업과 ZK 롤업으로 나뉘며, 이 아티클에서는 옵티미스틱 롤업에 대한 내용만 다룬다.

2. 옵티미스틱 롤업이란 ?

옵티미스틱 롤업은 이더리움과 호환이 가능한 별도의 네트워크에서 연산 및 상태 저장을 처리하며, 실행된 트랜잭션 데이터를 이더리움 네트워크 상에 콜 데이터로 게시한다. 이러한 방법으로 이더리움과 호환이 가능한 별도의 네트워크에서 처리한 트랜잭션을 일괄 전송하고 데이터를 압축하여 수수료를 절감할 수 있다.

옵티미스틱 롤업은 그 이름에서 알 수 있듯이 “낙관적(Optimistic)”이며 “롤업(Rollup)”을 결합한 용어이다. 이는 거래가 유효하다고 가정하고, 문제가 발생할 경우를 대비하는 방식으로 작동한다.

또한, 옵티미스틱 롤업은 부정 행위를 대비하기 위해 사기 증명 방식을 도입하고 있다. 롤업 트랜잭션이 이더리움에 제출된 후, 해당 트랜잭션에 이의를 제기할 수 있다. 일반적으로 이의 제기 기간은 7일로 정해져 있으며, 이 기간 동안 이의가 제기되지 않으면 해당 롤업 트랜잭션이 유효한 것으로 간주된다. 그러나 이의가 제기되고 사기 증명에 성공하면 이의 제기되기 이전의 상태로 돌아간다.

옵티미스틱 롤업의 자세한 내용을 보고싶다면 링크를 통해서 확인할 수 있다.

옵티미스틱 롤업에는 대표적으로 옵티미즘, 아비트럼, 보바네트워크 등 여러L2 네트워크들이 있지만, 해당 아티클은 옵티미즘과 아비트럼을 대상으로 분석을 진행했다.

옵티미즘과 아비트럼을 중점적으로 분석하는 이유는 옵티미즘과 아비트럼의 점유율을 합치면 현재 L2 시장의 약 80%의 점유율을 가지고 있기도 하고, 그 중 옵티미즘은 다른 옵티미스틱 롤업 프로젝트들의 기반이 되는 프로토콜이다. 아비트럼 또한 옵티미즘을 기반으로 구축된 프로토콜인데, 어떤 포인트로 현재 L2 시장의 50%이상 점유율을 차지하는지 대해 알아보기 위해서다.

출처 : L2beat(https://l2beat.com/scaling/summary)

옵티미즘

개요

옵티미즘은 이더리움의 확장성 문제를 해결하기 위한 L2 확장 솔루션 중 하나로, 낙관적 실행(Optimistic Execution) 방식을 채택하고있다.

2021년 1월에 처음 출시된 옵티미즘은 지속적인 개발과 업그레이드를 통해 확장성 문제를 해결하고 이더리움 생태계의 성능을 향상시키는 역할을 하고 있다. 특히, 2023년 6월에는 베드락 업데이트를 진행하여 기술적인 개선과 기능 확장을 이뤘다. 베드락 업데이트에 대해서는 이후 옵티미즘에서의 릴레이 트랜잭션 파트에서 다룬다.

현재 옵티미즘은 전체 L2 시장에서 약 25%의 점유율을 차지하며, 2위에 위치해있다.

아비트럼

개요

아비트럼은 이더리움의 확장성 문제를 해결하기 위한 L2 확장 솔루션 중 하나로, 사기 증명(fraud proofs) 기술을 활용하여 거래의 유효성을 검증하고 빠른 거래 처리를 지원한다. 이더리움 생태계 내에서 중요한 역할을 하는 아비트럼은 옵티미즘과 함께 이더리움 L2 확장 솔루션의 주요 선두주자 중 하나다.

아비트럼은 아비트럼의 개발사인 오프체인 랩스(Offchain Labs)가 자체적으로 아비트럼 네트워크 인프라를 구축하고 운영하고 있으며, 이더리움의 기존 스마트 컨트랙트와 호환성을 가지고 있어 기존 이더리움 개발자 및 사용자들이 상대적으로 쉽게 채택할 수 있다. 이를 통해 높은 유저 경험과 빠른 거래 처리 속도를 제공하여 이더리움 생태계의 확장성을 향상시키는 역할을 한다.

현재 아비트럼은 전체 L2 시장에서 약 54%의 점유율을 차지하며, 1위에 위치해있다.

옵티미즘 vs 아비트럼 네트워크 모델 비교

옵티미즘과 아비트럼의 비교점을 간략하게 표로 나타내면 다음과 같다.

옵티미스틱 롤업의 거래 처리 방식은 거래가 어떻게 유효화되고, 전달되는지를 설명한다. 옵티미즘은 옵티미즘 네트워크에서 거래를 처리하고 이더리움으로 전달하고, 아비트럼은 하이브리드 방식으로 아비트럼 네트워크에서 거래를 처리하고 이더리움으로 전달하거나 일부 거래의 경우는 이더리움에서 거래를 처리할 수 있다.

트랜잭션의 속도와 비용의 경우 거래 처리 방식으로 인한 차이가 있다. 옵티미즘은 반드시 옵티미즘 네트워크에서 처리한 후 이더리움으로 올리는 방식을 채택하여 트랜잭션 속도는 아비트럼보다 느리지만 트랜잭션의 비용이 아비트럼에 비해 싸다. 반면에 아비트럼의 경우 하이브리드 처리 방식을 채택하고 있어 트랜잭션 속도가 옵티미즘에 비해 빠르지만 트랜잭션 비용이 옵티미즘보단 비싸다.

네트워크의 탈중앙성은 시퀀서의 역할에 따라 큰 차이가 발생한다. 시퀀서가 중지되는 최악의 경우 트랜잭션 처리가 중지되는 옵티미즘에 비해 시퀀서에 의존하지 않고도 트랜잭션을 처리할 수 있는 아비트럼의 탈중앙성에는 엄청난 차이가 있다.

또한 사기 검증의 경우 옵티미즘은 아직 지원하지 않지만, 아비트럼은 사기 검증을 지원하고 있다. 아비트럼의 사기 검증 방식은 대화형 사기 검증을 채택하고 있고, 옵티미즘의 경우 아직 지원하지않지만 현재까지 논의되고 있는 결과로는 높은 확률로 대화형 사기 검증을 채택할 예정이다.

다음으로 EVM 호환성의 경우, 옵티미즘은 자체적인 OVM을 사용하다가 2022년 OP Stack을 발표(링크)하며 EVM과 동등성 업데이트를 통해 EVM과 거의 동일한 환경이 되었다. 반면 아비트럼의 경우 EVM과 비슷한 환경이지만 자체적인 AVM 환경을 사용중이다. 이런 환경 차이로 인해 옵티미즘은 EVM의 opcode와 동일한 방식을 사용하고 있지만, 아비트럼의 AVM은 EVM과는 조금 차이가 있는 opcode를 사용하기 때문에 수수료 비용 모델 측면에서 차이가 생길 수 있다. 예를 들어 AVM은 ArbGas를 사용하고 있어 L1에서 송금을 하려면 21,000개의 가스가 필요하지만 ArbGas는 100,000개의 가스가 필요한다.

마지막으로 개발언어의 경우 아비트럼은 솔리디티, 러스트 등 개발자가 원하는 언어로 개발이 가능하지만, 옵티미즘은 아직 솔리디티로 제한되어있다.

3. 릴레이 트랜잭션이란 ?

릴레이 트랜잭션이란 L1과 L2와 같이 블록체인의 서로 다른 레이어 간에 메시지나 정보를 교환하기 위한 중요한 메커니즘이다. 이 릴레이 트랜잭션은 상호운용성을 달성하기 위해 사용되며, 각 레이어 간의 메시지를 안전하고 효과적으로 전송하는 역할을 한다.

릴레이 트랜잭션 개요

쉽게 말해 릴레이 트랜잭션이라함은 두 레이어 간 주고 받는 모든 메세지를 포괄한다. 입금과 출금의 경우도 릴레이 트랜잭션의 종류 중 하나이다.

입금의 경우 L1에서 메세지를 발생시키고, L2에서 릴레이 트랜잭션을 발생시켜야한다.

입금

반대로 출금의 경우 L2에서 메세지를 발생시키고, L1에서 릴레이 트랜잭션을 발생시켜야한다.

출금

이 외의 일반적으로 다른 레이어의 컨트랙트를 호출 하는 등을 하는 경우에도 호출 받은 레이어에서 릴레이 트랜잭션을 이용해 메세지를 수신해주어야한다.

이러한 특성으로 인해 릴레이 트랜잭션은 메시지 교환 비용, 신뢰성, 보안 등을 고려하여 구성해야한다.

블록체인에서 릴레이 트랜잭션은 메시지를 서로 다른 레이어로 전송하는 데 필요한 일정한 비용을 발생시킨다. L1에서 L2로 발생되는 릴레이 트랜잭션의 비용은 시퀀서가 지불하게 되고, L2에서 L1으로 발생되는 릴레이 트랜잭션의 비용은 사용자나 컨트랙트 소유주가 부과한다. 이러한 비용은 일반적으로 가스라는 형태로 지불된다.

이러한 릴레이 트랜잭션은 시퀀서나 릴레이어를 통해 실행되거나, 기존에 배포된 스마트 컨트랙트를 활용하여 사용자가 직접 실행할 수 있다.

옵티미즘은 메시지를 192만 가스 한도까지 무료로 처리하므로, 이더리움에서 옵티미즘으로 전송되는 메시지는 보통 192만 가스를 넘지 않으므로 L1의 가스 비용만 부과된다. 아비트럼 역시 L2의 릴레이 트랜잭션을 비교적 저렴하게 처리하며, L1의 가스 비용만 지불하면 된다.

릴레이 트랜잭션은 L1과 L2 간의 상호 운용성을 보장하고 네트워크 간의 연결성을 강화하는 데 필수적인 구성 요소 중 하나다.

4. 옵티미즘에서의 릴레이 트랜잭션

베드락 업데이트

옵티미즘의 스마트 컨트랙트 구조는 2023년 6월 베드락 업데이트를 기준으로 업데이트 이전과 이후로 구분할 수 있다.

베드락 업데이트는 주요 개선 사항은 다음과 같다.

  • 데이터 압축 최적화
  • 데이터 가용성 레이어를 이더리움으로 사용
  • 롤업에 L1 트랜잭션을 포함하는 지연 단축
  • 코드 재사용을 통해 모듈식 증명시스템 활성화
  • 노드 성능 개선

베드락 업데이트를 통해 옵티미즘은 수수료 절감과 입금시간 단축, 노드 성능 등을 개선했다.

베드락 업데이트 이전과 이후의 차이

베드락 업데이트 이전

다음 다이어그램은 옵티미즘의 베드락 업데이트 이전 스마트 컨트랙트 구조에 대한 개요를 보여준다. 이더리움 내에서 구현된 옵티미즘의 구성 요소들이 상호작용하는 방식을 나타낸 다이어그램이다.

옵티미즘 베드락 업데이트 이전 스마트 컨트랙트 구조 다이어그램. 출처 : L2Beat(https://github.com/l2beat/l2beat/blob/update-history/packages/frontend/src/static/images/optimism-architecture.png)

베드락 업데이트 이전의 릴레이 트랜잭션 구조는 함수를 호출할 때 가스 리밋을 포함하지 않는 방식으로 설계되어있다. 이 구조를 요약하면 다음과 같다.

L2 → L1(옵티미즘 베드락 업데이트 이전)

  1. L2CrossDomainMessenger 컨트랙트의 sendMessage 함수를 호출한다. 이 함수는 _target, _message, _gasLimit라는 총 3개의 매개변수를 받는다.
  2. sendMessage 함수 실행 시, OVM_L2ToL1MessagePasser 컨트랙트의 passMessageToL1 함수가 호출된다.
  3. 새로운 state root와 tx를 제안한 batch-submitter가 해당 state root와 tx를 블록에 포함시키고, OVM_L2ToL1MessagePasser 컨트랙트의 스토리지인 sentMessages 매핑 상태를 커밋한다.
  4. 그런 다음 batchsubmitter에 의해 state root와 tx가 각각 StateCommitmentChain 컨트랙트와 CanonicalTransactionChain 컨트랙트에 저장되어 L1에서 트랜잭션을 발생시킨다.
  5. StateCommitmentChain 컨트랙트의 _appendBatch 함수를 호출하면서 StateBatchAppended 이벤트가 발생한다.
    CanonicalTransactionChain 컨트랙트의 _appendBatch 함수를 호출하면서 TransactionBatchAppended 이벤트가 발생한다.
  6. 7일의 이의 제기 기간(챌린지 기간)이 지나면 메세지 전달이 가능한 상태로 변한다.
  7. 마지막으로 L1CrossDomainMessenger 컨트랙트의 relayMessage 함수를 통해 메시지 전달이 완료된다.

L1 → L2(옵티미즘 베드락 업데이트 이전)

  1. L1CrossDomainMessenger 컨트랙트의 sendMessage 함수를 호출한다. 이 함수는 _target, _message, _gasLimit라는 총 3개의 매개변수를 받는다.
  2. sendMessage 함수로 전달된 메시지들은 CanonicalTransactionChain 컨트랙트의 enqueue 함수를 통해 node에 전달될 대기 리스트로 들어간다.
  3. 최대 10분 동안 메세지의 유효성을 확인한다.
  4. DTL은 제출된 트랜잭션을 L2CrossDomainMessenger 컨트랙트의 relayMessage 함수를 통해 메시지 전달이 완료된다.

베드락 업데이트 이후

다음 다이어그램은 옵티미즘의 베드락 업데이트 이후 스마트 컨트랙트 구조에 대한 개요를 보여준다. 이더리움 내에서 구현된 옵티미즘의 구성 요소들이 상호작용하는 방식을 나타낸 다이어그램이다.

옵티미즘 베드락 업데이트 이후 스마트 컨트랙트 구조 다이어그램. 출처 : L2Beat(https://github.com/l2beat/l2beat/blob/master/packages/frontend/src/static/images/optimism-architecture.png)

베드락 업데이트 이후의 릴레이 트랜잭션 구조는 함수를 호출할 때 최소 가스 리밋을 포함하는 방식으로 변경되었다. 각 과정을 요약해보면 아래와 같다.

L2 → L1(옵티미즘 베드락 업데이트 이후)

  1. L2CrossDomainMessenger 컨트랙트의 _sendMessage 함수를 호출한다. 해당 함수의 파라미터는 _to, _gaslimit, _value, _data로 총 4개의 값을 받는다. _sendMessage 함수는 CrossDomainMessenger로부터 상속을 받아 작성된 함수이다.
  2. _sendMessage 함수를 실행하면 L2ToL1MessagePasser 컨트랙트의 initiateWithdrawal 함수가 호출되면서 MessagePassed 이벤트가 발생한다.
  3. op-batcher는 BatchInbox EOA에 트랜잭션 배치를 전송하고, op-proposer가 새로운 output root를 제안하면 op-node가 output root를 블록에 포함시켜 L2ToL1MessagePasser 컨트랙트의 스토리지인 sentMessages 매핑 상태를 커밋한다.
  4. 그런 다음 op-proposer에 의해서 output root가 L2OutputOracle 컨트랙트에 저장되면서 L1에서 트랜잭션이 발생한다.
  5. 발생된 트랜잭션은 OutputProposed 이벤트를 발생하면서 OptimismPortal로 전달된다.
  6. 7일의 이의 제기 기간(챌린지 기간)이 지나면 메세지 전달이 가능한 상태로 변한다.
  7. 마지막으로 CrossDomainMessenger 컨트랙트의 relayMessage 함수를 통해 메세지 전달이 완료된다.

L1 → L2(옵티미즘 베드락 업데이트 이후)

  1. L1CrossDomainMessenger 컨트랙트의 _sendMessage 함수를 호출한다. 해당 함수의 파라미터로는 _to, _gaslimit, _value, _data로 총 4개의 값을 받는다. _sendMessage 함수는 CrossDomainMessenger로부터 상속을 받아 작성된 함수이다.
  2. _sendMessage 함수를 실행하면 OptimismPortal의 depositTransaction이 호출되면서 TransactionDeposited 이벤트가 발생한다.
  3. 최대 3분 동안 메세지의 유효성을 확인한다.
  4. op-node는 제출된 트랜잭션들은 CrossDomainMessenger 컨트랙트의 relayMessage 함수를 통해 메세지 전달이 완료된다.

5. 아비트럼에서의 릴레이 트랜잭션

다음 다이어그램은 아비트럼의 스마트 컨트랙트 구조에 대한 개요를 보여준다. 이더리움 내에서 구현된 아비트럼의 구성 요소들이 상호작용하는 방식을 나타낸 다이어그램이다.

아비트럼 스마트 컨트랙트 구조 다이어그램. 출처 : L2Beat(https://github.com/l2beat/l2beat/blob/master/packages/frontend/src/static/images/arbitrum-architecture.png)

L2 → L1(아비트럼)

  1. ArbSys 컨트랙트에 sendTxToL1 함수를 호출한다. 이 함수는 destination와 data 두 개의 매개변수를 받는다. ArbSys 컨트랙트는 L2ToL1Tx 이벤트를 실행하여 L2에서 L1으로 트랜잭션을 생성한다.
  2. NodeInterface 가상 컨트랙트의 constructOutboxProof 함수를 호출하여 증명 데이터를 검색한다.
  3. 반환된 데이터를 이용하여 outbox 컨트랙트의 executeTransaction 함수를 호출하여 트랜잭션을 실행한다.

가상 컨트랙트란 ?

호출을 통해 함수에 접근할 수 있지만 실제로 블록체인에는 존재하지않는 컨트랙트

L1 → L2(아비트럼)

  1. Inbox 컨트랙트의 createRetryableTicket 함수를 호출한다. 이 함수는 to, l2CallValue, maxSubmissionCost, excessFeeRefundAddress, callValueRefundAddress, gasLimit, maxFeePerGas, data라는 총 8개의 매개변수를 받는다.
  2. Bridge 컨트랙트의 addMessageToDelayedAccumulator 함수를 호출하여 MessageDelivered 이벤트를 발생시킨다.
  3. 아비트럼이 제공하는 릴레이어를 통해 아비트럼 네트워크의 aliased address로 트랜잭션이 발생한다.
  4. ArbRetryableTx 컨트랙트의 redeem 함수를 통해 메시지 전달이 완료된다.

6. 비교 : 옵티미즘 vs 아비트럼

옵티미즘과 아비트럼은 각각 다른 릴레이 트랜잭션 구조를 채택하고 있다.

옵티미즘 구조

옵티미즘의 베드락 업데이트 이전에는 릴레이 트랜잭션을 제출할 때 가스 리밋을 파라미터로 받지 않아, 가스 리밋으로 인한 트랜잭션 실패 시에도 트랜잭션 가스 비용만 소모되는 불상사가 발생할 수 있었다. 그러나 베드락 업데이트 이후, 릴레이 트랜잭션을 제출할 때 가스 리밋을 파라미터로 받고, 먼저 가스 리밋을 확인한 후 트랜잭션이 실패할 것 같다면 revert를 발생시켜 수수료를 효율적으로 관리할 수 있게 되었다.

아비트럼 구조

아비트럼은 옵티미즘과 유사하게 가스 리밋을 파라미터로 받지만, 거래를 처리하는 구조나 인프라 자체가 중앙 집중화된 방식을 채택하고 있다. 따라서 옵티미즘과는 다른 운영 방식과 인프라를 통해 거래를 처리하고 있다.

이러한 차이로 인해 옵티미즘과 아비트럼은 각자의 장점과 한계를 가지고 있으며, 프로젝트나 사용 사례에 따라 선택될 수 있다.

옵티미즘은 베드락 업데이트 이후 릴레이 트랜잭션의 가스 관리를 개선하고, 옵티미즘 네트워크 내에서 가스 비용을 효과적으로 관리할 수 있게 되었다. 따라서 옵티미즘은 사용자에게 저렴한 거래 비용과 빠른 거래 처리 속도를 제공한다.

아비트럼은 중앙 집중화된 인프라를 사용하여 릴레이 트랜잭션을 처리하므로 특히 기존 이더리움 개발자 및 사용자들이 상대적으로 쉽게 채택할 수 있다. 이로 인해 아비트럼은 높은 유저 경험과 빠른 거래 처리 속도를 제공하여 이더리움 생태계의 확장성을 향상시키는 역할을 한다.

7. 결론

릴레이 트랜잭션은 L2 확장 솔루션에서 핵심적인 역할을 하며, 옵티미즘과 아비트럼을 비롯한 다양한 프로토콜에서 사용된다.

릴레이 트랜잭션을 효과적으로 구현하는 것은 프로토콜의 성능과 안전성을 향상시키는 데 큰 영향을 미친다. 프로젝트의 목표와 요구 사항에 따라 적절한 프로토콜을 선택하고, 릴레이 트랜잭션을 구현할 때 가스 관리, 보안, 업그레이드 관리 등의 고려 사항을 신중히 고려해야 한다.

이번 분석을 통해 릴레이 트랜잭션을 구성할 때 사용자가 가스 리밋을 지정할 수 있도록 하는 것이 중요하다고 보인다. 릴레이 트랜잭션을 처리하기 전에 가스 리밋을 확인하고, 트랜잭션이 실패할 가능성이 높으면 트랜잭션을 거부하도록 구현하는 것이 네트워크의 안정성 측면에서 안전한 모델링이라고 볼 수 있다.

또는 릴레이어 자체를 중앙화하여 관리하게된다면 블록체인의 탈중앙성을 조금 해칠지라도 네트워크의 안정성을 늘리는 방법 중의 하나로 구성될 수 있다.

프로젝트가 설계하는 특징들에 따라 L2 생태계의 사용자들이 달라질 수 있고, 해당 네트워크가 사용되는 목적들도 달라질 수 있다.

이런 특징들을 잘 선택하여 구성하는 것이 L2 네트워크 생태계를 구축하는데 있어 중요한 포인트들 중 하나로 보인다.

향후 2편에서는 옵티미즘과 아비트럼이 릴레이 트랜잭션을 어떻게 구성하고 있는지에 대한 자세한 내용을 다룰 예정이다. 이 과정에서 옵티미즘과 아비트럼의 코드를 기반으로 분석하여, 각 시스템이 어떻게 릴레이 트랜잭션을 조율하고 있는지를 자세히 살펴볼 것이다.

--

--