devops

Cardano EUTXO(Extended Unspent Transaction Output)와 Script 본문

Cardano

Cardano EUTXO(Extended Unspent Transaction Output)와 Script

vata500 2024. 5. 26. 00:37
반응형

스마트 컨트랙트를 지원하는 대부분의 체인들이 Account 모델인 web3 업계에서, 카르다노는 UTXO 모델을 확장한 EUTXO 모델을 개발하여 새로운 기술과 유스케이스를 만들어가고 있다.

비트코인의 UTXO 모델은 단순히 balance의 전송만 가능하지만, 카르다노는 datum, redeemer, context와 같은 구성요소를 접목해 스마트 컨트랙트에 필요한 조건과 검증 매커니즘을 구현했다.

UTXO 기반에서 트랜잭션의 실행과 스마트컨트랙트의 작동이 어떤 방식으로 이뤄지는지 살펴보려한다. 

EUTXO

EUTXO는 UTXO 모델의 확장버전으로, 'UTXO model + Expressiveness of programmability '이다. 비트코인에서도 간순한 스크립트를 지원하는 데, 카르다노에서는 더 확장된, 다양한 로직을 구현할 수 있는 스크립트를 지원한다고 보면된다.

카르다노의 개발자 공식문서에서도 ' Smart contracts are more or less just a piece of code that you write to validate the movement of UTXOs locked in your contract's address.'라는 언급이 있다. 카르다노에서 스마트 컨트랙트는 UTXO의 이동을 검증하는 코드 조각일 뿐이다.

그래서 카르다노에서는 'smart contract'라기보다 'validator scripts'라고 표현하는 것이 적절할 수도 있다.

EUTXO 모델은 Account 모델에 비해서 더 높은 보안과 수수료 예측가능성, 로컬 검증이 가능, 파편화된 블록체인 상태라는 특징을 가진다. 이런 특징 덕분에 트랜잭션의 병렬처리가 가능하며, 스마트 컨트랙트가 독립적으로 실행될 수 있다.

스마트 컨트랙트가 처리될 때, 블록 내 순서는 중요하지 않으며, 블록 내 다른 컨트랙트 실행결과가 독립적이기 때문에 공격할 수 있는 여지가 적다. 이게 가능한 것은 다음과 같은 EUTXO의 특징 덕분이다.

EUTXO Consumption Rules

  • 두 에이전트가 같은 EUTXO를 소비하는 것은 불가능함. 경쟁 조건이 발생할 경우, 하나의 트랜잭션만 승인되고 나머지는 거부됨.
  • 여러 에이전트가 동시에 여러 EUTXO를 소비하는 것이 가능함.
  • 하나의 EUTXO는 여러 트랜잭션에서 참조될 수 있으나 소비는 한번만 가능함.

비트코인 UTXO 모델에서는 노드가 트랜잭션의 유효성을 먼저 검사한다. 

  • 노드가 요청된 작업을 수행할 수 있는가
  • 트랜잭션 작성자가 관련한 data와 input을 제공했는가
  • 트랜잭션 작성자가 프라이빗키로 디지털 서명을 제공했는가

여기서 EUTXO는 '스크립트 주소로 잠긴 EUTXO를 사용하려는 트랜잭션 유효성을 검사'하는 추가과정이 진행된다. 

스크립트는 EUTXO를 사용하는 트랜잭션에 권한이 있는지 여부를 결정하는 코드 조각으로, 트랜잭션 유효성 검사를 위해 노드는 스크립트를 번역하고 실행할 수 있는 Plutus script interpreter를 호출한다. Interpreter는 UTXO가 잠긴 주소로 해시가 형성된 스크립트를 실행하게된다.

여기서 '해시'는 스크립트의 주소(위에서 Script address)이며, EUTXO가 이 스크립트에 잠겨있다고 볼 수 있다. 그리고, 트랜잭션이 실행될 때 새 EUTXO를 동일한 스크립트 주소에서 잠기게된다.

즉, plutus script에 의해서 EUTXO가 잠기면 해당 EUTXO의 스크립트 코드가 해당 주소와 연결된다.

EUTXO 모델의 주요 구성 요소

  • Datum: EUTXO에 추가할 수 있는 임의의 데이터로, 스크립트에 상태와 유사한 역할을 한다. 이 상태는 특정 UTXO와 연관되어 있다.
  • Redeemer: 트랜잭션이 전달할 수 있는 유저의 argument로, 트랜잭션 작성자가 UTXO를 어떻게 사용할지에 대한 의도이다.
  • Context: 트랜잭션에 대한 정보를 나타내는 데이터(inputs, outputs, minted value, redemers, info data, tx fees) 

스크립트에 잠긴 EUTXO가 있고, 스크립트는 datum, redeemer, context라는 input 데이터를 기반으로 트랜잭션이 EUTXO를 사용할 수 있는지 여부를 결정하게 된다. 이를 순서대로 더 자세히 정리하면 아래와 같다.

Plutus 스크립트 실행과정

1. 트랜잭션 작성

  • 개발자는 Plutus 스크립트를 작성하여 스마트 컨트랙트 로직을 정의
  • 작성된 스크립트는 필요한 Datum, Redeemer, Context를 포함하는 트랜잭션과 함께 패키징

2. 트랜잭션 제출

  • 트랜잭션 작성자는 노드에 트랜잭션을 제출
  • 트랜잭션에는 스크립트 주소로 잠긴 EUTXO와 관련된 데이터가 포함됨

3. 노드 수신 및 검증

  • 노드는 제출된 트랜잭션을 수신하여 기본 검증 수행
  • 트랜잭션 형식이 올바른지, 유효한 서명인지, 필요한 데이터가 있는지 확인

4. Plutus script interpreter 호출

  • 노드는 트랜잭션 유효성 검증을 위해 Plutus script interpreter 호출
  • 트랜잭션에서 제공된 Datum, Redeemer, Context를 입력으로 받아 Plutus Script를 실행

5. Plutus Script 실행

  • Interpreter는 Plutus Script를 실행하여 트랜잭션이 유효한지 검사
  • 이 과정에서 스크립트는 트랜잭션이 EUTXO를 사용할 권한이 있는지, 조건을 만족하는지를 평가

6. 리소스 소비 추적 및 수수료 계산

  • 스크립트 실행 중 리소스 소비가 추적됨
  • 예상된 리소스 소비량을 초과하면 스크립트 실행이 중지되고 트랜잭션은 거부됨

7. 트랜잭션 승인 또는 거부

  • 스크립트가 성공적으로 실행되고 모든 조건을 만족하면, 트랜잭션은 유효하다고 판단되어 블록에 포함됨
  • 스크립트가 실패하면 트랜잭션은 거부됨

8. 트랜잭션이 블록체인에 포함됨

  • 유효성이 검증된 트랜잭션은 블록체인에 포함됨
  • EUTXO는 소비되고, 새로운 UTXO가 생성되어 블록체인 상태가 업데이트됨

9. 트랜잭션 결과 배포

  • 블록이 네트워크에 전파되면서 모든 참여 노드는 새로운 블록을 수신하고 상태를 업데이트함
  • 트랜잭션의 결과는 모든 노드에 의해 공유

개발자는 plutus on-chain 코드를 작성하여 패키징한다음, plutus 스크립트가 포함된 트랜잭션을 생성하고 블록체인에 보낸다. 트랜잭션이 블록체인에 저장되면, 다른 트랜잭션을 전송하여 스크립트를 실행할 수 있다.

여기서 스크립트 검증의 경우, 일반 트랜잭션 검증보다 더 많은 리소스를 요구하는데, 카르다노에서는 스크립트 실행에 대한 정확한 수수료를 미리 로컬에서 계산할 수 있다. Script interpreter는 스크립트 실행 중 리소스 소비를 추적하여, 실행 에산이 모두 소진되면 스크립트 평가가 중지되어 결과는 false가 된다. false는 EUTXO가 소비되지 않았다는 것을 의미한다.

Plutus script는 EUTXO와 연관된 상태와 트랜잭션으로받은 데이터에 작동되며, 그 외엔 전혀 영향을 받지 않는다.  전역 수준, 원장 관점에서 변경되는것은 그저 새 블록이 있을때 주소에서 다른 주소로 EUTXO가 이동되는 것 뿐이다.

결국, 카르다노 기반의 유동성 풀 개념이 있는 어플리케이션은 에이전트들이 풀의 EUTXO를 두고 경쟁하지 않을 수 있도록 하는 것이 중요하다. EUTXO를 소비하는 트랜잭션은 독립적으로 실행되지만, 다른 에어전트가 동일한 EUTXO를 소비하는 경우 충돌이 발생할 수 있다.

빌더들은 이 부분을 고려해 EUTXO를 효율적으로 분할하고 관리하는 전략이 필요하며, EUTXO를 동시에 소비하려는 경쟁 조건을 최소화해야한다.


참고

https://developers.cardano.org/docs/smart-contracts/#introduction

https://cexplorer.io/article/understanding-utxo-spending-through-a-script

https://cardanians.io/en/understanding-cardano-extended-utxo-200

반응형
Comments