누구나 난이도가 계산되는 방법을 평이한 영어로 설명해 줄 수 있습니까? 특정 기간 동안 모든 비트 코인 커뮤니티의 해시 파워 양을 기준으로 계산된다는 것을 매우 대략적으로 이해하고 있습니다. 그러나 이것은 매우 모호합니다.
또한 매우 빠르게 변할 수 있음을 이해합니다. 증가 만 할 수 있습니까? 계산하거나 예측하는 공식이 있습니까?
자세한 답변을 주셔서 감사합니다. Meni Rosenfeld. 내가 모든 것을 제대로했는지 확인하기 위해서. 나는 항상 요약하고 있으며, 마지막 2016 블록을 생성하는 데 걸렸습니다. 그런 다음 공식을 적용하십시오.
댓글
- 답변에 대한 댓글로서 후속 질문이 더 낫다고 생각합니다. 기본적으로 예,하지만 실제로 합산 할 필요는 없습니다. 마지막 블록과 이전 2016 블록의 타임 스탬프를 취하고 빼면됩니다.
답변
비트 코인 난이도 는 1부터 시작했습니다 (이보다 낮을 수 없음). 그런 다음 발견 된 모든 2016 블록에 대해 블록의 타임 스탬프를 비교하여 2016 블록을 찾는 데 걸린 시간을 알아보고 T라고합니다. 2016 블록에 2 주가 걸리기를 원하므로 T가 다른 경우 곱합니다. (2 주 / T)까지 난이도-이렇게 해시 레이트가 예전처럼 계속되면 2016 블록을 찾는 데 2 주가 걸립니다.
예를 들어 10 일밖에 걸리지 않았다면 난이도가 너무 낮아서 40 % 증가한다는 뜻입니다.
2016 블록을 찾는 데 2 주 미만이 걸 렸는지 또는 그 이상 걸 렸는지에 따라 난이도가 증가하거나 감소 할 수 있습니다. 일반적으로 네트워크 해시 레이트가 떨어지면 난이도가 감소합니다.
수정 계수가 4보다 크거나 1/4보다 작 으면 변경을 방지하기 위해 대신 4 또는 1/4이 사용됩니다. 너무 갑작 스럽습니다.
구현에 버그가 있습니다. 계산은 2016 년이 아닌 마지막 2015 년 블록을 찾는 시간을 기반으로합니다.이를 수정하려면 하드 포크가 필요하므로 지금은 연기되었습니다.
최근 블록을 찾는 시간을 기준으로 다음 난이도 변경에 대한 대략적인 추정치를 제공 할 수 있습니다. 누구도 미래의 어려움에 대한 장기적인 예측을 안정적으로 할 수는 없지만 누구든지 환율 추세, 무어의 법칙 및 기타 하드웨어 발전을 기반으로 자유롭게 추측 할 수 있습니다.
댓글
- @StevenRoose : AFAIK입니다.하지만 핵심 코드에 더 관여하는 사람들에게 의견을 남기겠습니다 … 이것은 별도의 SE 질문에 적합합니다.
- 좋은 대답이지만 작지만 자본 포인트 하나는 알 수 없습니다. 네트워크의 노드가 난이도에 어떻게 동의합니까?
- @deadalnix : 블록의 난이도는 데이터를 기반으로 한 결정 론적 계산입니다. 모든 노드는 독립적으로 동일한 계산을 수행하고 동일한 결과를 얻습니다.
- @deadalnix : 타임 스탬프는 블록의 일부입니다. 즉, 블록을 찾은 사람이 무엇을 넣을 것인지 결정합니다. . 타임 스탬프는 지난 11 개 블록의 중앙값보다 빠르지 않아야합니다. 또한 노드가 향후 2 시간 이상의 타임 스탬프가있는 블록을 수신하면 다시 퍼 뜨리지 말고 전파하지 마세요.
- @tobi : 오, 알았어요. 이전 댓글은 버그에 대한 것이 었으며 " 오류 "는 '가 버그로 인해 ' 이에 대해 이야기하고 있다고 가정했습니다. 네. 약 2140 년에 해시 레이트가 현재의 약 * 1B가 될 것이라고 가정하면 일정은 96 주 또는 거의 2 년 앞당겨 질 것입니다. 그러나 또 다른 효과가 있습니다. 초기에는 해시 레이트가 정당화하기에 충분하지 않았음에도 난이도가 1 이었기 때문에 지연이 발생합니다. '
답변
남성의 대답은 좋습니다. 난이도 계산에 대한 실제적인 세부 방법을 제공하고 싶습니다. 이 질문의 답변보기.
Satoshi의 제네시스 블록 헤더 (관련 정보의 일부)를 살펴 보겠습니다.
$ bitcoin-cli getblockhash 0 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f $ bitcoin-cli getblockheader 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f { ... "height": 0, ... "bits": "1d00ffff", "difficulty": 1, ... }
위에서 볼 수 있듯이 제네시스 블록에는 “1”난이도와 “1d00ffff”비트가 있습니다. 비트 코인 비트 는 “대상”해시 값을 의미하며 새로 생성 된 블록은 조건을 충족해야합니다. 블록 헤더의 이중 SHA-256 해시 값은이 값보다 작아야합니다. “target”값.
제네시스 블록의 “1d00ffff”비트 값은 “target”값을 의미합니다.
[0x00000000,0xffff,{0x00..0x00}] {0x00..0x00} at above has 26 bytes 0x00.
그런 다음 새 블록을 찾으면 블록 해시 값이 4 바이트 0 앞에 올 때까지 32 비트 nNonce 값 (및 nTimes 및 hashMerkleRoot도)을 검색해야합니다.그런데 nNonce는 블록 헤더 구조의 필드 중 하나입니다.
struct header_structure{ // BYTES NAME uint32_t nVersion; // 4 version uint8_t hashPrevBlock[32]; // 32 previous block header hash uint8_t hashMerkleRoot[32]; // 32 merkle root hash uint32_t nTime; // 4 time uint32_t nBits; // 4 target uint32_t nNonce; // 4 nonce };
SHA-256 알고리즘 (및 모든 암호화 보안 해시 알고리즘) 때문입니다. 일관된 무작위 시퀀스 처럼 나타나는 출력을 생성합니다. 실용적인 “시행 및 오류”방법은 조건을 충족하는 새 블록을 찾는 유일한 방법입니다. 선행 해시 값이 4 바이트 인 블록을 찾을 확률은 1 / (2 ^ 32)이며, 이는 평균 “시행 및 오류”숫자가 정확히 2 ^ 32 (예 : 4G)임을 의미합니다.
이 “대상”해시 값에 대해 사람이 쉽게 이해할 수 있도록 “대상”조건을 충족하는 블록을 찾기위한 평균 “시행 및 오류”수를 의미하는 “난이도”라는 용어를 정의합니다. 그리고 우리는 “난이도”단위를 정의합니다. 1 “난이도”= 4G 해시
그런 다음 오늘까지 비트 코인 블록 체인 높이가 501509에 도달했습니다. 헤더를 살펴 보겠습니다.
$ bitcoin-cli getblockheader 0000000000000000006c5532f4fd9ee03e07f94df165c556b89c495e97680147 { ... "height": 501509, ... "bits": "18009645", "difficulty": 1873105475221.611, ... }
블록 501509 “의 비트 = 0x18009645, 256 비트 정수의 압축 형식, 256 비트 형식 :
[0x00000000,0x00000000,0x009645,{0x00..0x00}] {0x00..0x00} at above has 21 bytes 0x00. that is 0x009645 * (256 ^ 21) The genesis block"s target is ( 0x00ffff * 256 ^ 26 )which is the difficulty unit "1.0". So, the difficulty = (0x00ffff * 256 ^ 26)/ (0x009645 * 256 ^ 21) = 65535/38469 * (256^5) = 1.703579505575918 * 2^40 = 1873105475221.611
지금까지”난이도 “를 계산하는 방법에 대한 모든 세부 정보를 얻었습니다. 경우에 따라 간단한 형식 1.7T도 사용합니다. 위의 예에서 난이도를 말합니다.
(1.703579505575918 * 2^40) = 1.703579505575918T 1T = 2^40 = 1024^4
댓글
- 1d는 12 월 29 일 (26이 아님)입니다. SHS는 SHA입니다.
- @BorisIvanov에게 감사합니다. 오타 오류
SHS
가 수정되었습니다.1d
는 실제로 29가 아닌 26 바이트 제로 테일을 의미합니다. 위에 표시된 예제 세부 정보를 읽어보세요. - 아, 예. Significand
답변
2를주고 싶습니다. 여기에서 현재 목표 t
와 계산 된 해당 난이도 d
가 주어진 블록을 채굴 할 확률 간의 관계를 명시하여 센트 비트 코인 코어에서.
암호 해시 함수는 임의의 오라클 추상화에 의해 이상화됩니다. [ https://en.wikipedia.org/wiki/Random_oracle] . 따라서 작업 증명에서 사용되는 doubleSHA256
해시 함수의 출력을 {0,1}^256
공간, 즉 256 비트 배열의 균일 변수로 모델링 할 수 있습니다. . 따라서 단일 해시 h
가 유효한 해시가 될 확률은 다음과 같습니다.
p = P(h < t) = t /( 2^{256} - 1 )
반면에 d
는 @gary가 이전에 10 진수로만 변환 한 것처럼 다음과 같이 계산됩니다.
d = ( (2^{16} - 1) * 2^{8*26} ) / t = ( (2^{16} -1) * 2^{208} ) / t
구현은 [ https://github.com/bitcoin/bitcoin/blob/master/src/rpc/blockchain.cpp] , 60 행, 함수 GetDifficulty
. 실제로 누군가 코드가 위의 공식에 정확히 어떻게 매핑되는지 설명 할 수 있다면 도움이 될 것입니다. 이 두 가지 공식을 결합하면 다음과 같은 결과를 얻을 수 있습니다.
d = ( (2^{16} -1) * 2^{208} ) / ( p * (2^{256} - 1) ) ~ 2^{-32} / p
이 마지막 표현식을 분석 할 때 난이도는 (32 개의 0 비트로 시작하는 256 비트를 사용하는 이진 표현이있는 가장 낮은 10 진수) 및 현재 대상을 기반으로 유효한 해시를 얻을 확률 t
. 이것은 제네시스 블록에서 16 진수 대상 iv id와 연관된 난이도 1 을 정의하는 직접적인 의미입니다. = “eff062a0d5″>
0x1d00ffff , 256 비트 숫자에 대한 32 비트 압축 형식이라고 생각하는 형식으로 표현됩니다.
A 좋은 질문은 왜이 특정 압축 양식이 대상을 나타내는 데 선택되었는지에 대한 것입니다.
댓글
- 추천했습니다! 압축 형식은 대상에 대해 최상위 3 바이트를 제공하며 최소 난이도에서 최상위 3 바이트는 00ffff입니다.