Extranonce는 보통 coinbase 거래 입력에 넣는 가변 데이터다. 이를 바꾸면 Merkle root와 헤더 해싱의 새 입력을 만들 수 있으며 헤더의 32비트 nonce 필드 자체는 늘어나지 않는다.
nonce 필드는 32비트이며 나머지가 같은 헤더에 2^32개의 값을 제공한다. Extranonce는 이 필드를 연장하지 않는다. 다른 데이터를 바꾸어 새 헤더를 구성하고 nonce 값을 다시 시도하게 한다. [Bitcoin Developer Guide — Mining and nonce space]
coinbase의 extranonce를 바꾸면 직렬화 내용과 TXID가 바뀌고 해당 Merkle 트리 가지와 헤더의 Merkle root를 다시 계산한다. 다른 거래를 바꿀 필요는 없다. 하지만 이전 루트를 재계산 없이 그대로 둘 수는 없다. [Bitcoin Developer Guide — Mining and nonce space]
완전히 자유로운 두 바이트는 2^16개의 변형을 허용한다. 32비트 nonce와 그 밖의 고정 데이터를 둔 모델에서는 2^48개의 입력 조합이다. 이는 서로 다른 시도의 공간이며 발견한 블록 수나 전부 탐색한 뒤의 성공 보장이 아니다. [Bitcoin Developer Guide — Mining and nonce space]
BIP 34는 coinbase scriptSig 앞부분에 올바르게 인코딩한 블록 높이를 요구한다. 100바이트 제한은 extranonce뿐 아니라 전체 scriptSig에 적용된다. 가변 영역이 높이를 덮어쓰거나 거래 형식을 위반해서는 안 된다. [BIP 34 — Height in coinbase] [Bitcoin Developer Reference — Coinbase input]
Stratum V2는 extended extranonce를 고정 upstream 접두사, 로컬 예약 부분, downstream 공간으로 나눈다. 이는 불필요한 중복 검색을 막는다. 배정된 extranonce_prefix가 자동으로 말단 채굴자가 자유롭게 바꿀 수 있는 영역이 되는 것은 아니다. [Stratum V2 — Extended extranonce and jobs]
SubmitSharesExtended에서는 coinbase_tx_prefix, extranonce_prefix, extranonce, coinbase_tx_suffix 순서로 coinbase를 구성한다. 제출하는 extranonce 바이트는 협의한 길이여야 한다. 같은 숫자라도 더 짧은 바이트열로 인코딩하면 같은 거래가 되지 않을 수 있다. [Stratum V2 — Extended extranonce and jobs]
Stratum V2의 Standard Job은 고정 Merkle root를 사용하며 version, nonce, nTime의 허용된 부분만 바뀐다. 따라서 표준 장치는 extended 채널처럼 스스로 extranonce를 제출하지 않는다. 상위 노드가 새 작업을 준비할 때 coinbase 변경을 처리할 수 있다. [Stratum V2 — Extended extranonce and jobs]
Stratum V2의 SetExtranoncePrefix는 해당 채널에서 그 메시지 이후 전송된 작업에 적용된다. 결과는 올바른 job_id 및 할당 공간과 계속 연결되어야 한다. 최신 접두사로 과거 결과가 나온 작업의 기록을 대신할 수 없다. [Stratum V2 — Extended extranonce and jobs]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Nonce, Merkle tree, Mining Share, Block Template. 다음 항목에서도 이 글을 참조합니다 ASIC Miner, Block Template, getblocktemplate.