공대생 정리노트
5강 - 트랜잭션과 UTXO 본문
이번 강의는 블록체인에서 트랜잭션과 UTXO에 대해서 설명했고, 뒷부분의 절반 정도는 지금까지 배운 것을 wrap up하였다.
다음 강의부터 smart contract를 한다고 하는데, 기대가 된다
다른 MIT 오픈 코스인 Cryptocurrency Engineering and Design 수업도 참고했다
https://www.youtube.com/watch?v=VT2o4KCEbes
비트코인의 transaction에 대한 설명이 나온다.
Account based model(이더리움이 쓰는 방식)과 Unspend Transaction Outputs(비트코인이 쓰는 방식)을 설명해준다.
Account based model은 account들과 balance들을 저장한다. account의 balance가 충분하면 트랜잭션은 유효하다.
Account based model은 Replay attack에 취약하다. Account based model은 공격자가 트랜잭션을 가로채 지연시키거나 반복하는 것을 말한다. Account based model에서는 송금을 반복적으로 하게 해 송신자의 account가 0이 될 때까지 보내게 하는 등의 replay attack을 할 수 있다. 이더리움은 각 사용자가 지금까지 본 논스들을 track하게 하여 이를 방지한다고 한다(아주 간단하게 설명한 것 같다)
Unspend Transaction Outputs는 모든 코인은 같지 않다는 전제를 한다. 그래서 코인을 사용할 때 특정 코인을 얼마나 사용할 것인지를 포함한다. 매 트랜잭션마다 코인은 생성되고, 소비되고, 없어진다. 모든 코인은 단 한번만 사용이 될 수 있다
input은 지난 트랜잭션의 output을 가리킨다. Input에 Previous transaction ID가 있는 것을 볼 수 있을 것이다. 해당 트랜잭션은 송신자가 비트코인을 받았던 트랜잭션일 것이다.
Index는 그 트랜잭션의 아웃풋 중 소비하고자 하는 것을 가리킨다. 아웃풋은 여러 개가 될 수 있기 때문에 그 중 사용할 아웃풋을 고르는 것이다.
Signature은 해당 비트코인을 소비할 수 있게 하는 인증 역할을 한다.
lock_time은 해당 트랜잭션이 블록체인에 추가될 수 있는 시간이다. 채굴자가 블록체인의 최신 블록의 머클 루트에 해싱할 때 포함시킬 수 있는 가장 이른 시간이다.
강의에서 Input>=Output인 것과 lock_time으로 해당 트랜잭션을 validate할 수 있다고 하였다. 구체적으로 설명하지 않고 넘어가서 제대로 이해하려면 관련 자료를 더 찾아봐야 할 것 같다.
Input과 Ouput의 차이는 fee로 블록을 만든 사람에게 돌아간다.
여기서 학생들이 탈중앙화를 표방한 블록체인이 수수료를 걷으면 은행에게 수수료를 내는 것과 무엇이 다르냐는 것에 대해서 의견을 교환하였다. 해당 내용을 정리하면 은행은 고정된 비용인 반면 블록체인은 탈중앙화되어 fee가 market 상황에 따라 유동적으로 변할 수 있다고 하였다.
Coinbase Transaction
coinbase Transaction은 블록의 첫번째 트랜잭션을 말한다. 다른 트랜잭션과 다른 점은 인풋은 리워드만 있고, 아웃풋은 단 하나로 채굴자의 주소를 가리키고 있다는 것이다.
코인베이스 트랜잭션의 아웃풋을 사용하려면 최소 100개의 블락의 깊이가 되어야 한다. 이 부분이 정말 이해가 안되서 여러 자료를 찾아봤는데, 얕게 이해하기로는 갑자기 예상치 못하게 fork가 되면 valid하던 블록이 invalid 할 수 있기 때문에 이로 인한 부작용을 방지하기 위해서 하는 것 같다.
UTXO
Unspent Transaction Ouput의 줄임말이다. 위에서 언급한 개념으로 단 한번만 사용이 될 수 있는 트랜잭션 아웃풋이다. 즉, 한번 사용되면 없어진다.
여기서 흥미로웠던 점은 UTXO를 chainstate라고 불리는 비트코인 코어의 LevelDB 데이터베이스에 저장하고 있다는 것이다.
역시 강의에서는 아주 짧게 다루고 넘어가서... 좀 더 조사해봤다.
마지막에 Use of LevelDB라는 챕터가 있다. UTXO를 데이터베이스를 안쓰고 유지하는 것이 힘든가보다..라고 넘어갔다.
완전 제대로 이해를 하려면 코드를 다 파봐야 할 것 같다...
Bitcoin Script
트랜잭션을 위한 프로그래밍 코드이다.
스택 베이스의 코드이며, 루프가 없다(튜링 완전하지 않음). 루프가 없는 이유는 공격자가 이를 이용해 공격을 하기 쉽기 때문이다. 관련 내용은 밑의 글에 잘 나와 있다.
https://decenter.kr/NewsView/1VE1PVFSZQ/GZ05
'블록체인 > MIT ocw : blockchain and money' 카테고리의 다른 글
7강 : 블록체인 기술이 직면한 문제 (1) | 2021.12.17 |
---|---|
6강 : 스마트 컨트랙트 (0) | 2021.12.11 |
4강 - Proof of Work, Consensus (0) | 2021.11.27 |
3강 - 해시 함수, Merkle Trees (0) | 2021.11.26 |
2강 - 돈의 역사 (0) | 2021.11.25 |