礦池的難度(pool-specific difficulty)為何要調整?


#1

礦池的難度為何要調整? 如果是為了評估礦工們的算力, 是否應該直接評估礦工丟出的nonce比較接近真實狀況?


請問 Merkle root hash 需要偶數個訊息嗎?
#2

「礦池的難度」是指 pool-specific difficulty,它決定多頻繁將 shares 送給礦池。

這個參數左右礦工要多頻繁地將某難度的解題結果回送。回送越頻,頻寬需求越大;而回送越不頻,估算礦工的算力越不穩定(但時間一拉長其實就没差啦!)。

礦池收到礦工送來的 share 和它的難度值,就可以根據難度和share估算出該礦工的算力,然後以算力分配各礦工群挖挖到的礦。

礦池評估礦工的算力多少好像和 nonce 没有關係。

參考:

What is “difficulty”?

Difficulty is a measure of how difficult it is to find a hash below a given target.

The Bitcoin network has a global block difficulty. Valid blocks must have a hash below this target. Mining pools also have a pool-specific share difficulty setting a lower limit for shares.

https://en.bitcoin.it/wiki/Difficulty


礦池難度意義
#3

@CGY, 為何您提到 nonce ?你覺得如何用 nonce 評估礦工的算力?


#4

謝謝大大回覆 ^^
我是新手, 之所以會認為用nonce評估礦工的算力是因為我個人的淺見, 如下:
如果礦池將難度變簡單, 讓礦工較容易產生 block header, 回傳share給礦池, 那麼可能會出現一種不公平: 假設某礦池有10個礦工, 在某一輪的挖礦時, 只有3個礦工提交share給礦池, 其他7個礦工算力也不差, 但可惜沒有達到礦池的難度, 導致沒有share可提交, 這種情況好像是不公平的.
所以我才會天真的想說, 是否可以用 每個礦工丟出的nonce值, 回給礦池做為算力的依據呢?
後來我在想, 也許是因為大大剛剛提供的參考資料: 裡面提到, 如果礦工可以將大量的nonce回傳給礦池, 勢必造成網路阻塞, 反而更不容易評估礦工的算力, 是這樣嗎?
再次感謝大大熱心的回覆, 有這個論壇真好!


#6

是這樣子的:

礦工用“對”的 ”nonce“ 代入 hash 函數出來的是 “share”,符合難度條件(小於某個值)的 “share” 才能 回報(丢)回礦池被接受做為礦工有算力的證明。

回傳符合礦池難度條件的 “share” 越多,該礦工算力越多。所以 “share” 是礦池用來分配礦金的計算單位,好像你可以把他想像成股份(share)。

礦工要猜好多、好多、好多次才能找到”對“的 nonce,nonce 對不對要代入函數算過之後才知道,才能找到符合礦池難度的 ”share“ 回傳給礦池。

隨機猜 nonce 大家都會一點都不費算力,代入 hash 函數計算出猜用的 nonce 是否是對的要花費算力的。

如果礦池將接受share的難度設成太簡單,礦工在每十分鐘找到符合回傳條件的 share 回傳就會比較多,算力多的礦工回傳的更多。這樣子頻寬要用比較多,怕會塞車。

如果難度設的高,算力小的礦工時間久了,終究還是會找到可以符合回傳條件的 share 的。


#7

謝謝大大, 我瞭解了!
原來算力的評估並非我原先想的 “是提供nonce的多寡” 來決定, 而是以 “帶入 hash 函數計算出用猜的nonce是否是對的” 來評定; 外加礦池的難度設定也不能太簡單, 因為會有網路塞車問題! 再次感謝喔! ^^