검수요청.png검수요청.png

리퀴디티

해시넷
이동: 둘러보기, 검색
리퀴디티(Liquidity) 로고
리퀴디티(Liquidity) 로고와 글자
테조스(Tezos)

리퀴디티(Liquidity)는 테조스(Tezos)를 위해 개발된 완전 함수형 프로그래밍 언어이다. 2017년 10월 05일 ver 0.1의 초판이 만들어지고 점차 기능이 추가되는 중이다. 리퀴디티는 완전히 형식화된 함수 언어이며 오카멜(OCaml) 및 ReasonML의 구문을 사용하며, 미켈슨(Michelson)의 보안 사항을 엄격히 준수한다.

개요[편집]

테조스는 미켈슨이라는 로우 레벨 정적 유형 언어를 사용하여 스마트 컨트랙트를 작성할 수 있었다. 하지만 변수의 유형이 적고 스택 기반의 문법들 때문에 쓰는 것도 읽는 것도 어려워서 테조스는 개발 초기에 더 높은 레벨의 언어가 필요하다는 생각을 가졌다. 그 후 오카멜 프로(OCamlPro)에서 개발한 리퀴디티의 프로토타입이 2017년 6월에 처음 개발되었고, 2018년 2월 정식으로 테조스의 알파넷에서 출시되었다.[1]

특징[편집]

리퀴디티는 미켈슨의 타입 시스템을 따르지만, 오카멜의 문법을 바탕으로 실행된다. 리퀴디티는 미켈슨으로 변환되는 컴파일러가 포함되어 있으며, 미켈슨으로 쓰인 컨트랙트를 리퀴디티로 변환할 수 있는 디컴파일러 역시 포함되어 있다. 이는 서로의 호환성을 위함이다.[1] 또한 리퀴디티는 수학적으로 소프트웨어 코드의 오류를 점검하기에 오류가 일어날 확률이 사실상 없다.[2] 리퀴디티는 미켈슨에서 작성할 수 있는 모든 것을 표현할 수 있으며, 스택 조작 대신 로컬변숫값을 사용한다. 합계 유형 및 레코드 유형과 같은 유형은 리퀴디티에서 정의되고 사용될 수 있어 높은 수준의 프로그래밍 언어이고 재사용 가능한 코드와 라이브러리를 작성하는 모듈과 계약시스템, 다형성을 가진 강력한 메커니즘, 자바스크립트와 유사한 언어로 작성하기, 스마트 컨트랙트로 작성하여 응용하기 등 여러 가지를 리퀴디티로 표현하고 활용할 수 있다. 작성된 스마트 컨트랙트는 메인넷(Mainnet)과 제로넷(Zeronet)에 제출할 수 있다. 리퀴디티 파일의 확장자명은 .liq이다.

활용[편집]

튜플(Tuples)[편집]

리퀴디티의 튜플미켈슨에서 쌍으로 구성된다.

x * y * z <=> pair x (pair yz) 

리퀴디티의 현장 접근 표기법을 사용하여 튜플에 접근할 수 있다.

let t = (x,y,z) in let would_be_true = t.(2) = z in... 

리퀴디티 현장 접근 업데이트 표기법을 사용하여 다른 항목에서 새 튜플을 생성할 수 있다.[3]

t = (1,2,3) in let z = t.(2) <- 4 in ....

레코드(Record)[편집]

리퀴디티 타입 내에서 기록 유형을 선언하고 사용할 수 있다.

type storage = { x : string; y : int; } 

이러한 유형은 프로그램 내에서 생성하여 사용할 수 있다.

let r = { x = "foo"; y = 3 rx 

기록들은 튜플로 정리된다.

다음 표기법을 사용하여 심층 레코드를 만들 수 있다.[3]

let r1 = { x = 1; y = { z = 3 } let r2 = r1.yz <- 4 in ....

변형(Variants )[편집]

주로 컨트랙트를 작성 하기 전, 가장 처음에 사용된다.

t = | X | int의 Y | 문자열 * nat

변수는 다음을 사용하여 생성할 수 있다.

let x = X 3 in let y = Z s in .... 

매치 구성은 패턴 매칭에 사용할 수 있지만, 첫 번째 생성자에만 사용할 수 있다.

x와 ... 을 일치시킨다. | Y i -> ... | Z s -> ... 

여기서 i와 s는 변형의 매개변수에 대한 구조에 의해 구속되는 변수다.

변형의 특별한 경우는 왼쪽 | 오른쪽 | 오른쪽 | 오른쪽 사전 정의된 변종, 변형이라고 불린다. 유형('좌측, '우측' 변종 = |좌측 |우측 |우측

이러한 변형의 모든 발생은 유형 주석으로 제한되어야 한다.

x = (좌측 3 : (현내) 변종)을 | 좌표 -> ...와 일치시킨다. | 오른쪽 -> ... 

또 다른 특별한 변형으로는 소스 변형: 현재의 계약을 지칭하는 데 사용된다.

let s = (출처 : (단위, 단위) 계약) in.... 

Left 및 Right의 경우, 소스 발생은 유형 주석으로 제한되어야 한다.[3]

함수(Functions)와 클로저(Closure)[편집]

클로저는 독립적인(자유) 변수를 가리키는 함수이다 또는, 클로저 안에서 정의된 함수는 환경을 기억한다.

function outter() {

 let title = ‘fun liquidity’;
 return function() {
   alert(title);
 }
}
inner = outter();
inner();

다음과 같은 코드가 있을 때, outter 함수가 다른 함수를 반환하고 종료됐음에도 불구하고

outer 함수의 변수인 title이 반환된 함수에서 접근과 사용이 가능하다.

사전적 정의에서 보았듯이 만들어진 ‘환경’을 기억하는 이러한 메커니즘클로저라고 이해하면 된다. 미켈슨과는 달리 리퀴디티에서 함수는 이러한 클로저 메커니즘을 가질 수 있으며, 리퀴디티에서는 여러 인자를 받아들인 후에 하나의 인자로 이루어진 여러 개의 함수로 인식할 수 있다. 클로저가 람다 함수 기반이기 때문에 하나의 튜플로 이루어진 인자를 사용하는 것이 좋다. 그러면 인수리턴 타입이 유추되기 때문에 여러 개의 인자를 받는 함수를 사용하는 것이 가능해진다. 형식에 대한 것을 작성한다면 자료형을 특정적으로 제한할 수 있다. 함수는 함수명과 인자를 나란히 놓음으로써 사용할 수 있다.[1]

루프(Loops)[편집]

리퀴디티의 반복문은 함수의 문법을 공유한다.

하지만 반복문 자체는 함수가 아니기 때문에 클로저와 같이 포함되는 함수의 변수 사용이 가능하다.

let end_loop = 5 in
let x = Loop.loop ( fun x ->
   (x < end_loop, x’)
 ) x_init
in

이 예시에서 볼 수 있듯이 반복문은 반복의 조건과 증가하는 x로 이루어진 페어를 계속해서 반환한다.[1]

버전[편집]

  • 2017년 10월  : 리퀴디티 0.1
  • 2017년 11월  : 리퀴디티 0.13
  • 2018년 1월  : 리퀴디티 0.14
  • 2018년 7월  : 리퀴디티 0.32
  • 2018년 10월  : 리퀴디티 0.37
  • 2018년 11월  : 리퀴디티 0.404
  • 2018년 12월  : 리퀴디티 0.405
  • 2019년 1월  : 리퀴디티 0.5
  • 2019년 2월  : 리퀴디티 0.51
  • 2019년 3월  : 리퀴디티 1.0

평가 및 전망[편집]

함수형 프로그래밍 언어 중 하나인 리퀴디티는 수학적으로 소프트웨어 코드의 오류를 점검하기 때문에 오류가 일어날 확률은 0에 수렴한다. 그렇기 때문에 리퀴디티가 널리 사용되는 프로그래밍 언어는 아니지만 학습하는 데 오래 걸리지 않는 편에 속한다는 긍정적인 평가를 받고 있다.[2] 여타 함수형 프로그래밍 언어가 그렇듯이 리퀴디티 역시 계산 값을 수학 함수의 값으로 구하는 것으로 간주하고 상태 및 데이터의 변경을 방지한다는 장점이 있다. 테조스 한국 재단은 국내 개발자들의 테조스에 대한 이해를 높이고 활용도를 증가시키기 위해 프로그래밍 언어인 오카멜과 더불어 테조스 스마트 컨트랙트 언어인 리퀴디티의 교육과정을 제공할 계획을 가지고 있다. 이를 통해 한국 재단이 기대하는 점은 개발자를 비롯한 많은 사람이 테조스 블록체인 플랫폼을 더 쉽게 이해함과 분산 애플리케이션 개발의 용이함이다.[4] 한편, 개발자들은 현재 리퀴디티로 작성된 스마트 컨트랙트의 정확성(Correctness)을 증명하는데 사용할 정형기법(Formal-Method) 프레임워크를 개발 중이다.

리퀴디티 관련 홈페이지[편집]

각주[편집]

  1. 1.0 1.1 1.2 1.3 Skkrypto, 〈(TezosXSkkrypto) 테조스 실습노트 #6〉, 《브런치》, 2019-05-06
  2. 2.0 2.1 김병윤 기자, 〈테조스 창업자 “안전한 테조스, 금융업과 시너지 확신"〉, 《팍스넷뉴스》, 2019-01-28
  3. 3.0 3.1 3.2 Liquidity, a high-level language for Tezos
  4. 임유경 기자, 〈테조스 한국 재단 설립...개발자 생태계 구축 집중〉, 《지디넷 코리아》, 2018-10-27

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 리퀴디티 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.