devops

Cardano EUTxO와 트랜잭션 구성 및 실행 프로세스 본문

Cardano

Cardano EUTxO와 트랜잭션 구성 및 실행 프로세스

vata500 2024. 2. 27. 23:42
반응형

카르다노의 UTxO 회계모델은 스마트 컨트랙트와 다양한 자산을 지원한다. 지난 글에서 이런 UTxO의 특징을 정리했다면 이번 글에는 어떻게 사용되는지, 스크립트를 통해서 어떻게 실행되는 지 정리해보자. 

UTxO

UTxO 모델은 Account 모델과는 다르게, UTxO 형태로 원장에 기록되어, 주소의 잔액이 모든 UTxO 값의 합으로 계산된다. 그래서 Account 모델은 하나의 주소를 가지고 있지만, UTxO 모델의 일반적인 유저의 계정에는 여러 주소를 가지고 있다.

UTxO는 한 번만 사용될 수 있으며, 트랜잭션에 대한 입력으로 사용된다. 새 UTxO는 트랜잭션의 출력으로 생성되며, 이 UTxO는 다시 새로운 트랜잭션의 입력으로 사용된다.

입력으로 사용된 하나의 UTxO는 여러 UTxO를 출력으로 생성될 수 도 있다. 그리고 생성된 UTxO들은 다른 수신자에게 전송될 수 도 있다. A라는 사람이 100 ADA를 가지고 있는데, B라는 사람에게 20 ADA를 전송하려고 할 때, 80 ADA의 UTxO는 B에게, 나머지 20 ADA 는 A에게 전송된다고 보면 된다.

그래서 UTxO 모델에서 트랜잭션은 비상태성을 가지고 있다. 이전의 기록이나 전역 state에 전혀 영향을 받지 않는다. 거래가 유효하기 위해서는 입력과 출력, 수수료, 증인만 제공되면 된다.

'witness'은 자산의 소유자가 거래를 승인했음을 나타내는 데이터로, 서명(key credential의 증명) 이거 스크립트 실행(script credential 증명) 둘 중 하나다.

Shelly Address의 UTxO Spending

Shelly address에서 UTxO Spending

단일 Shelly address에는 여러 UTxO가 존재할 수 있으며, Shelly 주소는 Header와 Payload로 구성된다. Payload는 Payment Credential과 Stake address Reference가 포함되어 있다.

Payment Credential: 주소에 있는 자금을 소유한 사람을 식별하는 Shelly address의 요소로, Key Credential 이거나 Script Credential 중 하나다. 

UTxO는 특정 주소에서 사용되거나, 같은 주소가 새 UTxO를 수신할 수 있는지 확인해야한다. UTxO는 발신자 address로부터 수신자의 address로 이동한다.

UTxO는 Identifier와 value로 구성된 구조로 이뤄져있다. 여기서 Identifier(식별자)는 Outpoint를 말한다,

  • Outpoint: UTxO의 위치를 가리키는 Pointer 역할을 담당. 이전 트랜잭션 ID와 UTxO를 생성한 트랜잭션의 Output Index로 구성됨
  • Fund: UTxO가 보유한 코인 혹은 토큰의 value

새 UTxO는 트랜잭션을 통해서 생성된다. 즉, 트랜잭션은 입력 UTxO를 사용해서 새 UTxO를 생성한다. 거래에서 Destination address와 Fund를 가진 새로운 출력 UTxO가 생성된다. 

트랜잭션의 입력은 UTxO지만, 기술적으론 블록체인에서 UTxO를 식별하는 Outpoint다. Outpoint는 이전 트랜잭션 ID와 UTxO를 생성한 트랜잭션의 Output Index로 구성되는데, 이 Output Point를 제공하여 거래는 UtxO에서 자금을 청구하고 이를 새 거래에 대한 입력으로 사용할 수 있게 된다.

입력 UTxO는 witness를 제공해야하는 주소(현재 소유자의 주소)를 나타낸다. 이는 Outpoint가 블록체인의 UTxO 위치를 가리키고 UTxO에 Destination address가 있기 때문이다. Destination address에는 주소의 자금을 보유한 사람을 식별하는 Key Credential 또는 Script Credential인 Payment Credential이 있다. 그래서 거래가 UTxO를 사용하기 위해선 Destination address의 Payment Credential의 유효한 Witness를 제공해야한다.

UTxO를 사용하면 새 Destination Address와 연결되는 새 UTxO가 생성되고, UTxO를 입력으로 사용하는 트랜잭션은 Destination 주소와 새 UTxO의 값을 지정하는 하나 이상의 출력도 제공해야만 한다. 그리고 여기서 새 UTxO는 Destination address의 Payment Credential과 연결된다.

결국 Credential 소유자만 향후 거래에서 이 UTxO를 사용할 수 있다.

1 Input UTxO, 2 Output Transaction

위에서 보이는 것과 같이 트랜잭션에는 하나의 Input UTxO와 두개의 Output UTxO가 있으며, Fee, Transaction ID 그리고 Witness가 있다.

  • fee: 사용자가 트랜잭션 처리를 위해 네트워크에 지불하는 ADA 수수료
  • witness: 트랜잭션이 자금 소유자에 의해 승인되었음을 증명하는 일련의 witness가 포함됨. 트랜잭션은 각 Input address(발행 정책 ID, 출금 보상 계정, 인증서 작성자의 Credential)에 대한 witness를 제공해야함. 위 트랜잭션에서는 Input UTxO가 하나만 있기에 유효성 검사에서 witness가 하나만 필요함.

여기서 투입물의 총 value는 output value와 fee의 총 가치와 같거나 커야만 한다.

위 이미지를 통해서 Alice가 800 ADA를 Bob에게 보내는 프로세스를 설명해본다.

[Alice는 1000 ADA의 UTxO를 사용하며, Alice는 Bob의 Public key를 기반으로 Key Credential이 있는 Bob의 address로 800 ADA를 전송한다]

  1. Alice의 주소를 대상으로 거래 수수료 1 ADA를 제외한 199 ADA를 보내는 첫번쨰 UTxO를 생성한다.
  2. Bob의 주소를 대상으로 하여 800 ADA를 보내는 두번째 UTxO를 생성한다.

이 트랜잭션이 네트워크에서 확정되면 Bob은 Private key를 사용하여 자신의 주소에서 800 ADA를 거래할 수 있게 된다. 물론 Alice도 동일하다.


참고

https://cexplorer.io/article/understanding-utxo-spending

 

반응형
Comments