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

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

「礦池的難度」是指 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

1個讚

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

1個讚

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

是這樣子的:

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

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

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

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

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

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

1個讚

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

1個讚