Move 문해력 키우기(1): Why Move?

verse2
verse2
Published in
7 min readFeb 1, 2024

Why Move: Key takeaways

  1. Solidity는 구조적인 문제로 인해 보안적 취약점이 발생할 수밖에 없다. 건강한 블록체인 생태계를 위해 안전한 스마트 컨트랙트에 대한 고찰과 노력이 필수적이다.
  2. Move는 언어 설계 단계에서부터 스마트 컨트랙트 작성에 특화된 형태로 고안되었으며, 높은 안정성과 유연성을 제공한다.
  3. 건강한 블록체인 생태계를 위해선 Move와 같이 새로운 언어 개발을 포함한 다양한 혁신이 지속적으로 필요하다.

도입

크립토는 야생이다. 획기적인 dApp이 나올 때마다 러그풀(rug pull), 취약점 공격(exploit), 스캠(scam)의 위험이 존재한다. 이는 블록체인이라는 데이터베이스가 스마트컨트랙트라는 강력한 무기를 얻게 되면서부터 급속도로 발생하였다. 그리고 막대한 자금을 관리하는 것은 단 몇 줄의 스마트 컨트랙트 코드이다.

Solidity는 세상에 처음 등장한 스마트 컨트랙트로, 수 많은 개발자들을 선점하였다. 수 많은 프로그래밍 언어가 존재하는 것에 비해 Web3 대부분의 서비스는 십수 년간 EVM 기반의 Solidity로 개발 되고 있다. 그만큼 커뮤니티가 잘 형성되어 개발이 용이하다는 장점이 있지만 건강한 개발 생태계를 위해서는 다양한 언어와 인프라가 지원될 필요가 있다. 이번 아티클에서는 새로운 스마트 컨트랙트 플랫폼인 Move에 대해 어떤 특장점이 있는지를 소개하도록 하겠다.

새로운 스마트 컨트랙트

EVM은 완벽하지 않다. 적어도 크립토의 안전한 Mass adoption이라는 목표에는 적합하지 않다는 뜻이다. 반복되는 크립토 시장에서의 해킹 사건들이 이런 문제를 반증한다. 개발단계에서 아무리 조심하고 보안적인 문제를 고려하며 개발을 하더라도 항상 예상치 못한 문제는 존재하기 마련이다. 예를 들어 Solidity의 저수준(low-level) 상호작용을 위해 사용되는 call 함수와 같은 인터페이스는 Reentrancy Attack 같은 치명적인 문제를 야기하는 경우가 있다. 이는 스마트 컨트랙트의 기능 요구사항과 Solidity 언어적 한계에서 기인한, 피할 수 없는 문제 중 하나이다.

Re-entrancy Attack

해결책은 무엇일까?

바로 원천적인 수준(스마트 컨트랙트 언어적 수준)에서 이런 문제를 방지하는 것이다.

Move는 이런 문제들을 해결하기 위해 자체적으로 제공되는 테스팅/분석/검증 툴과 함께 등장하였다.

스마트 컨트랙트의 역할

블록체인 기술이 급속도로 발전함과 동시에 수 많은 스마트 컨트랙트 개발 툴들과 dApp들이 등장하였다. 하지만 이 많은 서비스들이 결과적으로 하고자하는 행위는 다음과 같이 요약이 된다. 바로 ‘자산의 이동, ‘이동의 규칙’, ‘이동 실행’이다. 어떠한 컨트랙트든 이 세 가지로 나뉘게 된다. 하지만 서비스가 복잡해질 수록 점점 알기 어렵고, 부작용을 일으킬 수 있는 동작들이 스마트 컨트랙트 상에 구현되곤 한다.

지난 십 수년간의 컨트랙트 생태계는 어땠을까. 다양한 해킹사고와 보안적 문제들을 겪고는 어느정도 안정 수준에 다다르게 되며 템플릿화 된 코드를 각 서비스의 비즈니스에 맞게 조금씩 수정하여 사용하고 있다. 패턴화 된 코드들은 점점 혁신보다는 안정성에 집중하고 있는 것이다. 이런 부진은 스마트 컨트랙트의 근본적인 문제를 해결하는 것과는 거리가 멀다.

안전한 스마트 컨트랙트 작성을 위한 새로운 언어가 필요한 시점이다. 새로운 언어는 프레임워크 수준에서 앞서 말한 스마트 컨트랙트의 세 가지 기능을 robust하게 지원해야 한다. 이 때문에 Move와 같은 새로운 플레이어가 등장하며 스마트 컨트랙트 생태계 전체의 성장을 도모할 것으로 주목받고 있는 것이다.

Move의 차별점

1. 타입 시스템과 Bytecode 검증
Move의 신뢰성의 핵심은 엄격한 타입시스템과 Bytecode 검증을 통해 이뤄진다. Move의 타입시스템은 단순이 데이터 구조를 정의하는 프레임워크가 아닌 자산, 메모리, 리소스(resource)의 안정성을 확보하는 포괄적인 역할을 하고 있다. Move는 컨트랙트 상의 자산과 관련된 모든 오퍼레이션(operation)을 정해진 규칙에 맞는 지를 통해 허용된 행동과 의도되지 않은 행위를 방지하는 검증 기능을 제공하고 있다. 또한 Move에 내장되어 있는 Bytecode 검증기는 앞서 말한 시스템을 스마트컨트랙트가 블록체인에서 실행되기 전에 bytecode 수준에서 엄격하게 분석하게 된다. 이 같은 2중 구조는 컨트랙트가 의도된 형태로 동작하게 하며 흔하게 발생할 수 있는 에러와 취약점을 방지하는 큰 역할을 하게 된다.

2. Resource 모델 기반 자산
Move는 스마트 컨트랙트 내의 자산과 소유권을 일급 객체(first-class citizen)으로 다루는 획기적인 방법을 제안하고 있다. 이런 접근 방식은 스마트 컨트랙트의 타입시스템과 직접적으로 연결되어 디지털 자산을 다루는데 직관적이고 자연스러운 인식을 제공하게 된다. 이런 방식을 Move에서는 Resource 모델이라 하며 모든 디지털 자산을 마치 물리적인 실체를 가진 것으로 취급하게 된다. 이 방식은 Rust의 소유권(ownership) 방식에 크게 영감을 받았으며 자산의 복제(copy), 이중 지불(double spending)과 자산의 제거(destruction) 같은 이슈들을 예방하게 된다.

Solidity와 같은 기존 스마트 컨트랙트들은 자산을 표현할 때는 2차 구성요소 (secondary struct)로 표현되는데, 이는 자산의 복잡성을 높이고 안정성을 해치는 주요 원인이 된다. Move는 자산을 원시 타입 (primary type)으로 표현하여 엄격하고 명확한 형태로 관리하며, 기존의 패러다임을 뒤엎는 디자인을 채택하였다. 이로 인해 개발자 경험과 컨트랙트 신뢰성을 모두 확보하여 자산과의 상호작용을 더욱 매끄럽고 안전하게 만들어준다.

3. 고립(isolation)과 강건성(robust)을 통한 안정성
Move의 모듈 시스템은 고립성과 강건한 안전성을 제공하여 서로 다른 컨트랙트 사이의 안전한 상호작용을 지원하는 메커니즘이다. Move의 각 모듈은 타입과 함수를 캡슐화 시키고, 정의된 범위 내에서만 동작하게 하여 다른 모듈에 의한 의도되지 않은 접근을 방지하게 된다. 모듈은 자산을 나타내는 Resource를 표현하는 ‘타입’과 규칙을 담당하는 ‘함수’의 모음으로 정의되며 모듈은 해당 모듈을 발행(publish)한 계정 내에 저장되어 접근 권한을 제한하여 고립성을 가지게 된다. 이에 대한 자세한 내용은 Move Resource 모델에 대한 아티클에서 다루도록 하겠다. 아래 예시는 ‘0x42’ 계정이 발행한 ‘test’라는 이름의 모듈이며, 모듈 내에는 ‘Example’이라는 Resource가 담겨져 있다.

이런 고립성은 여러 모듈의 무결성과 안정성을 확보하는데 필수적이며 특히 탈중앙화 된 환경에서 복잡한 방식으로 여러 모듈이 상호작용할 때 진가를 발휘하게 된다. 특히 개발자들이 새로운 모듈을 개발하거나, 기존 모듈 간 통합 시 발생할 수 있는 다양한 에러와 보안 문제를 최소화하는 방향으로 설계하는데 큰 도움이 된다.

결론

Move는 새로운 스마트 컨트랙트 그 이상으로, 블록체인 어플리케이션의 개발과 보안 패러다임을 바꾸었다. 안정성(safety)과 단순함(simplicity), 유연성(versatility)에 집중하여 역동적인 혁신을 보여주고 있다. Move의 가능성을 더 깊게 탐구할수록 스마트 컨트랙트의 표준을 재정의할 수 있는 가능성이 높아질 것이라 기대하며, 급변하는 블록체인 세상에서 이정표가 되어 줄 것이라 믿게 된다.

작성자 : Harvey
검수자 : Ryan

verse2는 DeFi 서비스 개발에 전문화된 팀이자, 높은 잠재력을 가진 Crypto 프로젝트의 인큐베이터입니다. 팀은 다양한 프로토콜을 개발 및 운영하여 DeFi 분야에 대한 심층적인 지식과 경험을 보유하고 있습니다.

verse2 [Homepage | Twitter | Medium]

--

--

verse2
verse2
Editor for

Build, incubate, invest — Making all possible in the crypto. / verse2.io