블록타임 10분인 경우 누적분포도
위 그림에서 블록타임이 10분인데 10분까지 확률이 65~70%정도이다. 위 그림에서 곡선의 기울기가 분포확률이다.최빈값이 10분 근처가 아니고 0분~2분인게 특징이다.
int64_t UpdateTime(CBlockHeader *pblock, const Config &config,
const CBlockIndex *pindexPrev) {
int64_t nOldTime = pblock->nTime;
int64_t nNewTime =
std::max(pindexPrev->GetMedianTimePast() + 1, GetAdjustedTime());
if (nOldTime < nNewTime) {
pblock->nTime = nNewTime;
}
....
....
....
return nNewTime - nOldTime;
}
nNewTime == GetAdjustedTime() 타임스템프 조작하지 않는 경우
타임스탬프 입력은 사실상 현 네트웍조정시간(~현시간)이라 보면 된다.
그리고 위와 같이 세팅하고 채굴중간에 타임스템프를 변경하지 않는다고 하자. 그러면 실제로 100번째와 101번째 채굴한 시각에 각각 다음블록 (101번, 102번 블록에) 타임스템프로 입력된다. 즉 101번을 채굴하는데 걸린 시간은 102번타임스탬프 - 101번 타임스탬프이다.
위에서 블록타임 최빈값은 0분~2분이다. 난이도가 매 블록마다 바뀌더라도 이 난이도는 평균값 블록타임10분이 되도록 하는 역할이다. 블록타임 최빈값이 목표블록타임(10분)이 되도록 하려면 기존 난이도 함수에 약간의 변형이 필요하다. 블록이 자주 발견되면 기존 난이도 함수에 추가로 난이도를 상승시키고, 긴 시간동안 블록이 발견되지 않으면 추가로 난이도를 하락시킨다.
현재 이 방법을 블록채굴에 적용한 케이스는 없으나, 한 코인에서 시도중이다. 본 블로그의 수개월 전 내용을 찾아보면 그 힌트가 있다.
https://steemit.com/cdy/@bluejaytodd/bitcoin-candy-cdy-block-time
https://steemit.com/cdy/@bluejaytodd/u4srv
https://steemit.com/cdy/@bluejaytodd/05-24