Go-Ethereum
如何讓礦工只有在有待處理交易時才能挖礦?
到目前為止,在我的系統上執行的 geth 礦工甚至可以探勘空塊。我想要的只是礦工只有在有交易時才應該開採,開採後礦工應該立即睡覺。
如何做到這一點?
您可以將此腳本載入到您的 geth 控制台
僅在有交易時才開採!
var mining_threads = 1 function checkWork() { if (eth.getBlock("pending").transactions.length > 0) { if (eth.mining) return; console.log("== Pending transactions! Mining..."); miner.start(mining_threads); } else { miner.stop(); console.log("== No transactions! Mining stopped."); } } eth.filter("latest", function(err, block) { checkWork(); }); eth.filter("pending", function(err, block) { checkWork(); }); checkWork();
在此處查看其他有用的片段
挖礦直到獲得 x 次確認
這個問題與私有鏈特別相關,因為私有鏈的交易可能比公共鏈更零星。在某些應用程序中,在最近的交易之後繼續探勘一定數量的區塊可能是有益的,以確保在探勘停止之前達到足夠的確認,並避免最近的交易只收到一個確認(例如,當在私有網路上使用霧時,它希望看到12 次確認):
var mining_threads = 1 var txBlock = 0 function checkWork() { if (eth.getBlock("pending").transactions.length > 0) { txBlock = eth.getBlock("pending").number if (eth.mining) return; console.log(" Transactions pending. Mining..."); miner.start(mining_threads) while (eth.getBlock("latest").number < txBlock + 12) { if (eth.getBlock("pending").transactions.length > 0) txBlock = eth.getBlock("pending").number; } console.log(" 12 confirmations achieved; mining stopped."); miner.stop() } else { miner.stop() } } eth.filter("latest", function(err, block) { checkWork(); }); eth.filter("pending", function(err, block) { checkWork(); }); checkWork();
這也可以保存為 .js 腳本,並在啟動 geth 時使用 –preload 函式預載入:
geth --preload "/path/to/mineWhenNeeded.js"