티스토리 뷰

blockchain

bitcoin block의 timestamp

fistful 2018. 9. 7. 10:35
반응형

개요

 

비트코인의 블록, 그중에서 해시를 생성하는 입력 데이터 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
is the median time of the other clients, but only if
    1. there are at least 5 connected, and
    2. the difference between the median time and the nodes own system time
is less than 70 minutes.

Then new blocks are accepted by the peers if their timestamps is
    1. less than the network time plus 2 hours, and
    2. greater than the median timestamp of previous 11 blocks.

 

 

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) 까지 여유있게 있다.

 


 


반응형
댓글
댓글쓰기 폼