PPLNS 中的“N”是如何選擇的?2xDiff 似乎沒有任何意義 - 或者 - 為什麼 Scrypt 共享困難減少了 65536 倍?
雖然我在以下問題中的範例是使用山寨幣“Bitconnect”,但我相信這實際上是一個適合這裡的一般問題 - 如果不是,請告訴我。
我正在努力理解 PPLNS(我需要在池中實現它)。我一般都知道這個系統是如何工作的,但對我來說一個謎是 N 來自哪裡。
我在網際網路上的許多地方讀到 N = 2 * 難度是一個很好的價值,這意味著平均而言,礦工將從兩個區塊中獲得相同份額的獎勵。
但是,它根本不適合我。
實際範例:BitConnect 池。假設 BitConnect 目前的難度約為 900,000。
一個 AntMiner L3+ 每 15 秒送出一個難度約為 150,000 的份額(當時算作份額價值 150,000),因此在 3 分鐘內,一個 AntMiner 已經填滿了 900,000x2=1,800,000 的整個“N”。反過來,這意味著我希望平均每 90 秒用一個 AntMiner 探勘一個 BitConnect 塊,這當然不是真的。
在我們礦池上執行的 100 名螞蟻礦工在最後 5 分鐘內的股票價值為 230,000,000,這已經是整個“N”的 100 倍以上!
所以這裡不可能有東西,我不明白是什麼。我不應該將送出的份額與工作難度相乘嗎?但是,一個小礦工將獲得與一個大礦工相同的獎勵,這是沒有意義的。或者整個網際網路對“N”的 2*diff 是錯誤的,並且它是基於這樣的假設,即平均股票價值等於找到一個區塊的難度?聽起來不太可能。
平均而言,需要 2^32 個雜湊才能找到難度為 1 的有效份額,對吧?平均而言,在難度 X 中找到一個份額需要 X 個份額,因此,如果礦工強大,為什麼要為礦工增加礦池的難度(然後它會減少送出份額的頻率),對吧…?但是最後一點已經開始變得不那麼有意義了,再加上如果目前的硬幣塊難度為 Y,您需要難度為 Y 的份額才能找到一個塊……並且礦池軟體計算難度為 X 的份額相同正如 X 分享的困難 1. 最後,我很困惑這一切是如何協同工作的,以及我如何得出“N”的值,這實際上導致礦工平均獲得相同份額的兩個獎勵…… !
請幫助我了解問題所在。
編輯:我發現所有計算都與現實相差 2^16。然後我發現了這個:https : //bitcoin.stackexchange.com/a/11816/62320 這表明對於 Scrypt,礦池使用按比例縮放的“共享難度”值正是該因素,但報告的塊難度不會被縮放. 這可以解釋一切,但這是我在網際網路上找到的唯一地方(這意味著我需要根據我正在處理的算法進行不同的計算) - 任何人都可以確認這一點嗎?
我現在自己找到了造成這種混亂的原因:
這非常令人困惑並且需要一段時間才能理解,特別是因為在網際網路上進行研究時不容易獲得這些資訊(為了知道正確的關鍵字而已經知道答案 - 論壇主題也沒有幫助)。
似乎有一些算法,Scrypt 就是其中之一,它使用比例值來表示共享難度。
讓我解釋:
對於比特幣(即 SHA-256),以下適用:
- 雜湊是尋找某個解決方案的“嘗試”
- 平均而言,您需要 2^32(約 40 億)次嘗試才能找到有效的“份額”(最初這是唯一存在的份額類型,難度為 1,但現在,所有礦池都使用難度高於1,見下文)
- 如果硬幣難度為 1,這將是一個有效的塊
- 假設硬幣難度高於 1,假設 N,平均只有 N 個這樣的“有效份額”(難度為 1)中只有 1 個可以為您提供有效區塊
- 回顧:對於硬幣難度 N,您平均需要 N*2^32 雜湊來找到一個塊
- 因此,要知道平均需要多少秒才能找到具有一定算力的塊的公式是“平均時間 = 難度 * 2^32 / 算力”
- 就礦池而言,礦池只接受難度 >N 的份額,難度為 N 的 1 份額與難度為 1 的 N 份額(或難度為 2*N 的 N/2 份額等)的計算方式相同 - 這就是泳池難度
- 這也意味著,在 PPLNS 中,N=2*coindiff 與大多數礦池一樣,平均而言,“PPLNS”中的最後“N”個份額覆蓋 2 個區塊
好的,所以我嘗試將此資訊應用於 Scrypt,因為在研究萊特幣難度之類的東西時,我發現的公式是相同的,例如“平均時間 = 難度 * 2^32 / 雜湊率”,平均而言你需要 2^ 32 個雜湊來找到一個難度份額,等等。
然而,這沒有任何意義,一切都與我在我們的礦池中看到的相去甚遠。
事實上,事實證明它的偏離值可能接近 2^16。
進一步的研究和測試最終給了我們答案,對於 Scrypt,按照慣例,礦池和礦工將共享難度值縮放 2^16 倍。
但只有礦池和礦工軟體(例如 cgminer)!網路難度仍然顯示,沒有縮放!
例子:
假設 BCC (Bitconnect Coin) 的網路難度為 900,000
在最初的計算中,我假設以 50 GH/s 的雜湊率平均需要 21 小時才能找到一個塊(900k * 2^32 / 50G = ~77k 秒 = ~21 小時),這大約是正確的時間看著我們的游泳池。
然而,我也會假設它需要大約 900,000 股的總價值(確切地說是網路難度),但這不是真的,因為僅一個 AntMiner L3+ 就已經每 15 秒送出了 ~150,000 股的份額,所以我會假設它每 90 秒找到一個塊,這當然不是真的(它更接近 90 天而不是 90 秒)。
這就是問題所在:對於 Scrypt,共享難度是用一個乘以 65,536 的值來衡量的!
所以,事實上,礦池與螞蟻礦機一起使用的“難度 150,000”實際上是150,000/65,536 = 2.29
而且,這意味著為了達到 900,000 的硬幣難度值,礦池需要顯示 900,000*65,536 = 58,982,400,000 的總股票價值!
然後,一切突然又變得有意義了。
還有其他算法使用這種比例因子。事實上,我發現 UNOMP 池軟體已經有一個文件,其中也包含這些值:https ://github.com/UNOMP/node-merged-pool/blob/master/lib/algoProperties.js (查找
multiplier
)。對於 SHA-256,它是 1,對於 Scrypt,它是 2^16。根據散佈在網際網路上的一些資訊,這樣做是因為 Scrypt 本身是一個更困難的算法,這導致礦池接受難度小於 1 的份額,並避免難度和份額值可能突然被非整數,整數被縮放,所以單位“難度 1”現在實際上意味著 2^(-16)。
所以,經驗法則:
- 每當您在礦工或Scrypt礦****池的上下文中看到難度值時,如果您想將其與其他數字(例如整體硬幣難度)進行比較,則需要將其除以 65,536 。
- 對於硬幣/區塊難度值(即使在 Scrypt 中),通常對於 SHA-256 或 X11,不要劃分它。對於其他算法,請查閱(例如,Blake 使用 2^8)。
一個 AntMiner L3+ 每 15 秒送出一個難度約為 150,000 的份額(當時算作份額價值 150,000),因此在 3 分鐘內,一個 AntMiner 已經填滿了 900,000x2=1,800,000 的整個“N”。反過來,這意味著我希望平均每 90 秒用一個 AntMiner 探勘一個 BitConnect 塊,這當然不是真的。
我不認為股票是這樣計算的。根據這個 Bitcointalk 文章,
送出共享時,為其分配 1/D 的分數,其中 D 是送出共享時的難度。
因此,在您的場景中,當您的 AntMiner L3+ 送出一個份額時,該份額被分配了 1/900000 的分數,因此它的“份額值”是 2,而不是 150000。