티스토리 뷰
개요
비트코인의 한 블록, 그중에서 해시를 생성하는 입력 데이터 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 (1) | 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
- 인텔리제이
- clean agile
- 독서후기
- MCP
- go
- backend
- agile
- 오블완
- websocket
- middleware
- Echo
- OpenAI
- 티스토리챌린지
- bun
- gocore
- postgres
- Gin
- API
- 영화
- 클린 애자일
- 잡학툰
- strange
- notion
- github
- 독서
- ChatGPT
- 체호프
- golang
- intellij
- solid
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |