鍍金池/ 教程/ Linux/ 如何使用CPU挖礦?
創(chuàng)建安全多簽名錢包及高級設(shè)置
以太坊發(fā)展歷史回顧
如何使用CPU挖礦?
導(dǎo)入預(yù)售錢包,更新、備份、恢復(fù)賬號
錢包、以太幣、Gas介紹
公有鏈、聯(lián)盟鏈、私有鏈及網(wǎng)絡(luò)配置介紹
以太坊客戶端的選擇與安裝
以太坊社區(qū)、基金會、貢獻(xiàn)者介紹
以太坊賬戶管理
什么是挖礦和Ethash算法?
如何使用Homestead文檔及以太坊路線圖
如何使用GPU和礦池挖礦?
以太坊是什么?
Web 3:去中心化應(yīng)用平臺
什么是以太幣?如何獲?。?/span>
以太坊Go、Java、Python、Ruby、JS客戶端介紹
搭建測試網(wǎng)絡(luò)和私有鏈
以太坊C++客戶端的安裝與定制(一)

如何使用CPU挖礦?

文章出于:http://wangxiaoming.com/blog/2016/07/15/e19/

CPU挖掘

你可以用電腦的中央處理器(CPU)挖以太幣。自從GPU礦工的效率高出兩個數(shù)量級,它就不再盈利了。然而你可以用CPU挖掘在Morden測試網(wǎng)或私有鏈上挖礦,以便創(chuàng)建你測試合約和交易所需要的以太幣, 而無需花費(fèi)實(shí)時網(wǎng)絡(luò)上的真實(shí)以太幣。

注意:測試網(wǎng)以太幣除了用于測試目的外沒有其他價值(查看測試網(wǎng)絡(luò))。

使用geth

用geth啟動以太坊節(jié)點(diǎn)時,并不是默認(rèn)挖掘。在CPU挖掘模式開啟,你會用—mine命令行選項(xiàng)。-minerthreads參數(shù)可以用于設(shè)置平行于挖掘線程的數(shù)量(默認(rèn)為處理器核心的總數(shù))。

geth --mine --minerthreads=4

你也可以在執(zhí)行期間用控制臺開啟或停止CPU挖掘。miner.start取一個礦工線程數(shù)量的可選參數(shù)。

> miner.start(8)
true
> miner.stop()
true

注意挖掘真實(shí)以太幣只有在你與網(wǎng)絡(luò)同步時才有意義(由于你是在共識區(qū)塊頂部挖礦)。因此以太區(qū)塊鏈下載器/同步器會延遲挖掘直到同步完成,此后挖掘自動開始,除非你用miner.stop()取消挖礦。

為了賺取以太幣,你必須有etherbase(或coinbase)地址集。這個etherbase默認(rèn)為你的第一個賬戶。如果你沒有etherbase地址,geth –mine就不會開啟。

你可以在命令行重新設(shè)置etherbase:

geth --etherbase 1 --mine 2>> geth.log // 1 is index: second account by creation order OR
geth --etherbase '0xa4d8e9cae4d04b093aac82e6cd355b6b963fb7ff' --mine 2>> geth.log

你也可以在控制臺重新設(shè)置etherbase:

miner.setEtherbase(eth.accounts[2])

注意你的etherbase不必是本地賬戶地址,只要是現(xiàn)存的就可以。

有一個給你挖掘過的區(qū)塊添加額外數(shù)據(jù)的選項(xiàng)(只有32字節(jié))。按照慣例,它被解釋為統(tǒng)一碼字符串,你可以設(shè)置短期虛榮標(biāo)簽。

miner.setExtra("ΞTHΞSPHΞΞ")
...
debug.printBlock(131805)
BLOCK(be465b020fdbedc4063756f0912b5a89bbb4735bd1d1df84363e05ade0195cb1): Size: 531.00 B TD: 643485290485 {
NoNonce: ee48752c3a0bfe3d85339451a5f3f411c21c8170353e450985e1faab0a9ac4cc
Header:
[
...
  Coinbase: a4d8e9cae4d04b093aac82e6cd355b6b963fb7ff
  Number: 131805
  Extra: ΞTHΞSPHΞΞ
...
}

你可以用miner.hashrate檢查散表率,結(jié)果用H/s表示(每秒散表操作)。

> miner.hashrate
712000

成功挖掘一些區(qū)塊以后,你可以檢查etherbase賬戶中的以太幣余額?,F(xiàn)在假定你的etherbase是個本地賬戶:

> eth.getBalance(eth.coinbase).toNumber();
'34698870000000'

為了花費(fèi)你賺的gas來交易,你需要解鎖賬戶。

> personal.unlockAccount(eth.coinbase)
Password
true

你可以在控制臺上用以下代碼片段,檢查哪個區(qū)塊被特殊的礦工(地址)挖掘過:

function minedBlocks(lastn, addr) {
  addrs = [];
  if (!addr) {
    addr = eth.coinbase
  }
  limit = eth.blockNumber - lastn
  for (i = eth.blockNumber; i >= limit; i--) {
    if (eth.getBlock(i).miner == addr) {
    addrs.push(i)
    }
  }
  return addrs
}
// scans the last 1000 blocks and returns the blocknumbers of blocks mined by your coinbase
// (more precisely blocks the mining reward for which is sent to your coinbase).
minedBlocks(1000, eth.coinbase);
//[352708, 352655, 352559]

請注意,發(fā)現(xiàn)一個區(qū)塊但是不能把它變成典型鏈會經(jīng)常發(fā)生。這意味著你在當(dāng)?shù)匕淹谶^的區(qū)塊包括在內(nèi),當(dāng)前的狀態(tài)會顯示歸于你賬戶的挖礦獎勵,然而不久后,會發(fā)現(xiàn)更好的鏈,我們轉(zhuǎn)換到不包含你區(qū)塊的鏈,因而不會記入任何挖礦獎勵。因此很有可能礦工監(jiān)控coinbase余額的時候會發(fā)現(xiàn),它發(fā)生了相當(dāng)程度的浮動。