트랜잭션이란
트랜잭션은 은행 ATM이나 데이터베이스 등의 시스템에서 사용되는 더 이상 쪼갤 수 없는 업무 처리의 최소 단위이다. 예를 들어, A라는 사람이 B라는 사람에게 1,000원을 지급하고 B가 그 돈을 받은 경우, 이 거래 기록은 더 이상 작게 쪼갤 수가 없는 하나의 트랜잭션을 구성한다.
만약 A는 돈을 지불했으나 B는 돈을 받지 못했다면 그 거래는 성립되지 않는다. 이처럼 A가 돈을 지불하는 행위와 B가 돈을 받는 행위는 별개로 분리될 수 없으며 하나의 거래내역으로 처리되어야 하는 단일 거래이다. 이런 거래의 최소 단위를 트랜잭션이라고 한다.
블록체인 상에서 일어나는 트랜잭션은 누구나 볼 수 있도록 웹 상에 공개되어있다. 👉비트코인 익스플로러 위 링크로 들어가면 현재에도 일어나고 있는 비트코인의 트랜잭션 리스트를 확인할 수 있다.
트랜잭션의 구조
비트코인 익스플로러에서 확인한 트랜잭션의 내용은 아래와 같다.
🌱 Summary
큰 구조로 보자면 트랜잭션은 다음의 내용을 포함하고 있다.
hash
거래를 하기 위해 필요한 기존의 거래내역 : txIn
본 트랜잭션으로 인해 생성된 새로운 거래내역 : txOut
트랜잭션 수수료
여기서 화면 하단의 좌측이 txIn이고 우측이 txOut이다. ❗️ 좌측이 돈을 보내는 계정 / 우측이 돈을 받는 계정이 아님
에 유의
블록체인 중에서도 비트코인의 트랜잭션 방식은 조금 복잡한데, 단순히 A의 계좌에서 B의 계좌로 얼마가 감
👈 이런 형태의 장부가 아니라
A가 가진 3개의 수표 중 1번 수표를 사용해서 B에게 N원짜리 수표하나를 써주고 나머지 금액에 해당하는 새로운 수표를 또 써서 내가 가짐
👈 이런 형태로 기록을 하는 장부라고 생각할 수 있다.
가령 10만원짜리, 50만원짜리, 100만원짜리 수표를 가진 A가 20만원을 B에게 보내려고 하는 상황을 생각해보자
일반적인 계산법은
A의 잔고는 160만원, B의 잔고는 0원이며
A는 20만원을 B에게 주고 140만원이,
B는 A에게서 받은 20만원이 잔고가 되는 식이다.
(👆 이더리움은 이런 식으로 트랜잭션을 생성한다)
하지만 비트코인의 트랜잭션은
A가 가진 수표를 찾아보고 20만원을 지불할 수 있는 수표 중 적당한 수표를 찾는다. (50만원과 100만원)
그 중 하나(50만원이라고 하자.)에 서명을 해서 제출을 한다.
트랜잭션 과정을 거치면서 자동으로 20만원짜리 수표가 B에게, 30만원짜리 수표가 A에게 발급된다.
이제 A는 10만원짜리, 30만원짜리, 100만원짜리 수표를 가지게 되는 셈이고
B는 20만원짜리 수표를 가진다.
이런 조금 더 복잡한 트랜잭션 구조를 가진다.
🌱 Input
위의 비트코인 익스플로러 사이트를 보면 확실히 알 수 있는데,
input 항목에 있는 내용으로
수표를 가지고 있는 지갑 주소
어떤 수표인지를 나타내는 값
등이 있다.
특히, 어떤 수표인지를 나타내는 값
부분이 중요한데 수표는 기존의 트랜잭션을 통해서만 발급이 가능하다. 특정한 수표를 지정해주기 위해서는 해당 수표를 발급받은 트랜잭션 해시
와 그 트랜잭션으로 발급된 수표들 중 몇 번째 수표인지
에 대한 정보가 필요하다.
또한 수표를 사용하고자 하면 소유자의 서명이 필요하듯 비트코인 역시 해당 수표가 속한 지갑계정의 비밀키를 이용해 생성한 서명
역시 input에 담겨있어야 한다.
위 이미지에서 Pkscript로 처리된 부분이 이 정보들을 담고 있다.
❗️ 만약 A가 B에게 줘야할 금액이 20만원이 아니라 160만원이라면 10만원, 50만원, 100만원짜리 수표 3장이 모두 필요하게되고 이 각각의 수표에 대한 정보가 input에 들어가게 될 것이다. (160만원짜리 수표 한장으로 들어가는 것이 아닌 각각의 수표가 따로따로 3장
이 들어감!)
🌱 Output
output에서 본 트랜잭션으로 새롭게 발행된 수표들의 정보를 담고 있다. 위의 예시에서는 20만원과 30만원짜리 수표가 새로 발급되었다. 각각의 수표가 누구 소유인지(Address
)와 얼마짜리 수표인지(Value
) 등의 정보가 담겨있다.
❗️ 만약 B가 A에게 받아야할 금액이 20만원이 아니라 160만원이라면 A가 10만원, 50만원, 100만원짜리 수표를 따로따로 3장을 주게되지만 B가 이 돈을 받을 땐 160만원짜리 수표 1장
으로 받게 된다.
어차피 트랜잭션을 거치면 기존의 수표는 못쓰게 되고 무조건 새로운 수표를 생성해야 되니까 굳이 이걸 받은 수표 기준으로 따로따로 나눌 필요 없이 그냥 하나의 수표만 생성하면 된다!
🌱 UTXO : UnspentTxOutput
그러면 실체가 없는 이러한 암호화폐 수표들은 어떻게 보관될까? 현금처럼 수표 소유자의 지갑에 개별적으로 저장되는 방식이 아닌 수표들을 저장하는 창고에 모든 사람들의 수표가 차곡차곡 쌓여있다.
이 창고가 바로 UTXO이다. 아직 사용되지 않은 유효한 수표들을 저장해두는 역할을 한다.
모든 사람들의 수표가 쌓여 있다는 말은 곧 이 창고에 있는 수표를 모두 합하면 비트코인 총 발행량과 동일하다는 의미도 된다.
트랜잭션을 하려고 할 때 input에 넣을 수표 역시 이 곳에서 꺼내와야 하며, output으로 나오는 수표들도 자동으로 이 곳으로 들어간다.
결론
전체적인 트랜잭션의 과정을 그림으로 표현하면 아래와 같은 순환구조의 형태를 띈다.
이 글에서 수표
로 표현되었던 것들은 기존의 트랜잭션으로 생성된 txOut
이다. 이것이 UTXO 배열 내에 들어가있다가 사용하고자 하면 소유자의 서명을 넣어 txIn이 되고 트랜잭션이 일어남으로써 새로운 txOut이 생성되고 UTXO로 들어가게 된다.
그렇다면 최초의 수표는 무엇일까?
수표는 이전의 트랜잭션으로만 생성이 가능하다. 가장 최초의 수표는 어떻게 만들어질까? 바로 마이닝 보상
으로 지급되는 코인이다. 이 경우에는 트랜잭션의 input에는 채굴된 블록의 height값이 들어가며, output으로는 채굴자의 account와 마이닝 보상으로 책정된 코인양이 amount로 적힌 수표가 발급된다.