1. Ethpool(Ethermine)ETHpool.org是第一个官方的以太坊矿池。此前由于工作量超负荷,该矿池不接受新用户,只接受老客户。因此,许多新矿工被迫转向单独挖矿,因为那时还没有其他可替代的矿池。在Ethpool上挖矿,必须安装以太坊的C++ETH版本。? 市场占有率:23%? 当前矿池算力:399.1GH / s? 挖矿奖励结算模式:PPLNS? 费率:1.0%? 网址:https://ethpool.org/2. NanopoolNanopool虽然是新矿池,但已经是目前以太坊上最大的矿池之一。份额(Share)的复杂性是静态的,相当于50亿。在该矿池上进行挖矿的最低哈希率仅为5 Mhesh / s。此外,此矿池根据PPLNS方案计算挖矿奖励,其中N是最近10分钟内所有接受的份额。(注:PPLNS全称Pay Per Last N Shares,即根据最近的N个股份来支付收益。)Nanopool的服务器遍及全球,官网页面简洁直观。但是这个矿池的最低支付门槛相对较高,建议连接3个服务器,避免等待长时间的付款期。? 市场占有率:8%? 当前矿池算力:16,176.3GH / s? 挖矿奖励结算模式:PPLNS? 费用:1.0%? 网址:https://eth.nanopool.org/3. F2Pool(鱼池)F2Pool是2019年最受欢迎的矿池之一。F2pool的服务器主要位于中国、其他亚洲国家和美国。F2pool.com因其开放性,可访问性和易用性而备受矿工喜爱。矿工在F2Pool上注册后才可以挖矿。以太坊挖矿需要一个显卡矿机。 ? 市场占有率:10%? 当前矿池算力:19.38TH / s? 挖矿奖励结算模式:PPS+? 费率:2.5%? 网址:https://www.f2pool.com/4. Sparkpool(星火矿池)在ETH,GRIN和BEAM生态系统中,最强大的中国资源库是Sparkpool,它是与全球矿工合作的开放资源。在挖矿之前,你需要配置矿机。基于AMD GPU处理器的以太坊挖矿收益更高。它需要闪存改进的BIOS并调整MSI Afterburner或AMD驱动程序设置中的超频选项。 ? 市场占有率:29%? 当前矿池算力:56.96TH / s? 挖矿奖励结算模式:PPS +? 费用:1.0%? 网址:https://www.sparkpool.com/5. Dwarfpool在DwarfPool,矿工的信用等级分为RBPPS或HBPPS。使用RBPPS,只要有A值,你就可以获得对应奖励(死块除外)。HBPPS计提算法是基于时间的股份支付。每小时计算一次所有推广和发现的区块。该矿池具有经过优化的最佳挖矿引擎,拒绝率较低,透明且详细的统计信息。每小时进行一次支付结算,服务器遍布世界各地。? 市场占有率:6%? 当前矿池算力:2377109 MH / s? 挖矿奖励结算模式:HBPPS? 费用:1.0%? 网址:https://dwarfpool.com/6. MiningPoolHubMiningPoolHub允许矿工通过挖矿获利,并根据不同支付系统的汇率来交易数字货币。该矿池使用PPLNS算法确定用户奖励。提款手续费为0.9%。? 市场份额:3.7%? 当前矿池算力:7.05T / s? 挖矿奖励类型:PPLNS? 费用:1.0%?
『贰』 以太坊源码分析--p2p节点发现
节点发现功能主要涉及 Server Table udp 这几个数据结构,它们有独自的事件响应循环,节点发现功能便是它们互相协作完成的。其中,每个以太坊客户端启动后都会在本地运行一个 Server ,并将网络拓扑中相邻的节点视为 Node ,而 Table 是 Node 的容器, udp 则是负责维持底层的连接。下面重点描述它们中重要的字段和事件循环处理的关键部分。
PrivateKey - 本节点的私钥,用于与其他节点建立时的握手协商
Protocols - 支持的所有上层协议
StaticNodes - 预设的静态 Peer ,节点启动时会首先去向它们发起连接,建立邻居关系
newTransport - 下层传输层实现,定义握手过程中的数据加密解密方式,默认的传输层实现是用 newRLPX() 创建的 rlpx ,这不是本文的重点
ntab - 典型实现是 Table ,所有 peer 以 Node 的形式存放在 Table
ourHandshake - 与其他节点建立连接时的握手信息,包含本地节点的版本号以及支持的上层协议
addpeer - 连接握手完成后,连接过程通过这个通道通知 Server
Server 的监听循环,启动底层监听socket,当收到连接请求时,Accept后调用 setupConn() 开始连接建立过程
Server的主要事件处理和功能实现循环
Node 唯一表示网络上的一个节点
IP - IP地址
UDP/TCP - 连接使用的UDP/TCP端口号
ID - 以太坊网络中唯一标识一个节点,本质上是一个椭圆曲线公钥(PublicKey),与 Server 的 PrivateKey 对应。一个节点的IP地址不一定是固定的,但ID是唯一的。
sha - 用于节点间的距离计算
Table 主要用来管理与本节点与其他节点的连接的建立更新删除
bucket - 所有 peer 按与本节点的距离远近放在不同的桶(bucket)中,详见之后的 节点维护
refreshReq - 更新 Table 请求通道
Table 的主要事件循环,主要负责控制 refresh 和 revalidate 过程。
refresh.C - 定时(30s)启动Peer刷新过程的定时器
refreshReq - 接收其他线程投递到 Table 的 刷新Peer连接 的通知,当收到该通知时启动更新,详见之后的 更新邻居关系
revalidate.C - 定时重新检查以连接节点的有效性的定时器,详见之后的 探活检测
udp 负责节点间通信的底层消息控制,是 Table 运行的 Kademlia 协议的底层组件
conn - 底层监听端口的连接
addpending - udp 用来接收 pending 的channel。使用场景为:当我们向其他节点发送数据包后(packet)后可能会期待收到它的回复,pending用来记录一次这种还没有到来的回复。举个例子,当我们发送ping包时,总是期待对方回复pong包。这时就可以将构造一个pending结构,其中包含期待接收的pong包的信息以及对应的callback函数,将这个pengding投递到udp的这个channel。 udp 在收到匹配的pong后,执行预设的callback。
gotreply - udp 用来接收其他节点回复的通道,配合上面的addpending,收到回复后,遍历已有的pending链表,看是否有匹配的pending。
Table - 和 Server 中的ntab是同一个 Table
udp 的处理循环,负责控制消息的向上递交和收发控制
udp 的底层接受数据包循环,负责接收其他节点的 packet
以太坊使用 Kademlia 分布式路由存储协议来进行网络拓扑维护,了解该协议建议先阅读 易懂分布式 。更权威的资料可以查看 wiki 。总的来说该协议:
源码中由 Table 结构保存所有 bucket , bucket 结构如下
节点可以在 entries 和 replacements 互相转化,一个 entries 节点如果 Validate 失败,那么它会被原本将一个原本在 replacements 数组的节点替换。
有效性检测就是利用 ping 消息进行探活操作。 Table.loop() 启动了一个定时器(0~10s),定期随机选择一个bucket,向其 entries 中末尾的节点发送 ping 消息,如果对方回应了 pong ,则探活成功。
Table.loop() 会定期(定时器超时)或不定期(收到refreshReq)地进行更新邻居关系(发现新邻居),两者都调用 doRefresh() 方法,该方法对在网络上查找离自身和三个随机节点最近的若干个节点。
Table 的 lookup() 方法用来实现节点查找目标节点,它的实现就是 Kademlia 协议,通过节点间的接力,一步一步接近目标。
当一个节点启动后,它会首先向配置的静态节点发起连接,发起连接的过程称为 Dial ,源码中通过创建 dialTask 跟踪这个过程
dialTask表示一次向其他节点主动发起连接的任务
在 Server 启动时,会调用 newDialState() 根据预配置的 StaticNodes 初始化一批 dialTask , 并在 Server.run() 方法中,启动这些这些任务。
Dial 过程需要知道目标节点( dest )的IP地址,如果不知道的话,就要先使用 recolve() 解析出目标的IP地址,怎么解析?就是先要用借助 Kademlia 协议在网络中查找目标节点。
当得到目标节点的IP后,下一步便是建立连接,这是通过 dialTask.dial() 建立连接
连接建立的握手过程分为两个阶段,在在 SetupConn() 中实现
第一阶段为 ECDH密钥建立 :
第二阶段为协议握手,互相交换支持的上层协议
如果两次握手都通过,dialTask将向 Server 的 addpeer 通道发送 peer 的信息
『叁』 以太币挖矿,用什么来挖
以太币挖矿教程
1、在硬盘上新建文件夹,比C:Eth。之后所有挖矿软件就存放在这里。
2、下载以下软件
1)Geth——选择Geth-Win下载然后解压
2)Ethminer——下载解压到同一个文件夹,重命名为“miner”
3)Ethereum Wallet(以太坊钱包)——下载Win以太坊钱包,解压之后重命名“wallet”
安装好所有软件
3、打开命令提示符(同时点击Win和R键或者点击开始菜单然后输入cmd)。命令提示符是命令行解析器,让你在操作系统中执行命令输入的软件。
之后你就拥有以太坊钱包了。但是没有余额,所以接下来你需要建立ethminer。暂时可以最小化钱包了。
挖矿
『肆』 以太坊怎么挖
以太坊现在基本上都是用6-8G显卡来挖矿,之前就能用电脑挖到,但是现在由于算力难度已经提高了很多,现在电脑cup基本上是挖不到了
现在挖一枚以太坊的成本大概在1000左右,目前以太坊的价格是2800左右,也就是说挖矿你能用1000块就能获取到一枚以太坊,利润出去成本你还能赚区1800的盈利。
目前不管是比特币还是以太坊都分为两种挖矿模式,第一种就是实体矿机挖矿,第二种就是运算力挖矿
实体挖矿成本比较高,矿机托管或者自己挖都需要耗费个人非常大的精力,包括后期的成本维护、电费以及付出的时间成本,而且现在实体矿机都是企业或者机构垄断了,个人很难用实体矿机赚到,一半刚接触的人都会选择云算力,买算力就相当于你买矿机,不需要自己管理,不需要占用你的时间,每天该干嘛就干嘛,非常简单。
『伍』 怎样在imtoken免费挖以太坊
需要先准备一个钱包以矿池,如鱼池蚁池等,再在imtoken中红色框中内容,修改为矿池地址,将蓝色框中内容,修改为钱包地址,再将绿色框中内容,修改为你的矿工名,将imtoken双击运行就可以挖了。
虚拟货币的生产过程被称为挖矿,最重要成本是矿机运行所需的电费,因此矿场聚集在电力充足且电费便宜的地区,例如火电丰富的新疆,内蒙古,以及水电丰富的云南、四川、贵州。
『陆』 【深度知识】以太坊数据序列化RLP编码/解码原理
RLP(Recursive Length Prefix),中文翻译过来叫递归长度前缀编码,它是以太坊序列化所采用的编码方式。RLP主要用于以太坊中数据的网络传输和持久化存储。
对象序列化方法有很多种,常见的像JSON编码,但是JSON有个明显的缺点:编码结果比较大。例如有如下的结构:
变量s序列化的结果是{"name":"icattlecoder","sex":"male"},字符串长度35,实际有效数据是icattlecoder 和male,共计16个字节,我们可以看到JSON的序列化时引入了太多的冗余信息。假设以太坊采用JSON来序列化,那么本来50GB的区块链可能现在就要100GB,当然实际没这么简单。
所以,以太坊需要设计一种结果更小的编码方法。
RLP编码的定义只处理两类数据:一类是字符串(例如字节数组),一类是列表。字符串指的是一串二进制数据,列表是一个嵌套递归的结构,里面可以包含字符串和列表,例如["cat",["puppy","cow"],"horse",[[]],"pig",[""],"sheep"]就是一个复杂的列表。其他类型的数据需要转成以上的两类,转换的规则不是RLP编码定义的,可以根据自己的规则转换,例如struct可以转成列表,int可以转成二进制(属于字符串一类),以太坊中整数都以大端形式存储。
从RLP编码的名字可以看出它的特点:一个是递归,被编码的数据是递归的结构,编码算法也是递归进行处理的;二是长度前缀,也就是RLP编码都带有一个前缀,这个前缀是跟被编码数据的长度相关的,从下面的编码规则中可以看出这一点。
对于值在[0, 127]之间的单个字节,其编码是其本身。
例1:a的编码是97。
如果byte数组长度l <= 55,编码的结果是数组本身,再加上128+l作为前缀。
例2:空字符串编码是128,即128 = 128 + 0。
例3:abc编码结果是131 97 98 99,其中131=128+len("abc"),97 98 99依次是a b c。
如果数组长度大于55, 编码结果第一个是183加数组长度的编码的长度,然后是数组长度的本身的编码,最后是byte数组的编码。
请把上面的规则多读几篇,特别是数组长度的编码的长度。
例4:编码下面这段字符串:
The length of this sentence is more than 55 bytes, I know it because I pre-designed it
这段字符串共86个字节,而86的编码只需要一个字节,那就是它自己,因此,编码的结果如下:
184 86 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前三个字节的计算方式如下:
184 = 183 + 1,因为数组长度86编码后仅占用一个字节。
86即数组长度86
84是T的编码
例5:编码一个重复1024次"a"的字符串,其结果为:185 4 0 97 97 97 97 97 97 ...。
1024按 big endian编码为004 0,省略掉前面的零,长度为2,因此185 = 183 + 2。
规则1~3定义了byte数组的编码方案,下面介绍列表的编码规则。在此之前,我们先定义列表长度是指子列表编码后的长度之和。
如果列表长度小于55,编码结果第一位是192加列表长度的编码的长度,然后依次连接各子列表的编码。
注意规则4本身是递归定义的。
例6:["abc", "def"]的编码结果是200 131 97 98 99 131 100 101 102。
其中abc的编码为131 97 98 99,def的编码为131 100 101 102。两个子字符串的编码后总长度是8,因此编码结果第一位计算得出:192 + 8 = 200。
如果列表长度超过55,编码结果第一位是247加列表长度的编码长度,然后是列表长度本身的编码,最后依次连接各子列表的编码。
规则5本身也是递归定义的,和规则3相似。
例7:
["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
的编码结果是:
248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前两个字节的计算方式如下:
248 = 247 +1
88 = 86 + 2,在规则3的示例中,长度为86,而在此例中,由于有两个子字符串,每个子字符串本身的长度的编码各占1字节,因此总共占2字节。
第3个字节179依据规则2得出179 = 128 + 51
第55个字节163同样依据规则2得出163 = 128 + 35
例8:最后我们再来看个稍复杂点的例子以加深理解递归长度前缀,
["abc",["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]]
编码结果是:
248 94 131 97 98 99 248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
列表第一项字符串abc根据规则2,编码结果为131 97 98 99,长度为4。
列表第二项也是一个列表项:
["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
根据规则5,结果为
248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
长度为90,因此,整个列表的编码结果第二位是90 + 4 = 94, 占用1个字节,第一位247 + 1 = 248
以上5条就是RPL的全部编码规则。
各语言在具体实现RLP编码时,首先需要将对像映射成byte数组或列表两种形式。以go语言编码struct为例,会将其映射为列表,例如Student这个对象处理成列表["icattlecoder","male"]
如果编码map类型,可以采用以下列表形式:
[["",""],["",""],["",""]]
解码时,首先根据编码结果第一个字节f的大小,执行以下的规则判断:
1.如果f∈ [0,128),那么它是一个字节本身。
2.如果f∈[128,184),那么它是一个长度不超过55的byte数组,数组的长度为 l=f-128
3.如果f∈[184,192),那么它是一个长度超过55的数组,长度本身的编码长度ll=f-183,然后从第二个字节开始读取长度为ll的bytes,按照BigEndian编码成整数l,l即为数组的长度。
4.如果f∈(192,247],那么它是一个编码后总长度不超过55的列表,列表长度为l=f-192。递归使用规则1~4进行解码。
5.如果f∈(247,256],那么它是编码后长度大于55的列表,其长度本身的编码长度ll=f-247,然后从第二个字节读取长度为ll的bytes,按BigEndian编码成整数l,l即为子列表长度。然后递归根据解码规则进行解码。
以上解释了什么叫递归长度前缀编码,这个名字本身很好的解释了编码规则。
(1) 以太坊源码学习—RLP编码( https://segmentfault.com/a/1190000011763339 )
(2)简单分析RLP编码原理
( https://blog.csdn.net/itchosen/article/details/78183991 )
『柒』 以太坊如何挖矿
目前市场上主流的以太坊矿机大多来自比特大陆、嘉楠耘智,不过随着以太坊价格的下跌,挖矿带来的利润已经十分微薄,投资者可以选择在数字货币交易所进行以太坊的交易投资。目前市场上主流的数字货币交易所有币安、火币网、比特网等。