LLVM을 사용하여 ETC 스마트 컨트랙트 언어 만들기 – 1탄 준비작업


과거에는 자신만의 프로그래밍 언어를 만드는 것이 힘들었습니다. 사람들은 컴파일러를 처음부터 끝까지 알아야만 했습니다. 다행히 LLVM(다원적 멀티플렉서 프레임워크) 덕분에 개발자들은 이제 기기 세부 정보를 볼 필요 없이 자체 언어를 만들 수 있게 되었습니다.

이제 EVM-LLVM 프로젝트를 통해 LLVM이 EVM 바이트 코드 생성을 지원할 수 있으며, 이는 LLVM 사용해 자체 스마트 컨트랙트 언어를 만들 수 있게 되었음을 의미합니다.

이번 글의 목표

우리는 EVM-LLVM을 사용해 만화경 장난감 언어로 블록체인에 배포 가능한 스마트 컨트랙트를 생성하는 방법을 보여줍니다. 이 글에서 모든 영역을 다루는 완전한 컴파일러를 작성하지는 않지만 LLVM 기반의 간단한 언어를 스마트 컨트랙트 플랫폼으로 이식하는데 필수적인 부분을 다룰 것입니다. 그러나 이 글을 통해 LLVM 프레임 워크를 사용해 자신만의 스마트 컨트랙트 언어를 만드는 방법을 이해할 수 있을 것입니다.

EVM은 매우 특수한 소프트웨어로 아키텍처로, 컴파일러가 블록체인에 배포되기 전에 약간의 내부 설정을 해야 합니다. 다음 글에서 블록체인에서 프로그램을 실행할 수 있게 하기 위해 추가 작업을 수행해야 하는 이유를 설명합니다.

준비작업

EVM-LLVM 다운로드

스마트 컨트랙트 언어를 구축하려면 작동 중인 EVM-LLVM 개발 패키지가 필요합니다.


git clone git@github.com:etclabscore/evm_llvm.git
 cd evm_llvm
 git checkout EVM
 mkdir build && cd build
 cmake -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=EVM ..
 make -j8
 

EVM-LLVM은 LLVM 프로젝트의 또 다른 백엔드이므로 모든 것이 LLVM 규칙을 따릅니다. 스마트 컨트랙트를 생성하려면 컴파일된 라이브러리와 EVM-LLVM 헤더가 필요합니다.

l

l 기본 언어 구현

l 이 튜토리얼에는 다루지 않는 많은 주제가 포함되어 있습니다. 시간을 절약하기 위해 완전한 언어를 이식하지는 않지만 3장 끝부분에서 샘플 코드로 시작합니다. 시작 코드는 다음 위치에서 찾을 수 있습니다.

l https://github.com/etclabscore/evm_llvm/blob/master/examples/Kaleidoscope/Chapter3/toy.cpp

l

l

l 최초의 3장 구현은 이미 간단한 어법 분석기, 해석기와 AST 기반 코드 생성기를 가지고 있습니다.

l LLVM IR을 표시하는 함수 선언을 작성할 수 있으며, 이것이 LLVM을 사용해 스마트 컨트랙트 언어를 구축하기 위한 요점입니다.

l

l 물론 더 나은 기능을 추가함으로써 더 나아질 수 있지만, 이 글에서는 기본적인 내용만 집중하게 될 것으로 잠시 참아 주시기 바랍니다.

l 쉽게 말해 이 글의 마지막에선 아래와 같은 기능을 구현하려고 합니다.

만화경 기능을 LLVM IR로 컴파일하고, EVM 백엔드를 사용하여 EVM 바이트 코드를 생성합니다.

소규모 스마트 컨트랙트 입력 및 출력 리소스와 상호 작용할 수 있도록 EVM 특정 기능을 생성합니다.

완전히 짧은 사양은 LLVM 웹사이트의 튜토리얼에서 찾을 수 있습니다. 완전한 만화경은 JIT 컴파일러를 포함하고 있지만 본 튜토리얼에서는 일부만 소개합니다. 우리는 사용자들이 만화경 함수의 성명을 작성하고 우리의 마이크로 컴파일러는 실행 가능한 EVM-LLVM IR을 생성할 수 있습니다.

3 views

Recent Posts

See All

ETC 피닉스 하드포크 업데이트 6월 1일 진행 예정

이더리움 클래식 메인넷은 다가오는 10.500.839블록에서 피닉스 하드포크를 활성화합니다. 예상 시점은 2020년 6월 1일입니다. 이번 하드포크는 아틀란티스, 아가타에 이어 이더리움 클래식의 세 번째 업그레이드입니다. 피닉스 하드포크 이후 이더리움 클래식과 이더리움은 완벽하게 호환되며 동일한 기능을 갖게 됩니다. 이번 하드포크의 주요 목표는 이더리움 이

LLVM을 사용하여 ETC 스마트 컨트랙트 언어 만들기 - 기타주제

LLVM IR 코드 생성 allocatea 명령은 현재 기능의 메모리 프레임에 32바이트 프레임 객체(기능-로컬 객체)를 할당. 메모리 공간 인덱싱 보통 EVM 스마트 계약 ABI 정보를 내보내는 것은 언어에 달려 있다. 하지만 우리는 계약서 ABI를 방출하기 위해 LLVM IR 패스를 작성할 수 있다. 제한 사항 EVM은 결정적 실행을 위해 설계되었습니다