제가 백서부터 시작하는 이유와 같은 글이라서 @atomrigs 님의 글을 리스팀 했습니다.
언젠가 이 사회가 바뀌는 날이 있겠죠. 그 때를 준비해야하구요.
자 밥도 해먹고 청소도 하고 빨래는 세탁기가 하고 있으니 시작해볼까요?(넵! 저 혼자살아욧!)
비트코인 백서부터 시작합니다
비트코인 백서부터 시작합니다(2)
비트코인 백서부터 시작합니다(3)
비트코인 백서부터 시작합니다(4)
비트코인 백서부터 시작합니다(5)
비트코인 백서부터 시작합니다(6)
9. 금액의 결합과 분할
돈을 개별로 관리하는 것도 가능하겠지만, 거래에서 작은 개별 단위까지 굳이 나누어 다루는 것은 거 추장스럽다. 금액을 나누고 합칠 수 있도록 거래 내역은 복수의 입력과 출력으로 이뤄진다. 대개는 큰 금액의 단일 입력이거나, 소액 모금을 위한 여러 입력이거나, 한 출력은 지불 다른 출력은 거스름돈 같 은 두 개의 출력 방법이 될 것이다.
어찌보면 당연한 이야기를 하고 있습니다. 당연히 작은 금액들은 나누고 합쳐서 횟수를 줄이면 처리용량도 줄어들고 번거롭지도 않고 좋죠.(갑자기 알바 월급 10원짜리로 줬던 사장님이 생각나네요..--) 다음 문장도 쉽게 생각하면 간단합니다. 3400원짜리 맥주 산다고 만원을 내면 그 뒤로 이어지는 행동은 편의점 알바생이 만원을 받는 행위 한번, 잔돈을 손님에게 건내는 행위 한번 이렇게 두 번의 행동이 나오게 되죠.
자 이렇게 쉽게 넘어가면 좋겠지만.... 여러 스승님들의 조언을 받들어 좀더 들어가보겠습니다.
혹시 이 글을 읽으시는 분들은 제가 잘못 이해하고 있거나 다른 점이 있으면 꼭 댓글로 남겨주시기 바랍니다.
제 이해수준에서 쓰는 글이라 틀린 점이 분명히 있을 수 있습니다. 항상 링크부터 봐주세요ㅎㅎ
얼마 전 @yellowboy1010님께서 제가 남겨주신 답글입니다.
오 아주 열심히 하시는 군요 ㅎㅎ 저는 비트코인 공부를 할 때 반드시 생각해야하는 것 중 하나는 비트코인이 장부를 기록하는 방식입니다. 우리는 장부에 적을 때 홍길동 1000원이라고 적잖아요? 만약 3000원을 받으면 홍길동 4000원이라고 적고요. 비트코인은 다릅니다. 비트코인은 개인키에 맵핑되는 지갑 주소에 각각의 돈의 출처가 적혀있습니다. 4000원이지만 1000원은 상점에서 받고 3000원은 친구에게 받았다고 한다면 제 잔고는 4000원이 아니라 1000원과 3000원이되는 것입니다. 그리고 이 돈들은 이전 주인으로 부터 받은 전자서명을 통해 저에게 권리를 이전해온 것이고요. 이더리움은 다릅니다. 따라서 UTXO 검증에 대해 깊이 있는 이해를 한다면 비트코인만의 특징, 그리고 다른 코인들의 특징을 이해할 수 있을 것 같습니다.ㅎㅎ 화이팅!!!
(넵 화이팅 해야죠.)
한글로 잘 설명해주셔서 참 이해가 쉬운 가운데 ..모르는 영어가 나옵니다.
1) UTXO(Unspent Transaction Out)은 뭘까용?
잘 모르는 내용이니 역시 우리 두분 선생님 다시 모십니다.(매번 감사드립니다.꾸벅)
@twinbraid/hdwallet
@easyblockchain/2odxha-1
@easyblockchain/3nexdc-2
그리고 상당히 어려운 개념인 거 같으니 한 분 더 모시겠습니다. 좋은 글 많이 읽는게 장땡인거 같습니다.
@goldenmen 님의 포스트도 링크하겠습니다.
우선 위에 포스팅들 정독하세요~ 세 분의 논점이 조금씩 달라서 약간 헷갈릴 수도 있을 거 같은데 중요한 건 UTXO의 개념을 이해하는 거니 정리를 해보겠습니다.
UTXO는 말 그대로 소비되지 않은 거래 내역의 출력값입니다. '소비되지 않은' 이라 하면 자신의 지갑에 들어온 후 지갑 안에서 변동이 없었다(꺼내지 않았다)는 말입니다. 출력값이라는 말이 좀 헷갈리는데 이미 출력이 된 돈 아니라 다음 거래에서 쓸 수 있는 돈으로 생각하시면 편합니다. 여기서 중요한 것은 자신의 지갑에 들어온 후 입니다. 두 가지 경우가 있습니다. 다른 사람의 송금을 받은 경우와 자신이 지불한 금액의 잔돈이 들어온 경우 입니다. 위에 백서의 내용대로 해석하면 자신의 지갑으로 출력된 돈을 말하는 것입니다. 누군가로부터 받음 송금은 그 사람이 출력한 돈이고 잔돈은 바꿔 말해서 제가 돈을 지불한 사람이 잔돈으로 저한테 출력한 값일테니까요.
이렇게 지갑에 들어온 돈은 지갑에 출력된 값 그대로 저장됩니다. 그냥 제 지갑에 있는 돈처럼 '누구한테 받았는지 모르겠지만 2만원이 있다'가 아니라 만원 짜리, 천원짜리 위에 누구한테 받았는지 적고 따로 모아놓은 것처럼 받은 출력값 그대로 섞이지 않고 존재합니다.
BTC로 돌아와서, 제가 친구 B한테 3BTC(갖고 싶네요 3BTC...)를 송금한다고 합시다. 그럼 우선 제 지갑에서 3BTC를 한번에 처리할 수 있는 UTXO를 찾습니다.
- 4BTC를 가지고 있는 UTXO가 있는 경우(쉽게 30만원을 보내야 하는데 40만원차리 수표가 있는 경우)
이 상황에서는 저 4BTC(40만원 수표)를 가지고 있는 UTXO를 우선 꺼냅니다.(꺼냈으니 이제 UTXO가 아니게 되겠죠.)
이 꺼낸 4BTC는 입력값이 될 것이고 친구 B에게 3BTC를 보내고 트랜잭션 수수료를 제외한 잔돈(쉽게 수수료를 0.05 BTC라고 하죠)을 다시 받게 될 것입니다. 이렇게 거래를 끝내고 나면, 저는 4BTC였던 UTXO는 없어지고 잔돈으로 받은 0.95BTC라는 UTXO가 생기게 될 것이고 친구 B는 저한테 받은 3BTC라는 UTXO가 생기게 됩니다.
여기서 UTXO를 쪼개서 쓰지 못한다는 이야기는 저 40만원짜리 수표처럼 저거 1/4로 짜른다고 10만원이라고 안 쳐주듯이 4BTC 중 3BTC만 꺼내서 나머지 1BTC를 제 지갑의 UTXO로 남겨두는 것이 안된다는 의미입니다. 한 번 건드리면 Unspent라는 글자가 날라가는 거죠. - 3BTC를 한 번에 처리할 수 있는 UTXO가 없는 경우(10만원 짜리 수표나 5만원짜리 등등만 있는 경우)
그럼 제 지갑에서 충분한 금액을 다 꺼내야합니다. 2.5BTC와 1BTC짜리 UTXO를 꺼낸다고 생각해봅시다.
그럼 저 2.5BTC와 1BTC짜리 UTXO는 없어집니다. 그리고 위와 같이 3BTC짜리 UTXO가 친구 B의 지갑에 생길 것이고 저에게는 수수료 제외한 잔돈 0.45BTC라는 UTXO가 생깁니다.
백서에서 설명한 한 출력은 지불 다른 출력은 거스름돈 같은 두 개의 출력 방법 은 위와 같이 이해가 됩니다.
팬아웃의 의미는 찾아봐도 정확히 모르겠네요.. 우선 체인톡의 질문에 대한 loum님 답글을 참조합니다.
http://www.chaintalk.io/archive/qna/117
이 글을 보면 팬아웃이 공격방법이 되는 거 같은데. 정확히 무슨 의미로 쓰였는지 잘 모르겠습니다.
번역이 잘 못된 거 같기도 한데 우선 이해한데로 써보겠습니다.
It should be noted that Fan-out, where a transaction depends on several transaction, and those transaction depend on many more, is not a problem 이 원문인데요. 거래가 여러 거래들에 기반하고 각 거래들이 다수에 의존하는 경우더라도(이를 팬아웃이라 하며) 로 고쳐서 이해했습니다. UTXO가 전자서명을 통해 저에게 이전된 권리이니 그 출처들이 기록되어 있을 것이고 그 과정만 따라가면 거래 기록의 독립된 사본도 추출할 필요가 없어지게 됩니다.
제 나름대로 이해를 해보려고 했는데 이 부분은 저두 의심이 드네요. 스승님들한테 한번 물어봐야겠습니다.
이해가 되면 고치든지 할게요.ㅎ 정확히 아시는 분 댓글 좀 남겨주세요~~
다음 단락 10. 개인 정보 보호 를 이 글에 쓰자고 생각하고 있었는데 개인키/공개키 이야기가 들어가야할 거 같아서 우선 이 글은 여기서 줄입니다. 안 그래두 머리 썼더니 흰머리가 나려는 게 느껴져서..
중요한 내용이니만큼 읽으시는 분들도 자료 더 찾아보고 저한테도 공유 좀 해주셨으면 좋겠네요.
저두 제가 쓴 글 다시 읽어보면서 생각 좀 해봐야겠네요. 제대로 이해한 게 맞는 건지. ㅎㅎ
토요일은 돌아온 무한도전과 함께!!! 주말 잘 보내세요^^