以太坊多节点私有链部署

假设两台电脑A和B

要求:

1、两台电脑要在一个网络中,能ping通

2、两个节点使用相同的创世区块文件

3、禁用ipc;同时使用参数--nodiscover

4、networkid要相同,端口号可以不同

1.4 搭建私有链

1.4.1 创建目录和genesis.json文件

创建私有链根目录./testnet

创建数据存储目录./testnet/data0

创建创世区块配置文件./testnet/genesis.json

1.4.2 初始化操作

cd ./eth_test

geth --datadir data0 init genesis.json

1.4.3 启动私有节点

1.4.4 创建账号

personal.newAccount()

1.4.5 查看账号

eth.accounts

1.4.6 查看账号余额

eth.getBalance(eth.accounts[0])

1.4.7 启动&停止挖矿

启动挖矿:

miner.start(1)

其中 start 的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。

停止挖矿,在 console 中输入:

miner.stop()

挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。

1.4.8 转账

目前,账户 0 已经挖到了 3 个块的奖励,账户 1 的余额还是0:

我们要从账户 0 向账户 1 转账,所以要先解锁账户 0,才能发起交易:

发送交易,账户 0 -> 账户 1:

需要输入密码 123456

此时如果没有挖矿,用 txpool.status 命令可以看到本地交易池中有一个待确认的交易,可以使用 eth.getBlock("pending", true).transactions 查看当前待确认交易。

使用 miner.start() 命令开始挖矿:

miner.start(1);admin.sleepBlocks(1);miner.stop();

新区块挖出后,挖矿结束,查看账户 1 的余额,已经收到了账户 0 的以太币:

web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')

用同样的genesis.json初始化操作

cd ./eth_test

geth --datadir data1 init genesis.json

启动私有节点一,修改 rpcport 和port

可以通过 admin.addPeer() 方法连接到其他节点,两个节点要要指定相同的 chainID。

假设有两个节点:节点一和节点二,chainID 都是 1024,通过下面的步骤就可以从节点二连接到节点一。

首先要知道节点一的 enode 信息,在节点一的 JavaScript console 中执行下面的命令查看 enode 信息:

admin.nodeInfo.enode

" enode://d465bcbd5c34da7f4b8e00cbf9dd18e7e2c38fbd6642b7435f340c7d5168947ff2b822146e1dc1b07e02f7c15d5ca09249a92f1d0caa34587c9b2743172259ee@[::]:30303 "

然后在节点二的 JavaScript console 中执行 admin.addPeer(),就可以连接到节点一:

addPeer() 的参数就是节点一的 enode 信息,注意要把 enode 中的 [::] 替换成节点一的 IP 地址。连接成功后,节点一就会开始同步节点二的区块,同步完成后,任意一个节点开始挖矿,另一个节点会自动同步区块,向任意一个节点发送交易,另一个节点也会收到该笔交易。

通过 admin.peers 可以查看连接到的其他节点信息,通过 net.peerCount 可以查看已连接到的节点数量。

除了上面的方法,也可以在启动节点的时候指定 --bootnodes 选项连接到其他节点。 bootnode 是一个轻量级的引导节点,方便联盟链的搭建 下一节讲 通过 bootnode 自动找到节点

参考:

用什么显卡挖矿性价比高呀?

2017年的显卡市场是这几年中最特别的,在过去几年中没有任何显卡在发布几个月后会涨价100%,RX 580做到了,连同所有3000元以下的显卡以势不可挡的姿态冲破溢价点,这一切都是伴随着比特币价格突破3000美元而发生的。在矿工横扫了2000元级别的RX 580后,低端的RX 560甚至GTX 1050 Ti都有不同程度的价格上涨。但是,价格和Hash算法能力是否成正比呢,最近我们就做了一个测试,收集市面上新一代各个价位的显卡,测试其以太币和比特币的挖矿速度,看看哪张卡的性价比是最高的。

价格堪比黄金的比特币

首先要说明一点的是,挖矿并不是驱动越新速度就越快,驱动的更新只是以修复BUG和提高游戏性能为主,并不能明显的提高挖矿速度,官方推荐驱动也不是最新的。其次,其他配件的性能优劣几乎不会影响到挖矿速度,性价比最高的挖矿平台应该要用最大的资金比例投入到显卡中去,前提是要有足够的稳定性,比如有个足够功率的高转换率电源。

显卡&驱动介绍:

现在NVIDIA和AMD最新一代的显卡分别是GTX 10系和Radeon RX 400&500系,但是我们手头上还有诸如GTX 780&980和R9 380X等上代显卡,为了作对比而加入都评测中去。同时,为了统一步伐,无论是N卡还是A卡,统一采用较新驱动,分别是Geforce Game Ready Dirver 382.33-WHQL和Crimson Relive Edition 17.6.1 Optional,系统是Windows 10 64 bit,使用软件是Guiminer用于测试比特币,Ethminer用于测试以太币,网上关于如何挖矿的文章有很多,在此不再赘述。

测试方法是安装好驱动及相关软件后,矿机启动约一分钟,待挖矿速度平稳后记录相关数值,去除最大及最小值,取其平均值然后精确到小数点后一位,同时记录所有显卡的核心频率。

具体测试显卡和对比结果请看下表:

N卡阵营:GTX 780,GTX 980,GTX 980 Ti,GTX 1050,GTX 1050 Ti,GTX 1060,GTX 1070,GTX1080,GTX 1080 Ti

A卡阵营:R9 380X,R9 Fury,RX 460,RX 470D,RX470,RX 480,RX 560,RX 570,RX 580

要注意的是,一旦开始挖矿, Ethminer软件会比Guiminer更吃显存,如果显卡显存容量小于2GB,测试软件就会报错,所以上图中我们的GTX 1050显卡就由于显存过小而没有成绩。

有一点小编非常不理解的是,在同样的驱动下GTX 1070的Eth挖矿能力居然强过GTX 1080,无论用哪个驱动或者哪张GTX 1070/GTX 1080也会出现这种情况,好在比特币的成绩还是正常的。

这是GTX 1080的以太币成绩

这是GTX 1070的以太币成绩

再来看看我们的主角Radeon RX 580&RX 480和Geforce GTX 1060,由于RX 580&RX 480长期缺货,GTX 1060自然成了前者的备胎,结果不出所料,即使GTX 1060的Hash算法有所加强依然不及RX 580,可谓全面落后。但RX 580和RX 480之间几乎没有任何差别,哪怕RX 580的频率高于RX 480也拉不开差距,小编估计这是因为RX 580只是RX 480的升级版的原因,两者架构一样,也就换个名超个频而已,更何况这频率高不了多少。

不过接下来的RX 570和RX 470就很能说明如果频率差距过大会发生什么这个问题了。在显卡全速运行的时候,RX 570的核心频率是1325MHz,而RX 470的核心频率是1222Mhz,差距超过了100MHz,所以相应的挖矿速度是RX 570要比RX 470快了约9%。

事实上RX 570的挖矿能力也能碾压GTX 1060 6GB,能买到RX 570的话矿工也不会去选择GTX 1060,可是在RX 580,RX 570,RX 480,RX 470,RX 470D(挖矿能力不及GTX 1060,但性价比很高,如果还有货的话)都断货的情况下,在1500元到2000元价位上最佳的矿卡就只有GTX 1060了。矿工们没理由去选择GTX 1050 Ti和RX 560这种千元显卡,因为它们与GTX 1060的差距实在有点大,挖矿速度几乎与价格成正比。

其实现在在A卡普遍缺货的情况下,N卡阵营最好的选择是GTX 1060 3GB版,3GB的显存也足够Ethminer运行,但由于我们手上缺少相关产品而无法得到相关成绩,确实有点遗憾,可我们不难推断出GTX 1060 3GB版的挖矿速度大概在600Mhash/s和16MH/s左右,加上频率的差距会比GTX 1060 6GB慢约11%,但算上价格因素的话,GTX 1060 3GB的性价比是要优于GTX 1060 6GB的。

你没看错,这是一张RX 580的价格

与千元市场不同,这波挖矿潮开始对高端显卡有很大影响,在测试结果图中RX 580和RX 480已经快摸到GTX 1070的屁股,更何况现在RX 580的价格甚至和GTX 1070有的一拼,于是矿工们在GTX 1060 3GB/6GB都缺货的情况下直接横扫了3000元的市场,GTX 1070也基本没货了。更高端的GTX 1080同样严重缺货,但这究竟是玩家被逼急了一步到位直接上高端卡还是矿工把魔爪伸向这片市场就不太清楚了。只有卡皇级别的GTX 1080 Ti情况略有改善,但也好不到哪去,可是6000元级别的显卡并不是每个人都能承受的,受影响的只有顶级玩家,不过也只是选择面变窄而已,并不是那种有钱都买不到的情况。

总结:

要挖矿,首选是显存有3GB以上的显卡,这个是基础。另外核心的频率会影响到挖矿速度,我们手头上有两张GTX 1080,一张公版,另一张是微星GTX 1080 GAMING X,两张卡的运行频率分别是1885MHz和1936MHz,经测试后者因为频率的关系在实际挖矿时会比前者快约4%,高频显卡的优势就凸显出来了。

所以小编的看法和建议是:

低端卡和旧架构的卡不适合用于挖矿 ·GTX 1080 Ti是个极端,拥有最强大的性能,但价格不适合大规模采购 ·同定位的A卡挖矿速度远强于N卡,但幅度没前两代那么大 ·GTX 1060 3GB版的性价比高于GTX 1060 6GB ·频率和流处理器/CUDA数量对矿卡性能有很大影响 ·显存的大小对挖矿没影响,够用即可 ·不同显卡挖不同币会有不同的收益,如果要深入探讨就要多测试几种货币,限于篇幅我们只选取较有代表性的两种货币测试

只要矿难没发生,缺货情况肯定会持续很久,但如果发生了矿难,会有一大批二手矿卡直接流入市场,这些矿卡都是一直满负载全速运行,寿命相比普通用户所用的卡大大缩短,即使价格更低也随时会翻车,完全没有入手的必要。而且二手市场会被直接扰乱,到时候一些正常的用户出二手也会变得困难,深水鱼的屠龙刀砍爆银河系这种情况也会发生。现在据说NVIDIA在搞一些没有显示输出接口的显卡作为矿卡提供给矿工,小编想说的是:然并卵 。产能一定,如果矿卡依然满足不了矿工,矿工就不会买消费市场的显卡了吗?只是矿工优先选择的是特供矿卡而已,该缺货还是会缺货,这些特殊的矿卡唯一的作用就是杜绝矿卡流入二手市场,绝对不能缓解目前显卡缺货的状况。

以太坊gpu挖矿程序是怎样的?

GPU挖掘

硬件

算法是内存难解的,为了使DAG适合内存,每个GPU需要1-2GB内存,如果你得到错误提示:Error GPU mining. GPU memory fragmentation? 说明你没有足够的内存。GPU挖矿软件是基于OpenCL实现的,AMD GPU会比同一水准的NVIDIA GPU更快。ASIC和FPGA相对低效因而被阻拦。要给芯片集成平台获取openCL,尝试:

AMD SDK openCL

NVIDIA CUDA openCL

Ubuntu Linux设置

对于这个快速指南,你会需要Ubuntu 14.04或15.04以及fglrx图像驱动器。你也可以使用NVidia驱动器和其他平台,但是你必须要找到自己的方式来获得有效的OpenCL安装,比如Genoil的ethminer分叉。

如果你在用15.04,到"软件与更新〉额外的驱动器"设置为"从fglrx为AMD图形加速器使用视频驱动器"。

如果你在用14.04,到"软件与更新〉额外的驱动器"设置为"从fglrx为AMD图形加速器使用视频驱动器"。很遗憾,对于一些人来说,这种方法可能不管用,因为Ubuntu 14.04.02中有个已知的程序错误会阻止你转换到GPU挖矿所必须的专属图形驱动器。

所以,如果你遇到这个程序错误,先到"软件与更新〉更新"选择"预发行的可靠更新提议"。然后,回到"软件与更新〉额外的驱动器"设置为"从fglrx为AMD图形加速器使用视频驱动器"。重启之后,值得检查一下现在确实正确安装了驱动器(例如通过再到"额外驱动器")。

不管做什么,如果你在用14.04.02,一旦安装之后,就不要改变驱动器或者驱动器配置。例如,aticonfig –initial的使用(尤其是-f, –force选项)会"破坏"你的设置。如果你偶然改变了配置,会需要卸载驱动器,重启,再次安装驱动器并重启。

以太坊linux系统挖eth和用ethminer挖eth,哪个效率更高

ifconfig 查看你是否开启网卡 /etc/init.d/network restart 启动网卡 查看 cd /etc/sysconfig/network-scripts/ 是否有ifcfg-eth0这个文件 没有的话配置一个 内容 DEVICE=eth0 (哪张网卡) ONBOOT=yes BOOTPROTO=static (静态ip状态设置) BOOTP...

Miner 流程

以太坊的矿工出块的流程,不同版本有过变更,下面基于1.7.3版本和1.8.4版本来分享

channel: 用于1发1收

发送 :sampleChan<-

接收 : <-sampleChan 

Feed:用于1发多收,参考chainHeadCh

接收者注册 :Subscribe(sampleChan)

发送 :send, 发送的地方不太好找,需要通过send和event/channel类型查找,例如miner中主要涉及到的就是 PostChainEvents

接收 :<-sampleChan

数据结构:

可以理解为操作间(eth)中有了矿(tx),那么矿主(miner)安排工人(worker)挖矿(seal)。结构体定义如下:

Type Miner struct {  -- - 理解为矿主

    mux        *event.TypeMux

    worker     *worker    ---- 理解为干活的工人

    coinbase    common.Address

    eth            Backend    - --- 理解为操作间

    engine      consensus.Engine    ---- 理解为挖矿的工具

    exitCh        chan struct {}

    canStart        int32 //canstart indicates whether we can start the mining operation

    shouldStart  int32 //shouldstart indicates whether we should start after sync

}

 流程图如下:

1.  节点启动: backend.new->miner.new->worker.new: 调用commitNewWork,里面使用push把work传递给cpuAgent, 之后在geth命令行敲miner.start()后->miner.start->worker.start->cpuAgent.start,调用Seal,计算nonce值,再发送 recv 消息,通知 worker . wait ,在收到之后将块打包插入到区块链,之后调用PostChainEvents,发送消息chainHeadCh, Worker.update 在收到消息后,重新调用 commitNewWor k,形成一个循环。

 2.  创世块: 调用geth的init命令触发调用initGenesis->SetupGenesisBlock, 里面具体强调一下time是使用的genesisBlock.json中的值,一般都是0.

  3.  正常情况: worker . wait ,在收到之后将块打包插入到区块链,之后调用PostChainEvents,发送消息chainHeadCh, Worker.update 在收到消息后,重新调用 commitNewWor k,形成一个循环。

Miner .new: 在backend new的时候调用,即在节点启动的时候调用。

Miner . update :在节点启动的时候调用,用于监控是否有块同步,如果有则停止挖矿,如果没有启动挖矿,这个在POW这种竞争性出块的环境中需要。

Worker .new: 在miner.new的时候调用,记载节点启动的时候调用 

Worker.update: 节点启动的时候调用,如果是非全节点的话用于监控接受交易transaction,关键函数 commitTransactions ,还用于调度在收到 chainHeadCh 的消息后,触发 commitNewWork

其中 commitNewWork :  用于将pending的tx输入到系统,计算trie等等操作,生成block,并将work push到cpuAgent处理,注意没有盖章

Worker. wait (对应于 1.8.4 的 resultLoop ) :节点启动的时候调用,循环监听 recv 消息,将携带的block插入区块链中、发送广播消息( NewMinedBlockEvent )、发送消息 PostChainEvents (发送 ChainHeadEvent ,即 chainHeadCh ),其中的关键函数是 WriteBlockAndState 。

cpuAgent .update() :  在cpuAgent.start()->worker.start->miner.start->geth的命令行调用之后启动循环,用于接收 commitNewWork 分配下来的work,关键函数 mine ,里面调用 Seal ,主要是完成POW寻找nonce值的操作,发送 recv 消息通知worker,也可以叫做盖章。

类图如下:

具体结构不再赘述

流程:

Miner.update:用于监控是否有块同步,如果有则停止挖矿,这个在POW这种竞争性出块的环境中需要

mainLoop:收到newWorkCh消息后处理,调用commitNewWork中的commit发送taskCh消息

newWorkLoop:收到startCh消息和chainHeadCh消息后发送newWorkCh消息

resultLoop:循环监听resultCh(seal发送)消息,将携带的block插入区块链中,并发送广播消息,关键函数WriteBlockAndState,并发送chainHeadCh消息

taskLoop:以前agent做的事情,收到taskCh消息后,调用seal,里面发送resultCh消息

以太币挖矿,用什么来挖?

以太币挖矿教程

1、在硬盘上新建文件夹,比C:Eth。之后所有挖矿软件就存放在这里。

2、下载以下软件

1)Geth——选择Geth-Win下载然后解压

2)Ethminer——下载解压到同一个文件夹,重命名为“miner”

3)Ethereum Wallet(以太坊钱包)——下载Win以太坊钱包,解压之后重命名“wallet”

安装好所有软件

3、打开命令提示符(同时点击Win和R键或者点击开始菜单然后输入cmd)。命令提示符是命令行解析器,让你在操作系统中执行命令输入的软件。

4、输入cdeth之后按回车

回车或返回键是用来确认命令的,因此每次输入命令之后都需要按这个键。cd是用来更换当前目录的命令。这里我们导航到C:硬盘的根目录,然后切换到eth文件夹。

5、重新输入geth账户,按确定键。就是让Geth为我们创建新账户。你需要设置密码然后重复输入(请注意自己看不到输入字段)。Geth会激活你的地址、公钥和私钥。保存好密码,别忘了。

6、最小化命令提示符之后切换到钱包文件夹,运行Ethereum-Wallet.exe。区块链就立即开始同步了。这个过程需要些时间,因为现在区块链容量已经达到27GB。下载完成之后需要再次输入密码。

之后你就拥有以太坊钱包了。但是没有余额,所以接下来你需要建立ethminer。暂时可以最小化钱包了。

挖矿

以太币是一种近几年才流行起来的网络虚拟货币,类似于现实生活中的矿藏,需要通过一种专门的设备进行挖掘得来的,其性质与特点和比特币类似。虽然其原理与现实生活中的挖矿类似,不过也存在一些差异,所以让一些没有专业知识的人(其实具有专业知识的人只是一小撮)难以理解。