이전글
[스택스와 비트코인의 미래] 3. PoX: 비트코인과의 연결
이전글 [스택스와 비트코인의 미래] 2. 비트코인 확장: OP_RETURN이 가져온 변화 이전글 [스택스와 비트코인의 미래] 1. 스택스의 시작: 블록스택에서 스택스로 이전글 [스택스와 비트코인의 미래] 0.
kwjdnjs.tistory.com
클래리티
튜링 완전에 대한 논쟁
I. 비트코인 스크립트와 튜링 불완전
비트코인의 스마트 컨트랙트 언어인 스크립트는 튜링 불완전한 언어입니다.
스크립트는 opcode로 구성되어 있습니다. 각각의 opcode는 잠금 스크립트나 해제 스크립트에 담겨 트랜잭션이 배포될 때 스택을 이용하여 실행됩니다.
비트코인 opcode의 종류는 매우 제한적입니다. 이는 스크립트가 튜링 불완전한 언어로 설계되었기 때문입니다.
비트코인이 튜링 불완전한 언어를 사용하는 것은 비트코인의 안정성을 유지하기 위해서입니다. 다만 비트코인은 안정성을 얻는 대신 범용성을 희생했습니다. 즉, 비트코인에서는 복잡한 스마트 컨트랙트를 실행하기 어렵습니다.
사실 비트코인은 UTXO를 사용하는 구조상 복잡한 스마트 컨트랙트를 실행하기에는 기본적으로 부적합합니다. 여기에 더해 튜링 불완전한 언어인 스크립트의 사용으로 사실상의 현대적인 스마트 컨트랙트 개발이 불가능해진 것입니다.
II. 이더리움 솔리디티와 튜링 완전
이더리움은 비트코인이 가진 문제를 해결하고 범용 스마트 컨트랙트를 사용하기 위해 튜링 완전한 언어인 솔리디티를 선보였습니다.
비트코인이 적은 수의 opcode를 제공하는 반면 이더리움은 반복문 등 튜링 완전한 언어를 구현할 수 있는 충분한 양의 opcode를 제공합니다. 이를 토대로 튜링 완전한 언어인 솔리디티가 탄생할 수 있었습니다.
솔리디티로 코드를 작성하면 솔리디티 컴파일러를 통해 바이트코드로 변환하는 과정이 필요합니다. 비트코인의 스크립트는 opcode를 직접 사용하는 방식이지만, 고급 프로그래밍 언어인 솔리디티는 추가적인 컴파일 과정이 필요하기 때문입니다.
이더리움은 블록체인 상에서 튜링 완전한 언어를 사용할 때 발생할 수 있는 문제들을 해결하기 위해 가스라는 개념을 추가로 도입했습니다. 다만 가스의 도입만으로 완전히 해결되지 않는 부분이 여전히 남아있습니다. 예를 들어 컨트랙트를 실행하는 과정에서 예상보다 적은 가스를 입력하여 컨트랙트가 제대로 실행되지 않을 수 있습니다. 튜링 완전한 언어인 솔리디티로 작성된 코드에서는 정확히 소비될 가스를 예측하는 것이 어렵기 때문입니다.
또한 솔리디티로 개발을 할 경우 컴파일 과정의 존재로 최종 완성된 스마트 컨트랙트가 의도하지 않을 동작을 할 가능성도 있습니다. 이는 한 번 배포한 뒤 수정이 불가능한 블록체인의 특성상 별로 좋지 않은 결과를 낳게 될 수 있습니다. 또한 금전적인 거래가 오고 가는 특성 한 한 번의 오류가 큰 손실을 발생시킬 가능성도 있습니다.
III. 스택스 클래리티와 튜링 불완전
스택스는 비트코인보다는 더 복잡한 형태의 스마트 컨트랙트가 가능하면서 튜링 불완전성을 유지하고, 컴파일 과정이 필요 없어 사람이 바로 읽을 수 있는 코드를 작성하는 언어를 도입하고자 했습니다. 이렇게 해서 탄생한 것이 바로 결정 가능 스마트 컨트랙트 언어인 클래리티입니다.
방금 설명한 것처럼 클래리티는 솔리디티와는 다르게 컴파일 과정이 없습니다. 솔리디티의 경우 컴파일된 바이트코드에 문제가 발생할 경우 이를 직접 확인하고 수정하는 것이 어렵습니다. 바이트코드는 일반적인 개발자가 이해하기 어렵기 때문입니다. 반면 클래리티는 컴파일 과정 없이 작성된 코드가 그대로 실행됩니다. 따라서 스마트 컨트랙트 코드를 직접 사람이 이해할 수 있고, 문제가 발생할 경우 바로 대응할 수 있습니다.
클래리티는 결정 가능 언어입니다. 즉, 클래리티는 유한한 단계를 거쳐 실행되어 튜링 정지 문제가 발생하지 않고, 프로그램이 정확히 어떻게 실행될지 알 수 있습니다. 솔리디티의 경우 스마트 컨트랙트 실행 도중 예상보다 많은 가스가 소모되어 동작이 멈춰버릴 수 있습니다. 하지만 클래리티에서는 이런 문제가 발생하지 않습니다.
클래리티에서는 재진입 공격이 불가능합니다. 재진입 공격이란 공격을 시도하는 컨트랙트가 다른 컨트랙트의 보안에 취약한 함수를 호출하여 이 함수가 실행되는 도중 다시 이 함수를 호출하며 발생하는 공격을 말합니다. 클래리티는 재진입 자체를 허용하지 않아 재진입 공격에서 자유롭습니다.
마지막으로 스택스가 비트코인의 상태를 직접 읽을 수 있기 때문에 존재하는 가장 큰 특징이 있습니다. 바로 클래리티 스마트 컨트랙트는 비트코인의 상태를 읽어올 수 있습니다. 즉, 비트코인의 트랜잭션을 클래리티 스마트 컨트랙트 실행에 트리거로 사용할 수 있습니다.
결론적으로 클래리티는 튜링 불완전한 언어입니다. 따라서 무한 루프나 재귀 호출이 불가능합니다. 이는 일반적으로 사용되는 프로그래밍 언어로 실행할 수 있는 모든 알고리즘을 실행할 수 없지만, 블록체인이 무한 루프에 걸려 마비되거나 재진입 공격이 발생하는 상황을 방지하여 보다 안정적이고 보안이 강화된 스마트 컨트랙트를 생성할 수 있게 해 줍니다.
스마트 컨트랙트는 일반적인 프로그램이 아닌 블록체인 상에서 동작하는 특수한 프로그램입니다. 스마트 컨트랙트를 통해 토큰이 발행되고 NFT가 거래됩니다. 금전적인 거래가 발생하는 특수한 프로그램에 그리고 쉽게 다시 수정할 수 없는 프로그램에 무조건 튜링 완전함을 바라는 것은 어렵습니다.
스마트 컨트랙트는 안정적으로 안전하게 작동하는 것이 중요합니다. 그리고 이것이 바로 클래리티가 튜링 불완전한 언어인 이유입니다.
다음글
[스택스와 비트코인의 미래] 5. BNS: 비트코인 도메인
이전글 [스택스와 비트코인의 미래] 4. 클래리티: 튜링 완전에 대한 논쟁 이전글 [스택스와 비트코인의 미래] 3. PoX: 비트코인과의 연결 이전글 [스택스와 비트코인의 미래] 2. 비트코인 확장: OP_RET
kwjdnjs.tistory.com
'스택스 > 스택스와 비트코인의 미래' 카테고리의 다른 글
[스택스와 비트코인의 미래] 6. 가이아: 블록체인 외부로 (0) | 2024.04.12 |
---|---|
[스택스와 비트코인의 미래] 5. BNS: 비트코인 도메인 (1) | 2024.04.03 |
[스택스와 비트코인의 미래] 3. PoX: 비트코인과의 연결 (0) | 2024.03.05 |
[스택스와 비트코인의 미래] 2. 비트코인 확장: OP_RETURN이 가져온 변화 (0) | 2024.02.29 |
[스택스와 비트코인의 미래] 1. 스택스의 시작: 블록스택에서 스택스로 (0) | 2024.02.15 |