2014년 2월 13일 목요일

비트코인 프로토콜을 통한 비트코인 설명

Bitcoins the hard way: Using the raw Bitcoin protocol

http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html

-> 위의 내용에 대한 요약

* 비트코인 address

1. random 256-bit private key를 생성한다. 나중에 transaction을 sign하는데 사용된다.
2. private key를 가지고 Elliptic Curve DSA 알고리즘을 사용해서 512-bit public key를 생성한다. 나중에 transaction에의 signature를 확인하는데 사용된다. public key의 앞에 04를 붙인다.(bitcoinj에서 bouncy castle을 사용해서 public key를 만드는데 코드를 보면 private key로부터 public key 생성시 04가 붙어서 나온다. bouncy castle는 왜 04를 붙인 public key를 주는걸까? 자세한 내용 확인 필요)
3. public key를 SHA-256과 RIPEM hash 알고리즘을 사용해서 160bit로 만든다.
4. 160bit로 만든 hash 값을 Base58Check로 인코딩한다. 이것이 사용자들이 서로 교환하는 비트코인 address이다.
5. private key를 로컬에 저장하는데 Wallet Interchange Format으로 저장한다. WIF는 단순히 Base58Check 인코딩이다.

* Transaction

1.비트코인을 이 주소에서 저 주소로 옮기는 것
2. input과 output으로 이루어진다.
3. 이전 transaction의 output으로 부터 비트코인을 가져와서 input으로 하고 보내고자 하는 쪽을 output으로 한다.
4. 모든 input은 다 사용되어야 한다. 따라서, 일부분만 쓰고자 하면 남는 부분은 자기 자신에게 다시 보내는 형태로 사용한다.
5. 사용료(fee)가 있다. 사용하고 남는 값이 모두 fee가 된다. 보통 값이 그리 크지는 않다.

* Transaction을 sign하기

1. transaction의 내용을 private key로 hash한 다음에 sign한다.
2. public key가 transaction에 포함되는데 이 key가 맞는 지는 이전의 transaction에서의 address를 봄으로서 파악할 수 있다.
3. signing한 것을 public key로 verify할 수 있다.


* peer 찾기

1. 하나의 peer와 연결되면 이 peer와 서로 알고 있는 다른 peer들의 주소를 교환한다.
2. 그렇다면 가장 처음의 peer는 어떻게? - 몇개의 신뢰할만한 peer가 이미 네트워크 상에 존재하도록 만든다: DNS에 등록해 놓거나 프로그램에 미리 입력해 놓기.

댓글 없음:

댓글 쓰기

Building asynchronous views in SwiftUI 정리

Handling loading states within SwiftUI views self loading views View model 사용하기 Combine을 사용한 AnyPublisher Making SwiftUI views refreshable r...