이더리움 백서 조지기 - (1) 역사

김진주·2022년 3월 9일
0
  • 상태변환시스템으로서의 비트코인 (Bitcoin as a State Transition System)

이더리움 백서는 착한것 같다. 비유 엄청 열심히 들어준다. 조져보자.

[본문 4-1] 기술적인 관점에서 보았을 때, 비트코인과 같은 암호화 화폐의 장부는 하나의 상태변환시스템(state transition system)으로 생각해볼 수 있다. 이 시스템은, 현재 모든 비트코인의 소유권 현황으로 이루어진 하나의 “상태(state)” 와 이 현재 상태와 트랜잭션을 받아서 그 결과로써 새로운 상태를 출력해주는 “상태변환함수(state transition function)”로 구성되어 있다.

이더리움 왈 "비트코인은 상태변환시스템이야!!"
why?

비트코인은 (1) 상태 + (2) 상태변환함수로 구성되어 있다.

(1) 상태 : 기존 모든 비트코인의 소유권 현황
(2) 상태변환함수 : 새로운 상태 = f(기존 상태, 트랜잭션)

그치.. 기존 + 변화(트랜잭션) -> new 현재니까. 당연한 말 하고있다. 키득~

[본문 4-1-4] 표준 은행 시스템에 비유하자면 상태는 모든계좌잔고표(balance sheet)이고 트랜잭션은 A에서 B로 $X 를 송금하라는 요청이며, 상태변환함수에 의해 A의 계좌에서는 $X 가 감소하고 B의 계좌에서는 $X 가 증가한다. 만약 처음에 A 의 계좌에 있는 금액이 $X 이하인 경우에는 상태변환함수가 에러를 리턴한다.

이것은 심심한 제 그림입니다 !! 머.. 암튼 비트코인도 결국 상태를 변환해준다는 것임.

[본문 4-1-7] 이러한 상태변환를 비트코인 장부에서는 다음과 같이 정의할 수 있다.

Apply(S.TX) -> S' or ERROR 

이게 상태변환함수.

결국 아까 내가 말한 '새로운 상태 = f(기존 상태, 트랜잭션)'을 멋지게 쓰신 것.

Apply(현재상태.트랜잭션) -> 새로운 상태 or ERROR
(이상한 거래까지 다 받아주면 안되니까~ 그땐 ERROR ^^ 풋)

[본문 4-2] 은행 시스템 예시에서는 다음과 같다.

APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 }

기존 상태 $50 있던 Alice랑 Bob 간 Transaction으로 인해 -
Alice 는 $30, Bob은 $70이 되어버린 상태변환~~

APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR

이건 기존 상태 $50 있던 Alice랑 Bob 간 Transaction -
그치만 Alice가 $70을 보내려고 한다? 어림도 없지
비트코인에서 'ERROR ^^ 풋' 리턴해주듯 현실에선 잔액부족 뜬단 말임.

왕쉽죵??루삥뽕??

[본문 4-3] 비트코인에서 "상태(state)"는 생성되었지만 아직 사용되지 않은 모든 코인들의 집합(기술적표현으로는 ‘소비되지 않은 트랜잭션출력’, UTXO(Unspent Transaction Outputs))이다. 각 UTXO 들에는 각자의 코인금액이 표시되어 있고 이 UTXO 의 소유자(20byte 의 주소로 정의되는 암호화된 공개키(public key))정보가 들어 있다.

상태 = UTXO 라는 멋진 말. = 아직 사용 안한 코인들의 집합

은행으로 치면 '상태'에 각각의 잔고, 계좌번호 등등 이듯
UTXO에는 각자 코인금액, 공개키 정보 ㅇㅇ

[본문 4-3-3] 트랜잭션은 하나 이상의 입력(inputs) 및 출력을 포함한다. 각 입력에는 보내는 쪽 지갑주소에서 선택된 기존 UTXO 에 대한 참조정보와, 해당지갑주소에 대응되는 개인키(private key)가 생성한 암호화된 서명을 담고 있다. 그리고 각 출력들은 상태에 추가될 새로운 UTXO 정보를 가지고 있다.

트랜잭션 - 입력 & 출력이 있어야졍
입력 : 송금하는 사람의 상태에 대한 참조정보 + 암호화된 서명
출력 : NEW 상태가 될 새로운 정보들~~

비트코인 백서 2pg 도식

대충 빗금 친 부분을 입력 내용이라 치고
(기존 상태 및 암호화 검증, 서명을 입력)
-> (새로운 상태가 될 내용들로 출력) 이라고 이해하면 되지 않을까?

상태변환함수 APPLY(S,TX) -> S' 는 다음과 같이 정의할 수 있다.
1. TX 의 각 입력에 대해:

  • 만약 참조된 UTXO 가 S에 없다면, 에러를 리턴.
  • 만약 서명이 UTXO 의 소유자와 매치되지 않으면, 에러를 리턴.
  1. 만약 입력에 사용된 UTXO들 금액의 합이 출력 UTXO들 금액의 합보다 작으면, 에러를 리턴.
  2. 입력에 사용된 UTXO 가 삭제되고 출력 UTXO 가 추가된 S를 리턴.
  1. if 기존 상태랑 먼가 안맞는 내용이 있다? 에러. 이 집 코인 이상해요.
    if 서명이랑 소유자가 다르다? 에러. 니 통장 아니잖아.
  2. if 잔액부족? 에러.
  3. 기존 상태 UTXO 삭제 / NEW 상태 UTXO 리턴. -> 바뀐 잔액들~~!!

[본문 5-1] 여기서 1번의 첫번째 과정은 존재하지 않는 코인이 트랜잭션에 사용되는 것을 막기 위한 것이고 1번의 두번째 과정은 다른 사람의 코인이 트랜잭션에 사용되는 것을 막기 위한 것이다. 위 절차를 실제 비트코인 지불과정에 적용하면 다음과 같다. Alice 가 Bob 에게 11.7 BTC 를 보내고 싶다고 가정하자. 먼저 Alice 지갑주소로부터 표시된 금액의 합이 적어도 11.7 BTC 이상인 UTXO 의 집합을 찾는다. 실제 대부분의 경우에는 11.7 BTC 를 정확히 바로 선택할 수 없다. Alice 의 지갑주소에서 각각 6, 4, 2 BTC 가 표시된 3 개의 UTXO 를 참조할 수 있다고 하자. 이 3 개의 UTXO 가 트랜잭션의 input 이 되고 2 개의 output 이 생성된다. Output 중 하나는 11.7 BTC 가 표시된 새로운 UTXO 이며 소유자는 Bob 의 지갑주소가 된다. 그리고 다른 하나는 12(6+4+2) - 11.7 = 0.3 BTC 의 "잔돈(change)"이 표시된 새로운 UTXO 이며 소유자는 Alice 자신의 지갑주소가 된다.

Alice는 뭔데 Bob한테 자꾸 돈주냐... 아무튼 상태변환시스템같은 비트코인을 상태변환함수로 표현하면 이런 거시다!

  • 채굴 (Mining)

쓰다보니 킹받네.. 비트코인 백서 엄청 쉽게 요약되어있는 기분. 그럼 생각보다 이해가 너무 잘되고 굳이 쉬운 이해를 위해 이걸 쓸 필요성을 못 느끼는 중이니 오늘 난 여기까지 써야징...

profile
화성 갈래요. 아니 진짜로.

0개의 댓글