美文网首页
如何使用CPU挖矿?

如何使用CPU挖矿?

作者: juniway | 来源:发表于2017-08-27 11:50 被阅读236次

    CPU挖掘

    你可以用电脑的中央处理器(CPU)挖以太币。自从GPU矿工的效率高出两个数量级,它就不再盈利了。然而你可以用 CPU 挖掘在 Morden 测试网或私有链上挖矿,以便创建你测试合约和交易所需要的以太币, 而无需花费实时网络上的真实以太币。

    注意:测试网以太币除了用于测试目的外没有其他价值(查看测试网络)。

    使用 geth

    用 geth 启动以太坊节点时,并不是默认挖掘。在 CPU 挖掘模式开启,你会用 --mine 命令行选项。-minerthreads 参数可以用于设置平行于挖掘线程的数量(默认为处理器核心的总数)。

    geth --mine --minerthreads=4
    

    你也可以在执行期间用控制台开启或停止 CPU 挖掘。miner.start 取一个矿工线程数量的可选参数。

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

    注意挖掘真实以太币只有在你与网络同步时才有意义(由于你是在共识区块顶部挖矿)。因此以太区块链下载器/同步器会延迟挖掘直到同步完成,此后挖掘自动开始,除非你用 miner.stop() 取消挖矿。

    为了赚取以太币,你必须有 etherbase(或 coinbase)地址集。这个etherbase 默认为你的第一个账户。如果你没有 etherbase地址,geth -mine 就不会开启。

    你可以在命令行重新设置 etherbase:

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

    你也可以在控制台重新设置 etherbase:

    miner.setEtherbase(eth.accounts[2])
    

    注意你的 etherbase 不必是本地账户地址,只要是现存的就可以。

    有一个给你挖掘过的区块添加额外数据的选项(只有32字节)。按照惯例,它被解释为统一码字符串,你可以设置短期虚荣标签。

    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 检查散表率,结果用 H/s 表示(每秒散表操作)。

    > miner.hashrate
    712000
    

    成功挖掘一些区块以后,你可以检查etherbase账户中的以太币余额。现在假定你的etherbase是个本地账户:

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

    为了花费你赚的gas来交易,你需要解锁账户。

    > personal.unlockAccount(eth.coinbase)
    Password
    true
    

    你可以在控制台上用以下代码片段,检查哪个区块被特殊的矿工(地址)挖掘过:

    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]
    

    请注意,发现一个区块但是不能把它变成典型链会经常发生。这意味着你在当地把挖过的区块包括在内,当前的状态会显示归于你账户的挖矿奖励,然而不久后,会发现更好的链,我们转换到不包含你区块的链,因而不会记入任何挖矿奖励。因此很有可能矿工监控 coinbase 余额的时候会发现,它发生了相当程度的浮动。

    参考来源:
    http://wangxiaoming.com/blog/2016/07/15/e19/

    相关文章

      网友评论

          本文标题:如何使用CPU挖矿?

          本文链接:https://www.haomeiwen.com/subject/jspbdxtx.html