용어집 / 프로토콜과 업그레이드
중앙값 과거 시각
별칭은 MTP입니다.
- 중앙값 과거 시각이란 무엇입니까?
- 중앙값 과거 시각은 비트코인의 합의 시계입니다: 직전 11개 블록 타임스탬프의 중앙값이며, 모든 시간 기반 잠금 시간을 대조하는 기준이 되는 값입니다.
BIP-113에 명시되어 있습니다.
노드는 검증 중인 블록 직전 11개 블록의 타임스탬프를 가져와 정렬한 뒤 가운데 값을 현재 시각으로 사용합니다. 그 중앙값은 약 6개 블록 뒤처져 있어 실제 시계보다 대략 1시간 늦습니다. 그러므로 정오까지 잠근 코인은 오후 1시에 가까워져야 사용할 수 있게 됩니다.
작동 방식
중앙값 과거 시각은 GetMedianTimePast라는 함수에서 나옵니다. 이 함수는 11개의 블록 항목을 거슬러 올라가며 각 타임스탬프를 배열에 복사하고, 정렬한 뒤 가운데 원소를 반환합니다.
BIP-113이 정의하는 상수는 nMedianTimeSpan = 11이므로, 답은 항상 11개 수 중 여섯 번째로 작은 값입니다. 결과를 신뢰할 수 있게 만드는 것은 정렬입니다. 한 블록의 타임스탬프는 부모 블록의 타임스탬프보다 이를 수 있지만, 합의 규칙이 이미 모든 새 타임스탬프를 그 앞 11개의 중앙값보다 크게 강제하므로 중앙값은 앞으로만 나아갈 수 있습니다. 따라서 타임스탬프 하나를 왜곡해도 채굴업자가 얻는 것은 거의 없습니다.
BIP-113이 해결한 문제는 버그가 아니라 인센티브였습니다. 옛 규칙에서는 트랜잭션의 유효성이 그 트랜잭션을 포함하는 블록의 타임스탬프, 즉 채굴업자가 적는 수를 기준으로 판정되었습니다. BIP의 동기 섹션은 이것을 "a perverse incentive for miners to lie about the time of their blocks in order to collect more fees"라고 부릅니다. 해결책은 하나의 대체였습니다. 합의 규칙에서 IsFinalTx 호출은 해당 블록 자체의 시각 대신 이전 블록의 GetMedianTimePast를 사용하며, 이 규칙은 코인베이스 트랜잭션을 포함한 모든 트랜잭션에 적용됩니다.
이것은 비트 0에 대한 BIP9 버전비트 소프트 포크로 배포되었습니다. 메인넷 시그널링은 2016년 5월 1일 자정 UTC에 시작되어 1년 뒤에 만료되었으며, 세 가지 잠금 시간 규칙이 하나의 묶음으로 도착하도록 BIP68 및 BIP112와 함께 배포되었습니다.
확인할 수 있는 곳
중앙값 과거 시각은 Bitcoin Core의 RPC 출력에서 mediantime이라는 필드로 나타나며, 원시 time 필드 바로 옆에 위치합니다.
getblock은 어떤 블록에 대해서도 두 값을 모두 반환하고, getblockchaininfo는 체인 끝의 타임스탬프 옆에 체인 끝의 중앙값 시각을 보고합니다. 실행 중인 노드에서 1시간의 지연을 확인하는 가장 빠른 방법입니다. getchaintxstats는 더 나아가 창의 범위를 두 블록의 헤더 시각이 아니라 두 블록의 중앙값 시각의 차이로 측정하므로, 양 끝 중 한 곳의 타임스탬프가 왜곡되어도 결과는 거의 움직이지 않습니다.
문제가 실제로 드러나는 곳은 멤풀입니다. Bitcoin Core의 CheckFinalTxAtTip은 후보 트랜잭션을 현재 체인 끝의 중앙값 과거 시각과 그보다 높이가 하나 높은 값으로 평가하므로, 기한이 지나는 순간에 트랜잭션을 브로드캐스트하는 지갑은 중계 대신 거부를 받게 되고, 중앙값이 실제 시계를 따라잡을 때까지 계속 재시도해야 합니다.
상대 잠금 시간은 양 끝에서 같은 시계를 물려받습니다. BIP-68은 512초 단위로 계산되는 시간 기반 시퀀스 잠금을, 코인을 채굴한 블록의 이전 블록의 중앙값 과거 시각부터 지출 블록의 이전 블록의 중앙값 과거 시각까지로 측정하므로, 지연이 두 번 나타나 대부분 상쇄됩니다.
중앙값 과거 시각 vs 블록 헤더 타임스탬프
중앙값 과거 시각은 11개의 헤더 타임스탬프로부터 계산되지만 어떤 블록에도 저장되지 않는 반면, 헤더 타임스탬프는 채굴업자가 적는 필드이며 모든 노드가 영구히 보관합니다.
비트코인은 두 가지를 서로 다른 작업에 사용합니다. 잠금 시간은 중앙값을 사용하는데, 이는 단조롭게 나아가며 수수료 수입을 위해 앞으로 끌어당길 수 없기 때문입니다. 난이도 재조정은 여전히 원시 헤더 시각을 읽습니다: Bitcoin Core는 14일 창의 마지막 블록 시각에서 첫 블록 시각을 빼고, 그 차이로 목표값을 다시 조정합니다. 하나의 체인에 두 개의 시계가 있는 것은 정돈되지 않아 보이지만 의도된 것입니다. 재조정에는 2주 분량의 블록에 걸친 정직한 경과 시간이 필요하고, 잠금 시간에는 어떤 단일 채굴업자도 움직일 수 없는 수가 필요합니다.