옵티미즘 초보자 가이드 1편 : 환경설정 및 설치

Darren K
Tokamak Network
Published in
9 min readMay 20, 2021

TL;DR

Build repository

$ git clone https://github.com/ethereum-optimism/optimism.git
$ cd optimism
$ yarn && yarn build

Unit test

$ yarn test

Run

$ cd ops
$ export COMPOSE_DOCKER_CLI_BUILD=1
$ export DOCKER_BUILDKIT=1
$ docker-compose build
$ docker-compose up -d

Integration test

$ cd ../integration-tests
$ yarn build:integration
$ yarn test:integration

옵티미스틱 롤업 사용하기 시리즈는 총 세 개의 포스팅으로 구성됩니다.

옵티미스틱 롤업 사용하기
옵티미스틱 롤업에서 ERC20 사용하기
옵티미스틱 롤업에서 ERC721 사용하기

들어가기 전에

이더리움은 업데이트를 통해 트랜잭션 수수료의 부담을 줄이기 위한 노력을 하고 있지만, 이더리움의 가격 상승과 트랜잭션 경쟁 심화 등의 이유로 수수료 부담은 크게 줄고 있지 않습니다. 이더리움 레이어2 솔루션은 이더리움 메인 체인 외부의 별개의 체인을 두어 확장성을 높이고 수수료 부담을 줄여줄 수 있는 솔루션으로써, 다양한 솔루션이 존재하며 성과도 나오고 있는 분야입니다. 이 글은 스마트 컨트랙트를 지원하는 레이어2 솔루션인 옵티미스틱 롤업의 설치 방법과 간략한 설명을 다루는 글입니다.

옵티미스틱 롤업 개요

옵티미스틱 롤업은 스마트 컨트랙트를 지원하는 이더리움 레이어2 솔루션이며, 스마트 컨트랙트를 지원한다는 것이 여러 레이어2 솔루션들과 비교했을 때 가장 차별화되는 부분입니다. 초기의 롤업은 레이어2에서 토큰 전송만을 지원하는 모델부터 시작했는데, 스마트 컨트랙트를 사용할 수 없기 때문에 굉장히 제한적으로 사용될 수밖에 없었습니다. 옵티미스틱 롤업은 레이어2에서도 스마트 컨트랙트를 지원하여, 현재 이더리움 생태계의 Dapp들을 레이어2에서 사용할 수 있도록 하는 것이 목표입니다.

옵티미스틱 롤업은 레이어2에서 스마트 컨트랙트를 지원하고, 동시에 그러한 레이어2 컨트랙트 실행을 레이어1에서 검증할 수 있도록 하기 위해 EVM의 실행 환경을 가상화하여 OVM이라는 환경에서 트랜잭션을 실행합니다. OVM은 EVM과 호환되는 실행 환경으로써, EVM 위에서 실행되는 여러 컨트랙트로 구성됩니다. 레이어2의 트랜잭션들은 OVM 환경 내에서 실행되며, 레이어2의 트랜잭션들이 레이어1에서 검증될 때 레이어1의 EVM으로 직접 실행되는 것이 아니라 OVM 내에서 검증 과정을 거치게 됩니다.

옵티미스틱 롤업은 스마트 컨트랙트를 지원하기 때문에 토큰 전송만을 지원하는 레이어2 솔루션들보다 복잡한 구조를 갖습니다. 옵티미스틱 롤업의 레이어2에서는 이더리움 메인 체인과 거의 같은 방식의 독자적인 체인을 갖고 있으며, 레이어2의 트랜잭션들은 이러한 레이어2 체인에서 실행됩니다. 또한 옵티미스틱 레이어2 체인은 스마트 컨트랙트를 지원하기 위해 이더리움 클라이언트를 조금 수정한 클라이언트를 사용하며, 레이어1과 레이어2의 중간 다리 역할을 하는 서비스들을 포함하고 있습니다. 아래에서 옵티미스틱 롤업을 사용해보기 위해 필요한 서비스들을 다루는 방법과, 각 서비스들의 간략한 설명을 다루겠습니다.

패키지들

옵티미스틱 롤업을 사용해보기 위해서는 많은 서비스들이 실행되어야 합니다. 테스트 용도의 레이어1, 레이어2 클라이언트는 물론이고, 중간 다리 역할을 하는 여러 서비스들도 실행되어야 합니다. optimism 저장소는 이러한 여러 패키지를 관리하는 Monorepo로써, 옵티미스틱 롤업을 실행할 때 필요한 모든 패키지들을 포함하고 있습니다. 또한, 많은 패키지들을 쉽게 관리하고 실행할 수 있도록 도커를 활용하고 있습니다. 아래에서는 optimism 저장소에 어떤 패키지들이 있는지, 각 패키지가 옵티미스틱 롤업에서 어떤 역할을 하는지 등의 간략한 설명과, 개인 PC에 옵티미스틱 롤업 환경을 어떻게 만들어 볼 수 있는지를 살펴보겠습니다.

저장소 정보

Repository : https://github.com/ethereum-optimism/optimism

Commit : 751e2be

주요 디렉토리

  • packages/contracts
  • packages/data-transport-layer
  • packages/batch-submitter
  • packages/message-relayer
  • l2geth
  • integration-tests
  • ops

packages/contracts

옵티미스틱 롤업에서 필요한 모든 컨트랙트를 관리합니다. 여기에는 EVM과 OVM에서 실행될 컨트랙트들이 모두 포함되어 있는데, 각 컨트랙트 파일 상단의 주석에서 간단한 설명을 참고할 수 있습니다.

EVM용 컨트랙트는 일반적인 스마트 컨트랙트로써, 솔리디티로 구현한 파일을 일반적으로 사용하는 solc를 통해 컴파일합니다.

OVM용 컨트랙트는 옵티미스틱 롤업의 가상 실행 환경 위에서 실행되는 컨트랙트로써, 솔리디티로 구현한 파일을 옵티미즘에서 제공하는 solc로 컴파일합니다. 옵티미스틱 롤업은 Layer1과 Layer2에서 동일한 실행 환경을 만들어 검증이 가능하도록 OVM이라는 가상 실행 환경을 제공하며, 일반적으로 EVM에서 실행되는 스마트 컨트랙트와는 조금의 차이가 있습니다.

packages/data-transport-layer

Layer1에서 발생한 이벤트를 모니터링하여 발생한 이벤트들에 대한 정보를 DB에 저장하고, 저장된 정보를 Layer2의 Sequencer(블록 생성자)가 가져갈 수 있는 기능을 제공합니다. Layer1과 Layer2를 연결하는 서비스 중 하나이며, 서비스 내에 있는 자체 DB에 정보를 쌓고 Layer2의 geth 노드가 필요한 정보들을 가져갈 수 있도록 서버 역할도 담당하는 서비스입니다.

packages/batch-submitter

Sequencer가 Layer2에서 발생한 트랜잭션들을 수집해 Layer1의 컨트랙트에 정보를 올리는 기능을 제공합니다.

packages/message-relayer

Layer2에서 발생한 트랜잭션이 Layer1에 등록된 후, 검증 기간이 지난 트랜잭션에 대한 상태를 확정시키는 기능을 제공합니다. 옵티미스틱 롤업은 Fraud proof 검증 방식을 사용하기 때문에, Layer2에서 실행된 트랜잭션이 확정된 뒤 반영되려면 추가적인 행동이 필요하며, message-relayer가 그러한 역할을 담당하게 됩니다.

l2geth

Layer2의 트랜잭션을 처리하는 클라이언트입니다. 옵티미스틱 롤업에서 필요한 Layer2 관련된 기능이 추가된 옵티미스틱 롤업 클라이언트입니다.

integration-tests

필요한 모든 서비스가 실행된 상태에서 통합 테스트를 해 볼 수 있습니다.

ops

옵티미스틱 롤업을 사용하기 위해 필요한 서비스들을 도커로 관리하는 디렉토리입니다. 도커로 패키지들을 관리하는 부분은 아래에서 설명합니다.

도커 환경

optimism 저장소에서는 많은 패키지들을 쉽게 관리할 수 있도록 도커를 활용하고 있습니다. 저장소 내의 각 패키지들은 별개의 도커로 실행되며, 패키지 실행 외에도 빌드, 배포, 테스트 등의 용도로 도커를 활용합니다. 아래에서는 각 도커 환경이 어떤 역할을 하며 어떤 관계로 구성되는지 설명합니다.

builder

저장소 내의 패키지들을 빌드하는 용도로 사용합니다. 여기서 필요한 패키지들을 빌드하고 다른 서비스용 도커에서는 필요한 파일들을 가져가 사용합니다.

l1_chain

Layer1 노드 용도로 사용되는 도커입니다.

deployer

옵티미스틱 롤업에 필요한 컨트랙트들을 배포하는 도커입니다. contracts 패키지에 포함된 컨트랙트들을 배포합니다.

dtl

data-transport-layer 서비스용 도커입니다.

l2geth

Layer2 용도로 사용되는 도커입니다.

relayer

message-relayer 서비스용 도커입니다.

batch_submitter

batch-submitter 서비스용 도커입니다.

integration_tests

통합 서비스에 사용되는 도커입니다.

환경 구성하기

옵티미스틱 롤업을 사용하기 위한 환경을 구성하고 실행하여 테스트를 돌려볼 수 있는 명령어들을 소개합니다.

Clone repository

$ git clone https://github.com/ethereum-optimism/optimism.git
$ cd optimism
$ yarn && yarn build

Unit test

$ yarn test

Run

$ cd ops
$ export COMPOSE_DOCKER_CLI_BUILD=1
$ export DOCKER_BUILDKIT=1
$ docker-compose build
$ docker-compose up -d

Integration test

$ cd ../integration-tests
$ yarn build:integration
$ yarn test:integration

추가: AWS내에 환경 구성

옵티미스틱 롤업 환경을 AWS와 같은 클라우드 환경으로 구성하여 외부에서 접근하려는 경우 필요한 포트를 열어야 합니다. 옵티미스틱 롤업의 Layer1, Layer2 노드에서 사용하는 RPC Endpoint 포트의 정보는 아래와 같습니다.

Layer 1

  • 9545 : http

Layer 2

  • 8545 : http
  • 8546 : ws

정리

옵티미스틱 롤업을 사용해보기 위한 환경의 구성과 그 안에 포함되는 여러 서비스들의 역할을 살펴보았습니다. 메인넷만을 위해 개발할 때는 ganache 등으로 쉽게 개발 환경을 구성해볼 수 있는데, 옵티미스틱 롤업의 경우 추가적으로 신경써주어야 할 부분은 있지만 자동화가 잘 되어있어서 개발 환경의 관리가 어렵지 않다는 것을 확인할 수 있었습니다. 이어지는 포스팅에서는 이렇게 구성한 옵티미스틱 롤업 환경 안에서 실제로 트랜잭션을 날려보면서 테스트해보는 방법에 대해 알아보겠습니다.

참조

Optimism Monorepo

--

--