Layer2를 이용한 블록체인 성능향상

707·2022년 8월 18일
0

블록체인

목록 보기
8/10
post-thumbnail

✏️ 본 게시물은 인프런 강의 <블록체인 이더리움의 성능확장 솔루션 아비트럼> 을 정리한 글입니다


1. 블록체인의 문제점

블록체인의 트릴레마

성능(수수료, 처리속도) - 보안 - 탈중앙화
세가지를 모두 만족시키기 어렵고 하나가 강화되면 다른 하나는 약화될 수 밖에 없는 구조

이러한 한계를 극복하기 위해 나온 해결법으로
메인넷 밖에서의 (오프체인) 거래를 통해 단점을 해결하려는 솔루션이 등장함

오프체인의 예시로는 아래가 있음

  • 비트코인 : 라이트닝 네트워크
  • 이더리움 : 상태채널, 사이드체인, 레이어2

오프체인 성능확장 솔루션

L1 ↔️ 브릿지 ↔️ L2

  • 메인넷(L1) : 높은 수수료, 느린 속도
  • Off-Chain(L2) : 낮은 수수료, 빠른 속도

브릿지를 이용하여 메인넷의 자산을 옮겨온 다음 L2에서 거래 처리
거래가 끝나거나 L1으로의 복귀가 필요할 때 브릿지를 통해 다시 되돌아옴.

브릿지를 이용하여 레이어를 이동할 때 수수료가 발생하므로 잦은 브릿지 사용은 바람직하지 않으며, 대부분은 오프체인에서 한동안 있으면서 거래를 하고 끝나면 돌아옴.

이더리움의 오프체인 솔루션

(출처 : 인프런 강의)

위의 오프체인 확장 솔루션을 간단히 정리하자면
별도의 네트워크를 만들어서 거기서 거래를 처리하되

  1. 거래내용을 메인넷(L1)에 기록하면 Rollup
  2. 기록을 아예 안하면 Sidechain
  3. 가끔만 요약해서 기록하면 Plasma

이렇게 나눠지고,
당연히 메인넷과의 연관성이 떨어질수록 많은 트랜잭션을 처리할 수 있지만 보안성과 신뢰성이 떨어지게 된다.


이 중 가장 믿을 수 있는 Rollup 방식의 솔루션 : 이걸 레이어2로 부름

이더리움 메인넷이 아닌 다른 체인으로 자산을 옮겨 거래를 하고자 할 때 가장 중요한 것이 바로 해당 체인의 거래중개자를 믿을 수 있는가? 일 것이다.

이런 신뢰의 문제를 해결하기 위해 rollup에서는 거래 내역을 L1에 기록하며 거래를 검증할 수 있게 해두었다.
이러한 방식이기 때문에 L2에서 문제가 발생하더라도 L1의 자산이 복구가 가능하다.

이런 Layer2 솔루션 중 가장 많이 사용되는 것이 바로 arbitrum

옵티미스틱 롤업과 아비트럼

위에서 보았듯이 롤업의 종류에는 zk-rollupop-rollup이 있다.
아비트럼은 그 중에서도 op-rollup. 즉, optimistic Rollup에 속한다.

옵티미스틱 롤업이란?

대부분의 L2 중개자들은 착한 사람이며 올바르게 거래를 처리할 것이다! 라고 optimistic하게 생각하는 것.
다만, 아무 근거 없이 중개인을 믿는 것이 아니라 부정거래나 실수가 있을 경우에는 검증을 통해 적발하고 수정할 수 있게끔 하는 방식 : fraud proof

검증을 위해 L2에서 발생한 거래 내역을 저장해야 한다 : rollup
이 내역을 불특정 다수가 합의하는 L1에 저장함으로써 위변조가 불가능하게끔 함.

검증기간(Challenge period)을 충분히 줄것 : 약 7일
검증기간동안 이의가 없으면 해당 거래내역이 확정됨.
만약 중개인이 부정을 저지르면 중개인이 맡긴 보증금을 몰수하여 그것을 밝힌 검증자에게 지급함으로써 신뢰성 보장.

Arbitrum

아비트럼은 아직 베타테스트 중이고 (지금도인지 확인해봐야함)
약 4500tps로 수수료가 저렴하고 속도가 빠르다.
EVM을 지원하기 때문에 L1에서 실행되는 컨트랙트를 거의 그대로 옮겨올 수 있다는 것이 장점.

어플리케이션은 계속 l2에서 살고 가끔 필요에 의해 l1으로 옮겨오게됨.

브리지를 통해 L1 ↔️ L2 간의 이더리움 이동을 구현해 볼 것임.


2. 아비트럼 브리지 사용해보기

(1) L1에서 L2로 이더리움 이동하기


아비트럼 브리지 접속 후 메타마스크 연결

메타마스크에서 Rinkeby 테스트넷을 선택하면 해당 테스트넷의 잔액을 가지고 온다.

나는 잔액 중 0.1 RinkebyETH를 아비트럼으로 옮길 것이기 때문에 해당 금액을 입력 후 Move funds to Arbitrum Rinkeby 버튼을 누른다.

약 10분간의 처리시간이 필요하다고 뜬다. 실제로는 한 3~4분 내에 처리가 완료되었다.
L1(이더리움 메인넷, 지금은 Rinkeby테스트넷)에서 0.1ETH가 빠지는 트랜잭션이 처리된 후,
L2(아비트럼)에서 0.1ETH가 추가되는 트랜잭션이 처리되야 한다.
총 2번의 트랜잭션이 필요한 셈이다.

메타마스크에 아비트럼 테스트 네트워크를 추가해주면 L2로 보낸 이더리움이 잔액으로 뜨는 것을 확인할 수 있다. 아래와 같이 직접 입력하여 추가하거나 아비트럼 테스트넷의 explorer 사이트 하단에 Add Arbitrum Network연결 버튼을 누르면 자동으로 추가된다.

(2) L2에서 L1으로 이더리움 인출하기

같은 방식으로 위 브리지 사이트에서 L2의 이더리움을 L1으로 이동시킬 수 있다.

다만, 다른 점은 L2에서 L1으로 이동하고자 할 때에는 시간이 더 오래 소요된다. 강의 촬영 시점에서는 약 7일 정도로 나와있었는데 지금은 27시간으로 뜨는 걸 보니 계속 개선 중인 듯 하다. (그래도 ㅎㅎ 오래걸린다..)

L2에서 L1으로 보낸 이더리움은 시간이 경과 후 트랜잭션이 완료 되었을 때 브리지 사이트에서 claim 버튼이 뜨고, 클릭 시에 L1의 계정에 최종적으로 잔액이 추가된다.

(3) 아비트럼의 기본 원리

핵심은 L2의 거래 내역을 L1에 저장하는 것 : 어떻게 저장할까?

  1. 유저가 L2에 트랜잭션을 발생시키면
  2. L2에서는 트랜잭션을 처리하면서
  3. 트랜잭션에 담긴 calldata (호출된 함수 정보)를 압축, 배치하여
  4. L1의 inbox에 담아둔다.
  5. L2에서 실행되었던 트랜잭션은 validator가 L1의 inbox를 확인하여 검증한다.
  6. 검증이 된 거래는 Rollup의 상태를 확정함으로써 최종적으로 완료된다.
  7. 만일 검증 시에 문제가 발견된다면 Rollup에서 일정기간동안 챌린지가 일어나게 된다.

이런 방식으로 L2내에서 발생했던 거래를 L1에 저장, 검증하게 되는데
거래는 크게 inboxoutbox 컨트랙트 2가지로 나누어 저장하게 된다.
L1에서 L2로 들어갈 때는 inbox, L2에서 L1으로 나갈때는 outbox에 데이터가 저장된다.


0개의 댓글