앱토스의 Move, Solidity의 아성에 도전하다

user-image
강동현
Research Analyst/
Xangle
2023.09.27

앱토스의 Move, Solidity의 아성에 도전하다

1. 들어가며

2. Move란?

3. 타 언어 및 VM과의 비교

4. 개발자 생태계 활성화와 킬러 디앱 발굴은 여전히 숙제

5. 마치며

 

 

1. 들어가며

웹3 업계에서는 사용자에게 Seamless한 경험 제공이 강조되고 있다. 이러한 관점에서 볼 때, 디앱이 어떤 블록체인 위에 구축되어 있는지 보단 어느 블록체인을 사용하든 사용자가 문제 없이 서비스를 즐길 수 있도록 하는 멀티체인의 상호운용성(Interoperability)이 더욱 중요하게 여겨지고 있다. 2021-2022년에는 모놀리틱 체인과 멀티체인 간의 논쟁이 활발히 이루어졌으며, 이 과정에서 대표적인 모놀리틱 체인으로 꼽히던 솔라나와 루나 등이 떠올랐다가 가라앉으면서, 현재는 앱토스와 수이가 다음 타자로 시장에서 주목 받고 있다.

앱토스와 수이는 메타(Meta)의 블록체인 프로젝트 디엠(구 리브라)에서 파생된 것으로, Move라는 프로그래밍 언어를 사용하는 것이 공통점이다. 이에 본 글에서는 앱토스에 초점을 맞춰, 앱토스가 사용하고 있는 Move 언어와 가상머신 MoveVM의 특징에 대해서 알아보고, 기존 프로그래밍 언어와 가상머신인 Solidity/EVM이나 Rust/WASM에 비해 어떤 강점을 가지고 있는지를 살펴보도록 하겠다.

2. Move란?

2.1. Move 탄생 배경

페이스북(현 메타)의 디엠 팀은 블록체인 업계에서 표준으로 자리잡은 프로그래밍 언어 Solidity에서 두 가지의 한계를 발견했다. 먼저 1)Solidity는 이중 지불 공격, 재진입 공격 등 보안상 공격 지점이 존재한다. 물론 Solidity를 사용하는 이더리움 등의 블록체인에서는 합의 알고리즘을 통해 이러한 공격을 방지하고 있으나, 언어 자체에서 공격 가능 지점이 존재하는 것은 사실이다.

다음으로 2) Solidity에서는 트랜잭션의 병렬 처리가 어려워 병목 현상이 발생한다. 현재 Solidity는 이중 지불 방지를 위해서 반드시 스마트 컨트랙트 등 트랜잭션을 순차적으로 실행해야 한다. 그리고 이러한 순차적 실행을 할 경우 속도에 제한이 걸리기 때문에, 블록체인의 확장성을 저해한다.

이러한 이유로 디엠(메타의 블록체인 사업부) 팀은 기존 프로그래밍 언어인 Rust에서 영향을 받은 Move라는 언어를 개발했다. Rust는 훌륭한 언어이지만, 이를 그대로 사용하여 스마트 컨트랙트를 작성하기에는 자칫 코드가 길어질 수 있어 여전히 아쉬운 면이 존재했기 때문이다. 이후 앱토스는 기존 Move의 원형 위에서 객체 지향 프로그래밍 모델을 제공하는 앱토스 Move로, 수이는 객체 지향 언어인 Sui Move로 발전하게 된다.

2.2. 앱토스 Move/MoveVM만의 특징

앱토스의 Move/MoveVM은 위에서 언급한 단점들을 보완하고자 처음부터 보안성에 주안점을 두어 설계되었다. 그 외에도 앱토스는 Move의 컨트랙트 코드를 간소화하고 병렬 처리가 가능하도록 개발하여 블록체인에 대한 공격 가능성은 최소화하고, 확장성은 최대화했다. 이번 장에서는 Move가 어떤 기술을 통해 이러한 특징을 가질 수 있는지 알아볼 것이다.

정형 검증을 사용한 Move Prover와 리소스 모델로 공격 가능성 최소화

정형 검증(Formal Verification)이란 소프트웨어의 코드가 특정 규칙 혹은 속성을 만족하는 지를 수학적으로 증명하는 과정이다. 앱토스의 Move는 정형 검증을 앱토스의 스마트 컨트랙트의 안정성을 검증하는 도구인 Move Prover에 적용했다. Move Prover는 사용자가 기술한 속성을 정형 검증한다. Move의 타입 시스템에서는 Assets을 담는 변수의 값은 복사가 안되고, 암시적 삭제도 되지 않는다. 따라서 Move에서는 이중지불이 존재할 수 없는 것이다.

또한 MoveVM은 함수 호출 시 발생하는 재진입 공격을 방지하기 위해 Static dispatch로 함수를 호출한다. 기존 EVM은 Dynamic dispatch를 사용하는데, 두 방식은 함수 호출 시기에 차이가 있다. 프로그램 실행은 보통 <컴파일 → 링크 → 로드 → 런 → 종료> 순으로 이루어진다. Static dispatch는 컴파일 시점에 호출할 함수를 결정하기 때문에, 스마트 컨트랙트는 이 단계에서 기본적인 오류를 검사하는 단계를 거치게 된다. 그렇기 때문에 MoveVM에서 스마트 컨트랙트가 먼저 검증 단계에 들어가 재진입 공격을 원천적으로 차단할 수 있다.

트랜잭션 병렬 처리

앱토스 MoveVM은 트랜잭션 병렬 처리를 통해 확장성도 높인다. MoveVM은 트랜잭션 병렬 처리를 하기 위해서 Block-STM(Block-Level Software Transactional Memory)을 통해 데이터베이스의 트랜잭션을 여러 쓰레드에 분배해서 병렬로 실행한다. Block-STM에 대해서 자세히 살펴보면,

  • Block-STM은 낙관성 동시 제어(Optimistic concurrency control)를 통해 트랜잭션을 병렬로 실행한 후 검증한다. 또한 충돌이 발생한 트랜잭션은 재실행된다.
  • 또한 Block-STM은 write-write 간의 충돌을 막기 위해 다중버전 데이터 구조(Multi-version Data Structure)를 사용한다. 모든 write는 동일한 장소에 저장되며, 트랜잭션 ID와 재실행 횟수도 함께 저장한다. 이를 통해서 트랜잭션이 재실행되더라도 다중버전 데이터 구조에서 미리 설정된 순서대로 순차적으로 트랜잭션을 처리할 수 있다.
  • 또한 Block-STM은 협업 스케줄러(Collaborative schedule)를 도입하여 하위 트랜잭션의 실행 및 유효성 검사 작업의 우선순위를 설정해 트랜잭션 쓰레드 간의 처리 순서를 미리 지정한다. Move는 협업 스케줄러를 통해 트랜잭션 간의 충돌을 방지하며, 트랜잭션이 무효화되는 것을 방지한다.
  • 마지막으로 동적 종속성 추정(Dynamic dependency estimation)을 통해 트랜잭션의 종속성을 추정해서 연관성이 있는 트랜잭션을 그룹으로 묶는다.

이렇게 앱토스는 Block-STM을 통해서 다음과 같은 방식으로 트랜잭션을 병렬 처리한다. 또한 벨리데이터가 검증은 다 같이 하더라도 실행은 각 벨리데이터들에서 병렬로 진행되어 확장성을 더욱 높일 수 있다. 아래는 앱토스의 트랜잭션 병렬 처리 과정을 간결하게 요약하면 다음과 같다.

  1. 사용자가 트랜잭션을 생성해 네트워크에 전송
  2. 벨리데이터가 트랜잭션을 검증
  3. 검증된 트랜잭션은 동적 종속성 추정에 의해 트랜잭션 그룹으로 묶이며, 이와 동시에 각 트랜잭션 그룹은 벨리데이터에 의해 병렬로 처리됨
  4. 처리된 트랜잭션은 블록으로 생성되고 네트워크에 전파

앱토스만의 토큰 스탠다드를 통해 개발자 및 사용자 편의성 증대

앱토스는 또한 Move를 통해 앱토스만의 자체 토큰 스탠다드인 Aptos Coin Standard를 구축했다. 앱토스는 자체 토큰 스탠다드를 구축하면서 기존 EVM이 가졌던 한계를 개선했다. MoveVM에서는 토큰 발행을 위해 별도의 스마트 컨트랙트를 발행할 필요가 없으며, 그로 인해 소액의 가스비 만을 지불하면 발행이 가능해진다. 그러나 이는 non-EVM 블록체인인 솔라나, 알고랜드 등도 자체 토큰 스탠다드를 사용하기 때문에 별로 특별한 장점은 아니었다.

그러나 2023년 8월부터 앱토스는 Digital Asset Standard라는 새로운 스탠다드를 도입했다. 그 중 주목할 점은, 이러한 새로운 스탠다드에서는 새로운 프레임워크를 적용해 토큰의 유연성과 성능을 높였으며, 대규모 트랜잭션 처리를 가능하게 했다. 또한 웹2 기업들을 위해 토큰 레벨에서 자산 통제권을 설정할 수 있도록 하였다. 실제 웹2 기업들은 RWA를 토큰화할 때 자산에 대한 통제권을 원한다. 그러나 이더리움에서는 이를 실현하기 어려워 많은 기업들이 자체 블록체인을 만드는 노력을 들이는 데 반해, 앱토스는 이를 프로토콜 레벨에서 토큰 스탠다드 설정만으로 가능하게 만들었다.

3. 타 언어 및 VM과의 비교

3.1. Move vs Solidity

Move/MoveVM은 Solidity의 한계 보완을 목적으로 탄생했기 때문에, Solidity 대비 더 뛰어난 보안성과 확장성을 확보했다. 위에서 언급한 Move/MoveVM의 특징이 앱토스에게 더 나은 보안성과 확장성을 가져다 준다. Move/MoveVM은 2.1.에서 언급한 것처럼 이중 지불과 재진입 공격을 언어 단계에서 차단하는 데 반해, Solidity/EVM은 이미 수많은 재진입 공격이 발생한 사례가 존재한다. 이더리움의 2016년 The DAO 공격이 대표적이며, 이더리움 재단 차원에서 방지책을 냈지만 여전히 디파이에서 수많은 재진입 공격이 발생 중이다. 아직도 해커들은 시시탐탐 EVM 생태계의 디파이에서 잘못된 컨트랙트가 배포되길 바라며 재진입 공격을 시도 중이다.