EUTXO 모델
EUTXO를 이해하려면 Cardano에서 트랜잭션이 어떻게 작동하는지 이해하는 것이 중요하다. 특히 트랜잭션의 출력과 입력의 역할에 대해서.
트랜잭션에 대해 해야할 이야기: 출력과 입력
거래(transaction, 트랜잭션)라는 용어는 보통 금융적인 의미를 떠올리게 한다. 비트코인의 경우, 비트코인 블록체인을 사용하여 자금을 개인 간에 이동하는 데 사용하기 때문에 이러한 의미가 적용된다. 하지만 카르다노를 비롯한 많은 다른 블록체인에서는 이 용어가 더 다양한 의미로 사용된다. 이러한 경우에 "트랜잭션"이라는 용어는 더 세분화된 의미를 갖는다. 트랜잭션을 가치의 이전으로 생각할 수 있다.
블록체인 환경에서 각 트랜잭션은 하나 이상의 입력과 하나 이상의 출력을 가질 수 있다. 트랜잭션이 어떻게 작동하고 어떻게 UTXO와 관련되는지 이해하려면 입력과 출력의 개념을 이해해야 한다. 추상적인 용어로 트랜잭션을 이전 출력의 잠금을 해제하고 새 출력을 생성하는 작업으로 생각해 볼 수 있다.
트랜잭션 출력
트랜잭션 출력에는 주소(자물쇠로 생각할 수 있음)와 값이 포함된다. 이 비유에 따라, 해당 주소에 속한 서명은 출력 잠금을 해제하는 열쇠이다. 한 번 잠금이 해제된 출력을 입력으로 사용될 수 있다.
새 트랜잭션은 이전 트랜잭션의 출력을 사용하고, 향후 트랜잭션에서 사용할 수 있는 새로운 출력을 생성한다. 각 UTXO는 통째로 한 번만 사용할 수 있다. 각 출력은 정확히 하나의 입력, 오직 하나의 입력으로만 소비될 수 있다.
트랜잭션 입력
트랜잭션 입력은 이전 트랜잭션의 출력이다. 트랜잭션 입력에는 포인터와 잠금 해제 키 역할을 하는 암호화 서명이 포함된다. 포인터는 이전 트랜잭션 출력을 참조하며, 해제 키는 해당 출력을 잠금 해제한다. 출력이 입력에 의해 잠금 해제되면 블록체인은 잠금 해제된 출력을 “소비된” 것으로 표시한다. 주어진 트랜잭션에 의해 생성된 새로운 출력은 새로운 입력이 가리키게 되며, 이러한 체인 구조가 계속 이어진다. 이러한 새로운 출력(아직 잠금 해제되지 않은 즉, 소비되지 않은)을 UTXO라고 부른다. 소비되지 않은 출력은 간단히 아직 사용되지 않은 출력이라고 이해하면 된다.
UTXO의 작동 방식
UTXO 회계 모델에서는, 트랜잭션은 이전 트랜잭션에서 사용되지 않은 출력을 소비하고, 새로운 출력을 생성하여 이를 다시 다음 트랜잭션의 입력으로 사용한다.
사용자의 지갑은 이러한 UTXO를 관리하고, 사용자가 소유한 UTXO를 사용하여 트랜잭션을 시작한다. 모든 블록체인 노드는 항상 모든 UTXO의 하위 집합에 대한 기록을 유지한다. 이것을 UTXO 집합이라고 한다. 기술적 용어로 이것은 체인상태이며, 모든 노드의 데이터 디렉토리에 저장된다. 새 블록이 체인에 추가되면 그에 따라 체인상태가 업데이트된다. 이 새로운 블록에는 최신 트랜잭션 목록이 포함된다(물론 소비된 UTXO 및 체인상태가 마지막으로 업데이트된 이후에 생성된 새 UTXO의 기록도 포함). 모든 노드는 체인상태의 정확한 사본을 유지한다.
EUTXO는 다음을 결합한 트랜잭션 메커니즘이다.
- 스마트 컨트랙트: 락업된 UTXO, ADA, 네이티브 자산 및 NFT.
- 리디머(Redeemers): 잠긴 자산을 잠금 해제하고 소비하기 위해 제공된 사용자 제공 데이터.
- 데이텀(Datum): 앱에 관련된 최고 점수, 사용자 정보 또는 기타 정보와 같은 데이터
- 컨텍스트: 검증 중인 트랜잭션에 대한 메타데이터와 같은 정보.
EUTXO 구성 요소
-
컨트랙트(Contract)
스마트 컨트랙트는 미리 정해진 조건이 충족되면 실행되는 블록체인에 저장된 프로그램이다. 이것은 카르다노 블록체인에서 UTXO, ada를 보유하는 잠금장치로 생각할 수 있다. -
리디머(Redeemer)
스마트 컨트랙트에 사용자로부터 전달된 데이터이다. 간단한 UTXO에서 리디머는 UTXO의 소유권과 내용에 대한 액세스를 증명하는 서명이 될 수 있다. -
데이텀(Datum)
UTXO와 연관된 정보 조각이다. 소유자 또는 UTXO를 사용할 수 있는 시간 등 타이밍 세부 정보와 같은 스크립트 상태 정보를 전달하는 데 사용된다. -
컨텍스트(Context)
컨텍스트는 본질적으로 보류 중인 트랜잭션에 대한 요약 정보이며, 트랜잭션 입력 및 출력에 대한 접근을 허용할 때 증인(witnesses), 인증서에 대한 정보는 물론 값이 흐르는 방식에 대한 정보를 포함한다.
EUTXO: 카르다노의 선택 배경
카르다노는 결제 처리 이상의 역할을 수행하기 위해 설계되었기 때문에 비트코인의 “일반” UTXO 회계 모델은 적합하지 않다. 특히, 스마트 컨트랙트 기능에 대한 더 많은 프로그래밍 표현성이 필요했기 때문에 혁신적인 (‘확장된’) 솔루션이 필요했다.
‘기본’ UTXO 모델은 프로그램밍 표현성에 한계가 있다. 이 문제를 해결하기 위해 이더리움의 계정/잔고 회계 모델은 계정/잔고 원장과 관련된 컨트랙트 계정을 적용함으로써 해결했다. 하지만, 그 결과 컨트랙트 코드의 의미 체계가 훨씬 더 복잡해졌고, 컨트랙트 작성자는 코드에 잠재적으로 매우 많은 비용이 드는 취약점을 방지하기 위해 의미 체계의 미묘한 차이를 완전히 이해해야 하는 원치 않는 효과를 초래했다.
‘확장된’ UTXO 솔루션에는 기존 UTXO 모델이 제공하지 못하는 두 가지 추가 기능이 필요하다.
- – 컨트랙트 상태를 유지할 수 있을 것
- – 전체 컨트랙트 순서에서 동일한 컨트랙트 코드가 사용되도록 강제할 수 있을 것. 이것을 연속성이라고 한다.
EUTXO 모델의 강력한 기능 중 하나는 유효한 트랜잭션에 필요한 수수료를 게시하기 전에 정확히 예측할 수 있다는 것이다. 이 기능은 계정/잔고 모델에서 찾을 수 없는 독특한 기능이다.
플루투스 코어
EUTXO의 구현에는 계정/잔고 모델과 구별되는 두 가지 핵심 요소인 스크립트와 데이터가 포함된다. 스크립트는 명확하고 명시적인 스크립팅 언어가 필요하며, 출력에 첨부되고 리디머(Redeemer)로 사용되는 데이터 유형을 정의하는 것도 중요하다. 리디머 데이터는 하스켈(Haskell)에서 쉽게 정의할 수 있는 간단한 (대수적) 데이터 유형이다.
플루투스 코어(Plutus Core)는 이러한 두 요소를 제공하는 Cardano의 스크립팅 언어이다. 하스켈과 유사한 간단하고 기능적인 언어이다. 사실, 하스켈의 많은 하위 집합을 사용하여 플루투스 코어 스크립트를 작성할 수 있다. 개발자는 플루투스 코어 코드를 직접 작성하지 않는다. 하스켈 컴파일러 플러그인이 모든 플루투스 코어 스크립트를 생성한다.
노드는 체인에서 트랜잭션 검증 ‘활성화’ 중에 이러한 스크립트를 실행한다. 이 스크립트는 검증자 스크립트 또는 네이티브 토큰의 발행 및 소각을 제어하는 발행 정책으로 UTXO를 잠글 수 있다.
적절한 하스켈 라이브러리는 검증 중에 트랜잭션을 검사하기 위한 핵심 데이터 유형을 제공하고, 많은 헬퍼 함수와 고수준 추상화를 제공하여 이러한 검증 로직을 간소화한다. 이를 통해 컨트랙트 작성자는 비즈니스 로직에 집중할 수 있으며, 너무 많은 저수준 세부 사항을 걱정할 필요가 없다.
EUTXO 모델은 UTXO를 어떻게 확장하는가?
EUTXO는 ‘기본’ UTXO 모델을 두 가지 방향으로 확장한다.
- 자물쇠와 열쇠 비유를 사용하여 '주소’의 개념을 일반화한다. EUTXO 모델에서의 주소는, 자물쇠를 공개 키로, 열쇠를 서명으로 제한하는 대신, 스크립트 형태로 임의적인 로직을 포함할 수 있다. 예를 들어, 노드가 트랜잭션을 검증할 때 노드는 트랜잭션이 특정 출력을 입력으로 사용할 수 있는지 여부를 결정한다. 트랜잭션은 출력 주소에서 제공하는 스크립트를 조회하여 트랜잭션이 출력을 입력으로 사용할 수 있는 경우 스크립트를 실행한다.
- UTXO와 EUTXO의 두 번째 차이점은 출력이 주소와 값 외에 (거의) 임의의 데이터를 가질 수 있다는 것이다. 이를 통해 스크립트가 상태를 가질 수 있으므로 스크립트를 훨씬 더 강력하게 만든다.
여기서 우리는 EUTXO를 독특하게 만드는 이유와 이 회계 모델이 ‘일반’ UTXO보다 우수한 이유를 제시한다.
EUTXO 기능 | 왜 중요한가 |
---|---|
각 UTXO는 주소, 값 및 데이텀(datum)으로 구성되어 있으며, 데이텀은 컨트랙트에 특화된 데이터 조각이다. 데이텀은 데이텀 객체라고도 한다. 데이텀은 검증 중에 추가 인수(argument)로 전달된다. |
이는 컨트랙트의 코드를 변경하지 않으면서 컨트랙트가 상태(데이텀)를 유지할 수 있도록 해준다. |
검증자(validator)는 현재 검증 중인 트랜잭션에 대한 정보를 담은 컨텍스트(Context)를 전달받는다. 이 정보는 Context 타입의 추가 인수로 전달된다. |
컨텍스트는 검증에 있어서 매우 중요한 정보를 제공하며, 이를 통해 ‘순수한’ UTXO 모델에서는 불가능했던 강력한 조건을 검증자가 부여할 수 있게 된다. 특히, 현재 트랜잭션의 출력을 검사할 수 있다는 점은 컨트랙트의 연속성을 보장하는 데 필수이다. |
EUTXO는 트랜잭션에 유효 기간(validity interval)을 추가함으로써 어느 정도 시간에 대한 접근성을 제공한다. 이는 트랜잭션이 처리될 수 있는 기간으로, 원장 시스템에서 단조로이 증가하는 진행 단위로 정의된 "틱(tick)"의 간격이다. 일반적으로 블록 번호나 블록 높이에 해당한다. |
이 간격은 검증 중에 실행되는 어떤 스크립트도 현재 tick이 그 간격 내에 있다고 가정할 수 있도록 한다. 그러나 스크립트는 현재 tick의 정확한 값을 알지는 못한다. |
EUTXO가 UTXO보다 우수한 이유는 무엇인가?
- 카르다노는 비트코인에 비해 탈중앙성과 보안성이 향상되었다. 카르다노는 또한 계정/잔고 체인보다 우수한 스마트 컨트랙트 기능을 제공한다.
- 다중 자산(Multi-asset) 및 스마트 컨트랙트 지원.
- 높은 유연성, 보안성, 안정성 및 확장성.
- PoW 블록체인 보다 훨씬 적은 에너지를 사용하는 PoS 시스템으로 더 많은 트랜잭션 동시 처리 .
- IOG는 UTXO 얼라이언스의 일원으로 7개의 다른 UTXO 기반 블록체인과 협력하여 혁신과 상호 운용성을 추구하며 함께 개선한다.
EUTXO는 2022년에 Cardano를 확장하기 위한 발판
EUTXO는 새로운 패러다임과 사고 방식을 제시하지만, 스마트 컨트랙트 개발자에게 애플리케이션을 구성하고 배포할 수 있는 강력하고 다재다능한 플랫폼을 제공한다.
올해(2022년), IOG(Input Output Global Inc.)는 EUTXO의 장점을 활용하여 Cardano에 구축된 스마트 컨트랙트를 최적화하는데 다음과 같은 세 가지 방법을 사용할 것이다.
-
참조 입력 (CIP-0031) - Plutus 스크립트는 입력을 소비할 필요 없이 해당 값을 검사할 수 있다. 따라서 입력에 저장된 정보를 검사하기 위해 UTXO를 생성할 필요가 없다.
-
Plutus Datums (CIP-0032) - 데이텀이 데이텀 해시 대신에 직접 출력에 첨부될 수 있다. 이는 데이텀를 사용하는 방법을 간소화시키며, 사용자는 주어진 해시와 일치하는 데이텀을 제공하지 않아도 실제 데이텀을 확인할 수 있다.
-
스크립트 공유 (CIP-0033) - Plutus 스크립트 참조는 트랜잭션 출력에 연결될 수 있으므로, 이전에 사용한 스크립트를 재사용할 수 있다. 이를 통해 개발자들이 매번 스크립트의 사본을 제공할 필요가 없어지고, 여러 트랜잭션에서 스크립트를 재사용하면 트랜잭션 크기가 감소하여 처리량이 향상되고, 스크립트 실행 비용도 감소한다.
EUTXO 핸드북
목차
- 소개
- 블록체인 회계 모델이란 무엇인가?
-
UTXO 모델 vs 계정/잔고 모델: 간략한 개요
- UTXO
- UTXO 모델의 ‘거스름돈’ 개념
- UTXO 모델의 장점
- 계정/잔고 모델
- UTXO
-
EUTXO 모델
- 트랜잭션에 대해 해야할 이야기: 출력과 입력
- 트랜잭션 출력
- 트랜잭션 입력
- UTXO의 작동 방식
- EUTXO: 카르다노의 선택 배경
- 플루투스 코어
- EUTXO 모델은 UTXO를 어떻게 확장하는가?
- EUTXO는 2022년에 Cardano를 확장하기 위한 발판
- 트랜잭션에 대해 해야할 이야기: 출력과 입력
(계속)
* 원문: The EUTXO Handbook | Essential Cardano
* 번역: 크립토베리 CryptoVeri@naver.com