티스토리 뷰
개요
비트코인의 한 블록, 그중에서 해시를 생성하는 입력 데이터 80 바이트에는 timestamp 가 들어있습니다.
timestamp 에 대해 좀더 들여다보려 합니다.
참고링크: https://en.bitcoin.it/wiki/Block_timestamp
< 출처: http://www.righto.com/2014/09/mining-bitcoin-with-pencil-and-paper.html >
Timestamp 알아보기
Unix time
Unix time 이란 1970년 1월 1일 0시 0분 0초 (UTC) 로부터 몇 초나 지난것인지를 표현한 것이다.
위 그림의 경우 타임스탬프가 358B0553 이니 이만큼의 초가 지난 시간이라는 것이다.
실제 날짜로 변환해보면 아래와 같이 1998년 6월 20일로 나온다. https://www.epochconverter.com/
비트코인에서의 역할
1) 해시에 변화를 주는 입력값으로서의 역할
- 비트코인에서 해시를 만들기 위한 입력값은 80바이트이며
- 6가지 요소로 이루어져 있다. 프로그램 버전, 이전블록해시, 머클루트, 타임스탬프, 난이도비트, 논스
- 이들 중 변화할 수 있는 값은 3개 이다.
- 머클루트: 어떤 거래들을 채굴할 블록에 포함시켰는지에 따라 변화
- 타임스탬프: 특정 시간 범위내에서 선택
- 논스: 임의의 난수
2) 블록체인을 조작하려는 공격이 어렵게 하는 역할
- (아래에 다루겠지만) 타임스탬프로 설정할 수 있는 시간의 범위는 약 2시간 정도이며
- 이전 블록들의 타임스탬프와 주위 노드들과 연계되어 범위가 정의된다.
- 따라서 나쁜 넘이 (adversary) 고려해야 할 것이 더 많아진다.
타임스탬프 값 선정 기준
1) 이전 11개 블록들의 타임스탬프들의 중간값보다는 커야한다.
- 즉, 11개의 타임스탬프를 시간순서대로 정렬의후 가운데 값 (=6번째 값) 보다는 커야 한다.
2) Network-adjusted time 의 중간값 + 2시간 보다는 작아야 한다.
- Network-adjusted time: 나와 연결된 모든 노드 (=컴퓨터라고 생각하자)들의 타임스탬프들의 중간값
결과적으로, 실제 블록의 채굴시간과 타임스탬프는 1-2시간까지도 오차가 날 수 있다.
Network-adjusted time 심화
- 하나의 노드가 다른 노드와 연결되면, 그 노드의 UTC timestamp 를 받는다.
- 노드는 다른노드의 UTC timestamp 와 그것을 노드 자신의 local time 으로 바꾸는 offset 값을 저장한다. (node-local UTC 라는 표현은 좀 어색하다. )
- Network-adjusted time 은 자신을 포함한, 이렇게 얻은, 연결된 노드들의 타임스탬프 값들의 중간값이다.
- 노드 자신의 local time 에서 70분 이상은 조정되지 않는다. (상한선) (2018-09-14 수정)
- 위 70분 표현이 애매해서 좀더 찾아보았음
- 링크: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-January/015677.html
- "Network-adjusted time" 과 자신과의 차이가 70분보다는 작아야 한다는 것이었음
원문 발췌 The Bitcoin protocol defines “network time” for each
node. The network time Then
new blocks are accepted by the peers if their timestamps is |
Unix time: signed int vs unsigned int
year 2038 problem
- 링크: http://en.wikipedia.org/wiki/Year_2038_problem
- Unix time 은 보통 부호가 있는 정수 변수에 넣어둔다.
- int type 은 32비트 이므로 최대 양수값은 0x7FFFFFFF 가 된다. 이걸 날짜로 변환해보면 2038년이 된다.
- 즉, 2038년 1월 19일 오전 3시 14분 7초 (UTC) 이상의 값을 담을 수 없다.
비트코인은 unsigned int 를 사용한다
- unsigned int 는 부호가 없이 0또는 양의 정수를 담는 타입이기에 최대값은 0xFFFFFFFF
- 따라서, 2106년 2월 7일 오전 6시 28분 15초 (UTC) 까지 여유있게 쓸 수 있다.
'blockchain' 카테고리의 다른 글
bitcoin 채굴 난이도는 어떻게 결정되는가 (0) | 2018.09.11 |
---|---|
bitcoin 에서 채굴할 다음 블록은 어떻게 결정하는가 (0) | 2018.09.07 |
SHA-256 Bitcoin (0) | 2018.09.01 |
SHA-256 By Hand - Round Function (0) | 2018.08.31 |
SHA-256 By Hand - Message Expansion Function (0) | 2018.08.29 |
- Total
- Today
- Yesterday
- 2023
- 독서후기
- 노션
- JIRA
- github
- 클린 애자일
- intellij
- 제이펍
- websocket
- golang
- solid
- bun
- postgres
- API
- ChatGPT
- 영화
- Bug
- 체호프
- 독서
- Shortcut
- strange
- go
- agile
- notion
- OpenAI
- pool
- folklore
- 인텔리제이
- 잡학툰
- Gin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |