이더리움 백서는 착한것 같다. 비유 엄청 열심히 들어준다. 조져보자.
[본문 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 의 소유자와 매치되지 않으면, 에러를 리턴.
- 만약 입력에 사용된 UTXO들 금액의 합이 출력 UTXO들 금액의 합보다 작으면, 에러를 리턴.
- 입력에 사용된 UTXO 가 삭제되고 출력 UTXO 가 추가된
S
를 리턴.
[본문 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한테 자꾸 돈주냐... 아무튼 상태변환시스템같은 비트코인을 상태변환함수로 표현하면 이런 거시다!
쓰다보니 킹받네.. 비트코인 백서 엄청 쉽게 요약되어있는 기분. 그럼 생각보다 이해가 너무 잘되고 굳이 쉬운 이해를 위해 이걸 쓸 필요성을 못 느끼는 중이니 오늘 난 여기까지 써야징...