Skip to main content
QUICK REVIEW

[논문 리뷰] Mandala: A Smart Contract Programming Language

Markus Knecht|arXiv (Cornell University)|2019. 11. 26.
Blockchain Technology Applications and Security참고 문헌 1인용 수 6
한 줄 요약

Mandala는 자원 사용, 액세스 제어 및 오류 처리에 대한 컴파일 타임 보장을 강제하여 최대한의 안전성과 감사 가능성을 확보하기 위해 고안된 정적 타입, 비 Turning 완전(non-Turing-complete) 스마트 계약 언어입니다. 자산과 권한을 모델링하기 위해 능력(capabilities)과 부분구조적 타입(substructural types)을 사용하여 재진입(reentrancy) 및 상태 손상(state corruption)과 같은 일반적인 취약성을 정적 강제를 통해 방지함으로써, 모든 보안 속성이 배포 이전에 검증됨을 보장합니다.

ABSTRACT

Smart contracts on a blockchain behave precisely as specified by their code. A vulnerability in this code can lead to unexpected behaviour, which is hard to fix because a blockchain does not allow to change smart contract code after its deployment. Such vulnerabilities have led to several incidents. In the aftermath of such an event, a hard-fork between Ethereum and Ethereum classic was the result. This thesis proposes to develop a new smart contract programming language with the primary focus on safety, auditability, and the intention to prevent as many of the known categories of vulnerabilities by design as possible. The programming language's code is validated during deployment and afterwards isolated from other smart contracts running on the same blockchain to enforce compile-time guarantees during runtime. The designed programming language does evaluate new concepts and paradigms rarely used in non-smart contract environments for their potential benefit in a smart contract environment.

연구 동기 및 목표

  • 배포된 스마트 계약에서 발생하는 돌이킬 수 없는 취약성 문제를 해결하기 위해, 불가역성과 패치 불가능성으로 인해 영구적인 재정적 손실이 발생할 수 있음.
  • 동적 디스patch, 재귀, 런타임 타입 오류를 제거함으로써 감사 가능성을 향상시키고, 코드 동작을 형식적으로 검증할 수 있도록 함.
  • 재진입, 액세스 제어 결함, 자원 고갈과 같은 일반적인 스마트 계약 취약성을 정적 보장을 통해 설계 단계에서 방지함.
  • 접근 제어 및 소유권 이관을 컴파일 타임에 강제하는 혁신적인 능력 기반 타입 체계를 도입함으로써 런타임 공격 표면을 줄임.
  • 블록체인 환경에서 강력한 안전성과 개발자 생산성의 균형을 이루는 실용적이고 사용 가능한 프로그래밍 언어를 만듦.

제안 방법

  • Mandala는 대수적 자료형과 동적 메서드 디스패치 없이 정적 타입 체계를 사용하여 모든 함수 호출이 컴파일 타임에 해결됨을 보장함.
  • 재귀를 금지하고 알려진 루프 범위를 요구함으로써 비 Turning 완전성을 강제하여 정적 자원 사용 한계 계산이 가능함.
  • 값과 자원에 대한 액세스는 타입화된 능력(capabilities)에 의해 규제되는 능력 기반 타입 체계를 사용하며, 컴파일 타임에 강제됨.
  • 상태 변경과 부작용을 추적하기 위한 최소한의 효과 체계(effect system)를 도입하여 감사 가능성과 상태 변화에 대한 추론을 향상시킴.
  • 오류 처리는 함수 서명에 통합되어 있으며, 모든 잠재적 오류는 명시적으로 선언하고 처리해야 하므로 암묵적인 실패를 방지함.
  • Mandala는 이더를 일급 토큰 타입으로 간주하여 전송을 위한 명시적 함수 호출이 필요하게 하여 수신자가 자금을 처리할 준비가 되어 있음을 보장함.

실험 결과

연구 질문

  • RQ1정적 타입 체계 설계를 통해 재진입과 액세스 제어 결함과 같은 일반적인 취약성을 정적 타입 체계로 방지할 수 있는 스마트 계약 언어를 설계할 수 있는가?
  • RQ2자원 사용 한계와 제어 흐름에 대한 컴파일 타임 강제가 스마트 계약에서 런타임 실패와 공격을 얼마나 효과적으로 방지할 수 있는가?
  • RQ3능력과 부분구조적 타입을 사용하여 자산과 권한을 일급 언어 구성요소로 모델링할 수 있는가, 이를 통해 보안을 향상시킬 수 있는가?
  • RQ4정적 자원 사용 한계를 가진 비 Turning 완전 언어가 감사 가능성을 향상시키고 '가스 부족' 예외와 같은 일반적인 실패 유형을 제거할 수 있는가?
  • RQ5능력 기반 접근 제어 시스템은 표현력, 안전성, 개발자 편의성 측면에서 런타임 검사와 비교해 어떻게 다를 수 있는가?

주요 결과

  • Mandala는 능력과 제어 흐름에 대한 컴파일 타임 강제를 통해 재진입, 경쟁 조건, 액세스 제어 결함과 같은 알려진 모든 스마트 계약 취약성을 설계 단계에서 방지함.
  • 모든 자원 사용이 컴파일 타임에 계산 가능하고 한정되어 있음을 보장하여 실행 중 자원 고갈 위험을 제거함.
  • 모든 오류는 함수 서명에 선언되어야 하며, 이를 처리하지 않으면 컴파일 타임 오류가 발생하므로 런타임에서 처리되지 않은 예외가 발생할 수 없음.
  • 능력 기반 타입 체계는 접근 제어 및 소유권 이관에 대해 정밀하고 정적 강제를 가능하게 하여 자산이나 함수에 대한 무단 액세스를 방지함.
  • 재귀와 동적 디스패치를 금지함으로써 감사자는 모든 실행 경로가 컴파일 타임에 알려져 있으므로 코드 동작을 완전한 확신을 가지고 추론할 수 있음.
  • 언어 설계가 자체 파괴 연산(self-destruct operations)과 계약 삭제를 제거하여 일부 기존 언어에 내재된 관련 보안 문제를 방지함.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.