• (转)以太坊私链的挖矿速度与难度值的关系


    之前呢都是用很小的难度值,让挖矿速度很快,可以轻松的打包交易并且获得以太币,但是这样的话也会让机器的内存很卡,而且涉及到具体的项目应用时是不想让他这么快的,所以我们来测试一下难度值跟挖矿速度的关系:

    首先在自己创建的镜像里面跑一个容器node2:

    docker run -it --name node2 daocloud.io/ubuntu/node

    创建目录,并写好创世块

    mkdir test && cd test
    vim genesis.json
    {
       "config": {
            "chainId": 12345,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
        "coinbase" : "0x0000000000000000000000000000000000000000",
        "difficulty" : "0x77fff88",
        "extraData" : "0x123456",
        "gasLimit" : "0xffffffff",
        "nonce" : "0x0000000000000042",
        "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
        "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
        "timestamp" : "0x00",
        "alloc": { }
    }

    初始化创始块

    geth --datadir ./data/01 init genesis.json

    PS:chainId不为0,否则出现insufficient funds for gas * price + value

    解释一下各个参数的作用:

    mixhash

    与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.

    nonce

    nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。

    difficulty

    设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度

    alloc

    用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。

    coinbase

    矿工的账号,随便填

    timestamp

    设置创世块的时间戳

    parentHash

    上一个区块的hash值,因为是创世块,所以这个值是0

    extraData

    附加信息,随便填,可以填你的个性信息

    gasLimit

    该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。


    进入geth

    geth --identity "haha" --datadir ./data/01 --networkid 12345  --rpcapi "db,eth,net,web3" --port 2221 --rpcport 3331 console

    创建账户,挖矿并记录挖矿的时间和区块的高度

    personal.newAccount("123")
    miner.start()
     miner.stop()

    每次更改创始块只需要把容器停掉然后重新创建就好了。

    docker stop node2 && docker rm node2

    接下来是难度值的更改:

    十六进制 “0x99999” 对应的十进制 629145还是挺快的,半分钟大概30个,就是一秒一个 
    DDDDDDDD 3722304989 挖不到 放大了近四万倍 等了三分钟没挖到 
    176ffe890 6291450000 放大一万倍,五分钟没挖到

    好吧,我放弃了,设置的小一点

    • 5ffffa 6291450 放大十倍 一分钟五个
    • 2ffffd 3145725 五倍 一分钟五到十个之间个

    • bffff4 12582900 二十倍 六分钟挖了八个

    • 3bfffc4 62914500 一百倍 六分钟两个
    • 12bffed4 314572500 五百倍 15分钟没有一个

    • 77fff88 125829000 两百倍 十分钟两个

    四五分钟一个区块是不是差不多了呢? 挖矿速度是可以通过算法自动调整,让速度保持与我们设置的难度值保持相当,但是后面区块的难度值都是跟初始块设置的难度值相关,所以只是由初始块的难度值决定整个链的速度. 
    这个是黄皮书关于难度值设定的算法 
    这里写图片描述

    转自:http://blog.csdn.net/DDFFR/article/details/77095033

  • 相关阅读:
    高精度乘法
    使用BFG清除git仓库中的隐私文件或大文件
    java运行的问题
    eclipse编写的java程序在dos环境下运行的写法
    win32汇编实现阶乘和斐波那契数列
    十个数字不同,实现加减乘。暴力枚举法
    实现一个类模板
    循环队列类模板和函数模板c++实例
    C++析构函数为什么要为虚函数
    1012-Joseph 约瑟夫问题
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/8508218.html
Copyright © 2020-2023  润新知