앱토스의 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 생태계의 디파이에서 잘못된 컨트랙트가 배포되길 바라며 재진입 공격을 시도 중이다.

여전히 재진입 공격으로 인해 피해가 발생하는 EVM 생태계

<여전히 재진입 공격으로 인해 피해가 발생하는 EVM 생태계, 출처: 구글>

또한 Move/MoveVM은 위에서 언급한 바와 같이, 트랜잭션을 병렬로 처리가 가능하기 때문에 이론상 최대 16만 TPS를 구현 가능할 정도로 확장성이 뛰어나다. 그로 인해 앱토스는 병목 현상에서 자유롭다. 이에 반해 EVM은 이중 지불, 재진입 공격의 위험성 때문에 트랜잭션을 반드시 순차적으로 처리해야 한다. 그로 인해 EVM 체인은 트랜잭션이 한번에 몰리는 경우 가스비가 급격히 높아지며 트랜잭션이 정체되는 병목현상이 발생한다.

그러나 유연성 측면에서는 Solidity/EVM이 Move/MoveVM에 비해 앞서고 있다. 위에서 언급했듯이, Move/MoveVM은 Static dispatch를 사용하는 반면 Solidity/EVM는 Dynamic dispath를 사용하기 때문이다. Move는 Static dispatch를 사용함으로써 스마트 컨트랙트의 보안성은 높일 수 있지만, 스마트 컨트랙트의 기능이 Solidity에 비해 제한된다. 또한 Solidity는 언제든지 프로토콜과 컨트랙트 코드를 업그레이드 가능한 반면에, Move에서는 이러한 업그레이드가 제한된다. 마지막으로 블록체인 간 상호운용성 부분에서 보다 유연한 Solidity가 더욱 확장성이 높으며, Move는 타 체인과의 연결에 제한적인 측면이 있다. 다만, 이는 이더리움을 비롯한 EVM 진영의 지향점이 모듈러 블록체인인 반면, Move 진영은 모놀리틱 블록체인을 지향하기 때문인 것이 주요 원인으로 보인다.

3.2. Move vs Rust

Move는 Rust에서 영향을 받은 언어이기 때문에 Rust의 효율성과 보안성을 그대로 따르는 등 성능과 기능 상에서 Rust와 상당히 유사한 부분이 존재한다. 다만 가장 큰 차이점은 Rust는 범용 프로그래밍 언어인데 반해 Move는 스마트 컨트랙트 전용 개발 언어라는 점이다. Rust는 보다 범용성 있게 사용될 것을 기대하고 만들어진 언어이기 때문에 블록체인이 아니더라도 개발에서 많이 사용되고 있다. 그러다보니 Rust를 사용해 스마트 컨트랙트 코드를 작성할 때 코드 길이가 길어지며 복잡성이 높아진다. 반면 Move는 Rust를 스마트 컨트랙트를 위해 만들어진 블록체인 전용 언어이기 때문에, 다른 개발에서는 사용할 수 없으나 스마트 컨트랙트 코드를 작성할 때 상대적으로 코드가 간결하며 복잡성이 보다 낮아진다.

Move에 비해 비효율적인 Rust의 컨트랙트

<Move에 비해 비효율적인 Rust의 컨트랙트, 출처: Klas 미디움>

위는 솔라나와 수이가 같은 스마트 컨트랙트를 개발할 때의 길이 차이를 비교한 것이다. 이처럼 코드가 길어진다는 것은 스마트 컨트랙트에 대한 공격 가능성이 높아짐을 의미한다. 코드가 길어진다는 것은 개발자가 실수할 가능성도 높아지며 코드 검수를 할 때도 이를 놓칠 가능성이 더욱 높아진다는 것이다. 반면 Move는 코드 개발이 간결하기 때문에 개발자가 실수할 가능성도 낮추며 검수도 용이하다는 장점이 있다.

3.3. Aptos Move vs Sui Move

앱토스 Move와 수이 Move는 모두 같은 디엠 팀에서 출발했기 때문에 많은 부분에서 공통점이 존재한다. 두 프로젝트는 먼저 Rust 기반으로 구축되었기 때문에, 기본적인 문법과 기능이 유사하다. 또한, 스마트 컨트랙트 검증을 위해 Move Prover를 사용하는 것도 공통점 중 하나이다.

다만 앱토스 Move 기존 디엠 블록체인의 원형을 보존한 반면, 수이는 디엠 블록체인을 발전시킨 객체 지향 수이 블록체인을 구축했다. 수이가 객체 지향 블록체인으로 나아간 배경에는 병렬 처리를 지원하기 위해서이고, 이는 읽고 쓸 데이터를 미리 파악해야 하는 방식이다. 그로 인해 앱토스는 리소스 모델을 사용해서 애플리케이션 구성 단위를 <고유 식별자, 속성, Method> 세 개로 구분한다. 반면에 수이는 객체 지향 모델을 사용해 애플리케이션 구성 단위를 <상태, 행위>로 구분한다. 따라서 앱토스 Move는 개발자에게 높은 유연성을 제공하는데 비해 수이 Move는 상대적으로 유연성이 떨어진다.

또한, 앱토스 Move와 수이 Move는 실제 블록체인 단에서의 실행 방식에서 차이점이 존재한다. 먼저 두 블록체인에서는 모두 병렬 처리가 가능하지만 그 방식에는 차이가 있다. 앱토스는 위에서 언급한 바와 같이 Block-STM을 통해 트랜잭션을 병렬로 처리했다면, 수이는 DAG(Directed Acyclic Graph) 구조로 트랜잭션을 저장하는 방식으로 트랜잭션을 병렬로 처리한다. 이는 DAG 구조는 트랜잭션을 서로 연결하지 않기 때문에 트랜잭션을 병렬로 처리할 수 있기 때문이다.

또한 재진입 공격 방지 방식에서도 차이가 있다. 앱토스는 위의 언급처럼 Static Dispatch를 통해 스마트 컨트랙트의 상태를 미리 검증하고 실행을 하는 방식으로 재진입 공격을 방지한다. 반면 수이는 트랜잭션 실행 시 스마트 컨트랙트의 상태를 단 한 번만 업데이트하여 공격자가 트랜잭션을 중간에 중단하더라도 스마트 컨트랙트의 상태가 변경되지 않는 방식으로 재진입 공격을 방지한다. 또한 수이가 사용하는 DAG의 특성 상 트랜잭션의 순서에 의존하지 않기 때문에 공격자가 트랜잭션을 중단하더라도 다른 트랜잭션들이 그와 관계없이 처리되어 재진입 공격이 방지될 수 있다.

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

Move/MoveVM은 블록체인 개발에 있어 손색이 없으나, 여전히 두 가지의 숙제가 존재한다. 먼저 1) Move는 여전히 Solidity 대비 개발자 생태계가 부족하다. 앱토스는 출시된 지 근 1년이 지났으며, 수이는 올해 초에야 메인넷이 출시되었다. 그렇기 때문에 Move는 이미 개발자 생태계가 탄탄하게 구축된 Solidity에 비해 아직 갈 길이 멀다. 8년 전에 탄생한 Solidity는 이미 다양한 개발자 툴들이 출시된 상황이며, Solidity 전용 교육 프로그램도 많이 존재한다. 개발자 입장에서는 자신의 개발에 대한 피드백을 얻을 수 있는 개발자 커뮤니티가 중요한데, 이미 Solidity는 전세계에서 해커톤이 열릴 정도로 많은 개발자들이 존재한다. Turing에서는 Solidity의 개발자 수를 약 20만 명으로 추정하기도 했다.

반면 Move는 페이스북 때부터 개발을 진행해왔으나, 대체로 디엠 팀이 내부적으로 개발을 해왔기 때문에 개발자 생태계가 아직 Solidity만큼 성숙하지도, 규모가 크지도 않다. 앱토스 포럼 등 앱토스 개발자 커뮤니티가 존재하지만, Solidity와 같이 체계적인 교육 프로그램과 개발자 툴, 그리고 자유롭게 피드백을 받을 만한 개발자 커뮤니티는 여전히 부족한 상태이다. 앱토스에서는 집계하지 않았으나, 수이의 개발사 Mysten Labs는 Move 개발자 수를 1만 명으로 추정했다.

두 번째로, Move는 2) 킬러 디앱이 부재하다. 이더리움, 아비트럼 등 수많은 EVM 체인 위에는 크립토 사용자들이 자주 사용하는 디앱들이 다수 존재한다. 하지만 Move 생태계에서는 이렇다할 킬러 디앱이 존재하지 않고 있다. 이러한 킬러디앱의 부재로 인해 9월 26일 기준, 앱토스의 전체 TVL은 $43.5M로 기본 $300M이 넘는 주요 EVM 레이어2보다도 매우 작은수준을 기록하고 있다.(출처: 디파이라마)

앱토스 재단에서 구축한 앱토스 Move Tutorial

<앱토스 재단에서 구축한 앱토스 Move Tutorial, 출처: Aptos Move Github>

다만, 앱토스 재단에서도 이러한 숙제를 이미 인식하고 노력 중인 것으로 보인다. 먼저 앱토스 재단은 개발자 생태계 구축을 위해 개발자 툴 구축을 최우선 과제로 삼고 개발하고 있다. 또한 앱토스 재단에서는 초기 개발자들의 온보딩을 위해 앱토스 튜토리얼을 만들었으며, Move Spider 등과 같은 교육 프로그램도 제작하고 있다. 마지막으로 앱토스 재단에서는 개발자 생태계 발전을 위해 미국, 한국, 중국 등 세계 각지에 개발자 밋업 그룹을 만들며 개발자 커뮤니티 구축을 위해 노력하고 있다.

사업적인 측면에서 앱토스는 NBC유니버설, 마이크로소프트, 구글, 넷마블(마브렉스), 네오위즈, 칭가리(Chingari)와 같은 다양한 분야의 유명 기업들과 적극적으로 파트너십을 맺고 있다. 한편으로는 게임사 온보딩을 위해 AIP-41을 통해 Onchain Randomness를 내재화하는 작업을 진행하고 있는데, 만일 AIP-41이 앱토스에 적용이 된다면, 게임사에서 앱토스를 선택할 여지가 충분하다. 게임사 입장에서는 굳이 아이템의 랜덤성을 보장하기 위해 EVM 체인에서 굳이 체인링크의 VRF 등과 같은 미들웨어 사용을 위한 비용 지출을 하지 않아도 되기 때문이다.

5. 마치며

블록체인 개발 언어를 진화론에 비유

<블록체인 개발 언어를 진화론에 비유, 출처: Klas 미디움>

본 글에서는 앱토스의 Move/MoveVM에 초점을 맞춰, Move/MoveVM의 특징과 기존 블록체인 개발 언어와의 비교를 해보았다. 그 결과, Move는 블록체인 스마트 컨트랙트 작성에 특화된 언어로 기존 언어들에 비해 기술적으로 확연한 장점을 가지고 있는 것을 확인할 수 있었다. 그러나, Move의 개발자 생태계와 디앱 생태계를 봤을 때, Move는 여전히 초기 단계에 있다. 현재 Solidity의 추정 개발자 수는 Move의 20배에 달하며, TVL과 킬러디앱 등을 비교했을 때도 이미 Solidity가 구축해놓은 아성은 높다. 그러나 아직 Move는 세상에 선을 보인지 이제 막 1년이 지난 프로그래밍 언어이며 몇 안되는 블록체인 전용 언어기 때문에 잠재력은 충분하다. 또한 디엠 팀에서 구축한 언어라는 명성도 Move 생태계의 발전 가능성을 높이는 요인 중 하나이다. 따라서 과연 위의 그림과 같이 블록체인 프로그래밍 언어에서 완성형이라고 평가 받는 Move가 Solidity에 비견될 만큼 성장할 수 있을 지 지켜볼 필요가 있을 것이다.

주의사항
본 글에 기재된 내용들은 작성자 본인의 의견을 정확하게 반영하고 있으며 외부의 부당한 압력이나 간섭 없이 작성되었음을 확인합니다. 작성된 내용은 작성자 본인의 견해이며, (주)크로스앵글의 공식 입장이나 의견을 대변하지 않습니다. 본 글은 정보 제공을 목적으로 배포되는 자료입니다. 본 글은 투자 자문이나 투자권유에 해당하지 않습니다. 별도로 명시되지 않은 경우, 투자 및 투자전략, 또는 기타 상품이나 서비스 사용에 대한 결정 및 책임은 사용자에게 있으며 투자 목적, 개인적 상황, 재정적 상황을 고려하여 투자 결정은 사용자 본인이 직접 해야 합니다. 보다 자세한 내용은 금융관련 전문가를 통해 확인하십시오. 과거 수익률이나 전망이 반드시 미래의 수익률을 보장하지 않습니다.
본 제작 자료 및 콘텐츠에 대한 저작권은 자사 또는 제휴 파트너에게 있으며, 저작권에 위배되는 편집이나 무단 복제 및 무단 전재, 재배포 시 사전 경고 없이 형사고발 조치됨을 알려드립니다.