以太坊cpu挖矿geth
『壹』 走进以太坊网络
目录
术语“以太坊节点”是指以某种方式与以太坊网络交互的程序。从简单的手机钱包应用程序到存储整个区块链副本的计算机,任何设备均可扮演以太坊节点。
所有节点都以某种方式充当通信点,但以太坊网络中的节点分为多种类型。
与比特币不同,以太坊找不到任何程序作为参考实施方案。在比特币生态系统中, 比特币核心 是主要节点软件,以太坊黄皮书则提出了一系列独立(但兼容)的程序。目前最流行的是Geth和Parity。
若要以允许独立验证区块链数据的方式连接以太坊网络,则应使用之前提到的软件运行全节点。
该软件将从其他节点下载区块,并验证其所含交易的正确性。软件还将运行调用的所有智能合约,确保接收的信息与其他节点相同。如果一切按计划运行,我们可以认为所有节点设备均存储相同的区块链副本。
全节点对于以太坊的运行至关重要。如果没有遍布全球的众多节点,网络将丧失其抗审查性与去中心化特性。
通过运行全节点,您可以直接为网络的 健康 和安全发展贡献一份力量。然而,全节点通常需要使用独立的机器完成运行和维护。对于无法(或单纯不愿)运行全节点的用户,轻节点是更好的选择。
顾名思义,轻节点均为轻量级设备,可显著降低资源和空间占用率。手机或笔记本电脑等便携式设备均可作为轻节点。然而,降低开销也要付出代价:轻节点无法完全实现自给自足。它们无法与整条区块链同步,需要全节点提供相关信息。
轻节点备受商户、服务供应商和用户的青睐。在不必使用全节点并且运行成本过高的情况下,它们广泛应用于支收付款。
挖矿节点既可以是全节点客户端,也可以是轻节点客户端。“挖矿节点”这个术语的使用方式与比特币生态系统不同,但依然应用于识别参与者。
如需参与以太坊挖矿,必须使用一些附加硬件。最常见的做法是构建 矿机 。用户通过矿机将多个GPU(图形处理器)连接起来,高速计算哈希数据。
矿工可以选择两种挖矿方案:单独挖矿或加入矿池。 单独挖矿 表示矿工独自创建区块。如果成功,则独享挖矿奖励。如果加入 矿池 ,众多矿工的哈希算力会结合起来。出块速度得以提升,但挖矿奖励将由众多矿工共享。
区块链最重要的特性之一就是“开放访问”。这表明任何人均可运行以太坊节点,并通过验证交易和区块强化网络。
与比特币相似,许多企业都提供即插即用的以太坊节点。如果只想启动并运行单一节点,这种设备无疑是最佳选择,缺点是必须为便捷性额外付费。
如前文所述,以太坊中存在众多不同类型的节点软件实施方案,例如Geth和Parity。若要运行个人节点,必须掌握所选实施方案的安装流程。
除非运行名为 归档节点 的特殊节点,否则消费级笔记本电脑足以支持以太坊全节点正常运行。不过,最好不要使用日常工作设备,因为节点会严重拖慢运行速度。
运行个人节点时,建议设备始终在线。倘若节点离线,再次联网时可能耗费大量的时间进行同步。因此,最好选择造价低廉并且易于维护的设备。您甚至可以通过Raspberry Pi运行轻节点。
随着网络即将过渡到权益证明机制,以太坊挖矿不再是最安全的长期投资方式。过渡成功后,以太坊矿工只能将挖矿设备转入其他网络或直接变卖。
鉴于过渡尚未完成,参与以太坊挖矿仍需使用特殊硬件(例如GPU或ASIC)。若要获得可观收益,则必须定制矿机并寻找电价低廉的矿场。此外,还需创建以太坊钱包并配置相应的挖矿软件。这一切都会耗费大量的时间和资金。在参与挖矿前,请认真考量自己能否应对各种挑战。(国内严禁挖矿,切勿以身试法)
ProgPow代表 程序化工作量证明 。这是以太坊挖矿算法Ethash的扩展方案,旨在提升GPU的竞争力,使其超过ASIC。
在比特币和以太坊社区,抗ASIC多年来一直是饱受争议的话题。在比特币网络中,ASIC已经成为主要的挖矿力量。
在以太坊中,ASIC并不是主流,相当一部分矿工仍然使用GPU。然而,随着越来越多的公司将以太坊ASIC矿机引入市场,这种情况很快就会改变。然而,ASIC到底存在什么问题呢?
一方面,ASIC明显削弱网络的去中心化。如果GPU矿工无法盈利,不得不停止挖矿,哈希率最终就会集中在少数矿工手中。此外,ASIC芯片的开发成本相当昂贵,坐拥开发能力与资源的公司屈指可数。这种现状有可能导致以太坊挖矿产业集中在少数公司手中,形成一定程度的行业垄断。
自2018年以来,ProgPow的集成一直饱受争议。有些人认为,它有益于以太坊生态系统的 健康 发展。另一些人则持反对态度,认为它可能导致硬分叉。随着权益证明机制的到来,ProgPoW能否应用于网络仍然有待观察。
以太坊与比特币是一样,均为开源平台。所有人都可以参与协议开发,或基于协议构建应用程序。事实上,以太坊也是区块链领域目前最大的开发者社区。
Andreas Antonopoulos和Gavin Wood出品的 Mastering Ethereum ,以及Ethereum.org推出的 开发者资源 等都是新晋开发者理想的入门之选。
智能合约的概念于20世纪90年代首次提出。其在区块链中的应用带来了一系列全新挑战。2014年由Gavin Wood提出的Solidity已经成为开发以太坊智能合约的主要编程语言,其语法与Java、JavaScript以及C++类似。
从本质上讲,使用Solidity语言,开发者可以编写在分解后可由以太坊虚拟机(EVM)解析的指令。您可以通过Solidity GitHub详细了解其工作原理。
其实,Solidity语言并非以太坊开发者的唯一选择。Vyper也是一种热门的开发语言,其语法更接近Python。
『贰』 以太坊开发人员正在应对最坏情况
以太坊准备好迎接“伦敦”硬分叉了吗?
随着以太坊准备在8月4日星期三激活其第11次向后不兼容升级,也称为“硬分叉”,一些开发人员担心升级可能会在部署前进行更多测试。
在7月23日星期五举行的每两周一次的以太坊核心开发者会议之后不久,以太坊基金会的提姆·贝科在所有的核心开发者Discord 聊天室中写道,“有几个人已经联系或发推文说他们不一定对不延迟[硬分叉]感到满意……我[在会议上]询问了这个问题,似乎没有人有强烈的意见,但有些人提到这可能不是正确的方法。”
在回应贝科的评论时,以太坊软件客户端开发人员阿列克谢·阿胡诺夫表示,他同意,鉴于最近发生的事件,在每两周一次的会议上,没有更多讨论可能推迟被称为“伦敦”的硬分叉。
“我想我知道为什么,”阿胡诺夫写道。“推迟 [伦敦] 是一个敏感话题,没有人愿意承受压力,这是可以理解的。”
聊天室中的其他人恳求以太坊开发人员认真考虑将伦敦再推迟几周进行进一步测试。
对伦敦升级风险的担忧—其中包括影响以太坊费用市场的有争议的代码更改,称为以太坊改进提案(EIP)1559—在以太坊软件客户端Geth中发现一个错误后增长。
作为背景,Geth是最流行的用于连接以太坊的软件。据Ethernodes.org称,在所有同步到以太坊网络的计算机(也称为节点)中,估计有86%运行Geth客户端软件。
7月21日星期三,一个月前启动伦敦硬分叉的以太坊测试网络Ropsten,在运行Geth的节点将无效交易挖入一个区块,而运行少数客户Besu和Open以太坊的节点却拒绝了它。
几个小时内,Geth团队发布了一个补丁程序,并鼓励所有用户将他们的软件更新到最新版本号Terra Nova1.10.6。
虽然没有开发人员认为该漏洞应该在周五的电话会议期间延迟伦敦的主网络激活,但一些开发人员确实讨论了如果在以太坊而不是在测试网络上发现此类漏洞的适当行动方案。
“如果像这样的事情发生在主网上,我们会怎么做,尤其是在大多数客户Geth正在生产区块的地方?显然需要几个小时才能修复,”贝科在会议期间说。
以太坊基金会的马丁·霍尔斯特·斯温德强调,这些漏洞在Ropsten上并不是前所未有的,虽然解决它们“很麻烦”,但有两种方法可以解决它们。
首先,如果用户的节点遵循错误的区块链版本,用户将需要在链分裂之前在内部将链“倒回”到区块,并使用修补过的Geth软件同步到新链。其次,如果用户的节点尚未同步到区块链的某个版本,但正在尝试连接到网络以收集有关最近交易的数据或执行交易,则用户最终可能会连接到错误版本的链。为了避免这种情况,这些用户需要将以太坊上遵循正确链的某些节点“列入白名单”,并与卡在错误链上的其他节点隔离。
倒带和白名单以太坊节点都可以通过Geth完成。Ropsten上的矿工能够使用这些策略解决上周三发生的链分裂问题,尽管一位矿工在周五的会议上指出,在周三的事件发生之前,修复链分裂的指令没有得到有效传达,因此让许多矿工对如何正确重启节点感到困惑。
用户“AlexSSD7”在Discord 聊天室中写道,作为以太坊矿池的代表,他们“担心”Geth中的错误,并指出,“一分钟的[网络]停机时间让我们付出了很多代价。一小时的停机时间对我们来说是2万美元。”
客户端软件中的意外错误确实会对在主网络上运行的交易所和企业造成破坏,这就是为什么开发人员强调需要一个强大的监控系统,该系统可以快速提醒节点运营商链分裂并鼓励他们暂停运营直到进一步调查。
“这似乎是一个非常容易实现的成果,为生态系统提供了一种价值基调。如果你不确定如何开始,请在Discord中询问,”贝科在周五的会议上说。
如果在主网上部署伦敦后再次发生类似于周三发生的错误,这些解决方案肯定会有所帮助,但它们不一定是用于解决更大规模问题的相同解决方案,例如黑客神奇地打印了1亿个ETH。
如果发生如此灾难性的事情,以太坊基金会的丹尼·瑞安在周五的会议上表示,很难提前知道开发人员将如何进行。
“我认为对于将出现的多种类型的错误和多种类型的特性,只有多种选择,”瑞安说。
网络漏洞的影响越严重,解决漏洞的解决方案就越可能具有侵入性——并且对以太坊作为安全区块链的声誉的损害就越大。
随着以太坊发展路线图的近期硬分叉越来越雄心勃勃,找出最坏情况的潜在解决方案以及与网络权益持有人的损害控制计划可能很快成为开发人员考虑的当务之急。
Fountain联合创始人马修·香森说:“传统市场的DeFi:当安全代币出现时。” 。 亮点 : Fountain是以太坊上的一个去中心化交易所,使用户能够买卖安全代币。香森强调了区块链技术提供的流动性和可访问性,每天24小时可访问并允许即时结算。证券通证化还有其他一些好处,包括进一步提高可访问性的资产透明度和分拆。然而,建立一个完全去中心化的证券交易所有很多挑战。入职客户和新证券都需要遵守国际法规,包括了解客户法律和托管许可证。
“信贷授权的力量”,Aave创始人斯坦尼·库莱霍夫的演讲。亮点: Aave是一个建立在以太坊基础上的去中心化借贷协议。该协议背后的团队已经开发出一种可以提供零抵押贷款的产品。库莱霍夫认为,这是在将DeFi流动性引入实体经济和推动Aave借贷需求方面向前迈出的一步。
以太坊创造者维塔利克·巴特林所说的“DeFi之外的事情”。亮点: 除金融服务外,社交媒体和公共产品融资是以太坊尚未开展的两项活动。巴特林认为,网络的代币经济和抵抗审查是这些活动能够从建立在去中心化区块链之上获益的两个原因。
“Uniswap,DeFi&消费金融的未来”,Uniswap增长负责人Ashleigh Schap的谈话。亮点: Uniswap实验室正试图与Talos、Paxos和Fireblocks等区块链基础设施公司建立合作关系,将DeFi解决方案连接到PayPal和E*Trade等知名金融 科技 公司的后端。
Circle协议开发者朱利安·布特卢普谈到“为什么DEX正在吞噬世界”。亮点: 在最好的情况下,[去中心化金融]允许世界公民平等地使用所有货币、股票和金融平台。随着领域的发展,去中心化将成为一种趋势。监管者将监督传统金融界使用的协议,用户仍将有权进入DeFi如今的“狂野西部”试验场。
#比特币[超话]# #数字货币#
『叁』 以太坊区块链大小多少(以太坊区块高度是多少)
以太坊公链区块高度根据之前的消息,以太坊区块高度现在调整高度到4730660!以太坊是一个全新开放的区块链平台,它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。
就像比特币一样,以太坊不受任何人控制,也不归任何人所有——它是一个开放源代码项目,由全球范围内的很多人共同创建。和比特币协议有所不同的是,以太坊的设计十分灵活,极具适应性。在以太坊平台上创立新的应用十分简便,随着Homestead的发布,任何人都可以安全地使用该平台上的应用。
以太坊是可编程的区块链。它并不是给用户一系列预先设定好的操作,而是允许用户按照自己的意愿创建复杂的操作。这样一来,它就可以作为多种类型去中心化区块链应用的平台。
以太坊区块链大小
与比特币网络不同,以太坊不会明确地按内存限制每个区块的大小,而是通过区块GasLimit强制规定每个区块的大小。
以太坊的区块GasLimit设置有效的限制了一个区块中可以打包的交易量。GasLimit参数由以太坊矿工集体决定,即通过投票的方式来动态地增加或降低GasLimit数值。
最近的一次投票是2019年下半年,矿工们群体投票同意将以太坊的区块GasLimit由原来的800万Gas单位提高至1000万,使每个区块相比之前区块的大小增加了25%左右,这从理论上提高了以太坊网络的TPS。
什么是区块链扩容?普通用户能够运行节点对于区块链的去中心化至关重要
想象一下凌晨两点多,你接到了一个紧急呼叫,来自世界另一端帮你运行矿池(质押池)的人。从大约14分钟前开始,你的池子和其他几个人从链中分离了出来,而网络仍然维持着79%的算力。根据你的节点,多数链的区块是无效的。这时出现了余额错误:区块似乎错误地将450万枚额外代币分配给了一个未知地址。
一小时后,你和其他两个同样遭遇意外的小矿池参与者、一些区块浏览器和交易所方在一个聊天室中,看见有人贴出了一条推特的链接,开头写着“宣布新的链上可持续协议开发基金”。
到了早上,相关讨论广泛散布在推特以及一个不审查内容的社区论坛上。但那时450万枚代币中的很大一部分已经在链上转换为其他资产,并且进行了数十亿美元的defi交易。79%的共识节点,以及所有主要的区块链浏览器和轻钱包的端点都遵循了这条新链。也许新的开发者基金将为某些开发提供资金,或者也许所有这些都被领先的矿池、交易所及其裙带所吞并。但是无论结果如何,该基金实际上都成为了既成事实,普通用户无法反抗。
或许还有这么一部主题电影。或许会由MolochDAO或其他组织进行资助。
这种情形会发生在你的区块链中吗?你所在区块链社区的精英,包括矿池、区块浏览器和托管节点,可能协调得很好,他们很可能都在同一个telegram频道和微信群中。如果他们真的想出于利益突然对协议规则进行修改,那么他们可能具备这种能力。以太坊区块链在十小时内完全解决了共识失败,如果是只有一个客户端实现的区块链,并且只需要将代码更改部署到几十个节点,那么可以更快地协调客户端代码的更改。能够抵御这种社会性协作攻击的唯一可靠方式是“被动防御”,而这种力量来自去一个中心化的群体:用户。
想象一下,如果用户运行区块链的验证节点(无论是直接验证还是其他间接技术),并自动拒绝违反协议规则的区块,即使超过90%的矿工或质押者支持这些区块,故事会如何发展。
如果每个用户都运行一个验证节点,那么攻击很快就会失败:有些矿池和交易所会进行分叉,并且在整个过程中看起来很愚蠢。但是即使只有一些用户运行验证节点,攻击者也无法大获全胜。相反,攻击会导致混乱,不同用户会看到不同的区块链版本。最坏情况下,随之而来的市场恐慌和可能持续的链分叉将大幅减少攻击者的利润。对如此旷日持久的冲突进行应对的想法本身就可以阻止大多数攻击。
Hasu关于这一点的看法:
“我们要明确一件事,我们之所以能够抵御恶意的协议更改,是因为拥有用户验证区块链的文化,而不是因为PoW或PoS。”
假设你的社区有37个节点运行者,以及80000名被动监听者,对签名和区块头进行检查,那么攻击者就获胜了。如果每个人都运行节点的话,攻击者就会失败。我们不清楚针对协同攻击的启动群体免疫的确切阈值是多少,但有一点是绝对清楚的:好的节点越多,恶意的节点就越少,而且我们所需的数量肯定不止于几百几千个。
那么全节点工作的上限是什么?
为了使得有尽可能多的用户能够运行全节点,我们会将注意力集中在普通消费级硬件上。即使能够轻松购买到专用硬件,这能够降低一些全节点的门槛,但事实上对可扩展性的提升并不如我们想象的那般。
全节点处理大量交易的能力主要受限于三个方面:
算力:在保证安全的前提下,我们能划分多少CPU来运行节点?
带宽:基于当前的网络连接,一个区块能包含多少字节?
存储:我们能要求用户使用多大的空间来进行存储?此外,其读取速度应该达到多少?(即,HDD足够吗?还是说我们需要SSD?)
许多使用“简单”技术对区块链进行大幅扩容的错误看法都源自于对这些数字过于乐观的估计。我们可以依次来讨论这三个因素:
算力
错误答案:100%的CPU应该用于区块验证
正确答案:约5-10%的CPU可以用于区块验证
限制之所以这么低的四个主要原因如下:
我们需要一个安全边界来覆盖DoS攻击的可能性(攻击者利用代码弱点制造的交易需要比常规交易更长的处理时间)
节点需要在离线之后能够与区块链同步。如果我掉线一分钟,那我应该要能够在几秒钟之内完成同步
运行节点不应该很快地耗尽电池,也不应该拖慢其他应用的运行速度
节点也有其他非区块生产的工作要进行,大多数是验证以及对p2p网络中输入的交易和请求做出响应
请注意,直到最近大多数针对“为什么只需要5-10%?”这一点的解释都侧重于另一个不同的问题:因为PoW出块时间不定,验证区块需要很长时间,会增加同时创建多个区块的风险。这个问题有很多修复方法,例如BitcoinNG,或使用PoS权益证明。但这些并没有解决其他四个问题,因此它们并没有如许多人所料在可扩展性方面获得巨大进展。
并行性也不是灵丹妙药。通常,即使是看似单线程区块链的客户端也已经并行化了:签名可以由一个线程验证,而执行由其他线程完成,并且有一个单独的线程在后台处理交易池逻辑。而且所有线程的使用率越接近100%,运行节点的能源消耗就越多,针对DoS的安全系数就越低。
带宽
错误答案:如果没2-3秒都产生10MB的区块,那么大多数用户的网络都大于10MB/秒,他们当然都能处理这些区块
正确答案:或许我们能在每12秒处理1-5MB的区块,但这依然很难
如今,我们经常听到关于互联网连接可以提供多少带宽的广为传播的统计数据:100Mbps甚至1Gbps的数字很常见。但是由于以下几个原因,宣称的带宽与预期实际带宽之间存在很大差异:
“Mbps”是指“每秒数百万bits”;一个bit是一个字节的1/8,因此我们需要将宣称的bit数除以8以获得字节数。
网络运营商,就像其他公司一样,经常编造谎言。
总是有多个应用使用同一个网络连接,所以节点无法独占整个带宽。
P2P网络不可避免地会引入开销:节点通常最终会多次下载和重新上传同一个块(更不用说交易在被打包进区块之前还要通过mempool进行广播)。
当Starkware在2019年进行一项实验时,他们在交易数据gas成本降低后首次发布了500kB的区块,一些节点实际上无法处理这种大小的区块。处理大区块的能力已经并将持续得到改善。但是无论我们做什么,我们仍然无法获取以MB/秒为单位的平均带宽,说服自己我们可以接受1秒的延迟,并且有能力处理那种大小的区块。
存储
错误答案:10TB
正确答案:512GB
正如大家可能猜到的,这里的主要论点与其他地方相同:理论与实践之间的差异。理论上,我们可以在亚马逊上购买8TB固态驱动(确实需要SSD或NVME;HDD对于区块链状态存储来说太慢了)。实际上,我用来写这篇博文的笔记本电脑有512GB,如果你让人们去购买硬件,许多人就会变得懒惰(或者他们无法负担800美元的8TBSSD)并使用中心化服务。即使可以将区块链装到某个存储设备上,大量活动也可以快速地耗尽磁盘并迫使你购入新磁盘。
一群区块链协议研究员对每个人的磁盘空间进行了调查。我知道样本量很小,但仍然...
此外,存储大小决定了新节点能够上线并开始参与网络所需的时间。现有节点必须存储的任何数据都是新节点必须下载的数据。这个初始同步时间(和带宽)也是用户能够运行节点的主要障碍。在写这篇博文时,同步一个新的geth节点花了我大约15个小时。如果以太坊的使用量增加10倍,那么同步一个新的geth节点将至少需要一周时间,而且更有可能导致节点的互联网连接受到限制。这在攻击期间更为重要,当用户之前未运行节点时对攻击做出成功响应需要用户启用新节点。
交互效应
此外,这三类成本之间存在交互效应。由于数据库在内部使用树结构来存储和检索数据,因此从数据库中获取数据的成本随着数据库大小的对数而增加。事实上,因为顶级(或前几级)可以缓存在RAM中,所以磁盘访问成本与数据库大小成正比,是RAM中缓存数据大小的倍数。
不要从字面上理解这个图,不同的数据库以不同的方式工作,通常内存中的部分只是一个单独(但很大)的层(参见leveldb中使用的LSM树)。但基本原理是一样的。
例如,如果缓存为4GB,并且我们假设数据库的每一层比上一层大4倍,那么以太坊当前的~64GB状态将需要~2次访问。但是如果状态大小增加4倍到~256GB,那么这将增加到~3次访问。因此,gas上限增加4倍实际上可以转化为区块验证时间增加约6倍。这种影响可能会更大:硬盘在已满状态下比空闲时需要花更长时间来读写。
这对以太坊来说意味着什么?
现在在以太坊区块链中,运行一个节点对许多用户来说已经是一项挑战,尽管至少使用常规硬件仍然是可能的(我写这篇文章时刚刚在我的笔记本电脑上同步了一个节点!)。因此,我们即将遭遇瓶颈。核心开发者最关心的问题是存储大小。因此,目前在解决计算和数据瓶颈方面的巨大努力,甚至对共识算法的改变,都不太可能带来gaslimit的大幅提升。即使解决了以太坊最大的DoS弱点,也只能将gaslimit提高20%。
对于存储大小的问题,唯一解决方案是无状态和状态逾期。无状态使得节点群能够在不维护永久存储的情况下进行验证。状态逾期会使最近未访问过的状态失活,用户需要手动提供证明来更新。这两条路径已经研究了很长时间,并且已经开始了关于无状态的概念验证实现。这两项改进相结合可以大大缓解这些担忧,并为显著提升gaslimit开辟空间。但即使在实施无状态和状态逾期之后,gaslimit也可能只会安全地提升约3倍,直到其他限制开始发挥作用。
另一个可能的中期解决方案使使用ZK-SNARKs来验证交易。ZK-SNARKs能够保证普通用户无需个人存储状态或是验证区块,即使他们仍然需要下载区块中的所有数据来抵御数据不可用攻击。另外,即使攻击者不能强行提交无效区块,但是如果运行一个共识节点的难度过高,依然会有协调审查攻击的风险。因此,ZK-SNARKs不能无限地提升节点能力,但是仍然能够对其进行大幅提升(或许是1-2个数量级)。一些区块链在layer1上探索该形式,以太坊则通过layer2协议(也叫ZKrollups)来获益,例如zksync,Loopring和Starknet。
分片之后又会如何?
分片从根本上解决了上述限制,因为它将区块链上包含的数据与单个节点需要处理和存储的数据解耦了。节点验证区块不是通过亲自下载和执行,而是使用先进的数学和密码学技术来间接验证区块。
因此,分片区块链可以安全地拥有非分片区块链无法实现的非常高水平的吞吐量。这确实需要大量的密码学技术来有效替代朴素完整验证,以拒绝无效区块,但这是可以做到的:该理论已经具备了基础,并且基于草案规范的概念验证已经在进行中。
以太坊计划采用二次方分片(quadraticsharding),其中总可扩展性受到以下事实的限制:节点必须能够同时处理单个分片和信标链,而信标链必须为每个分片执行一些固定的管理工作。如果分片太大,节点就不能再处理单个分片,如果分片太多,节点就不能再处理信标链。这两个约束的乘积构成了上限。
可以想象,通过三次方分片甚至指数分片,我们可以走得更远。在这样的设计中,数据可用性采样肯定会变得更加复杂,但这是可以实现的。但以太坊并没有超越二次方,原因在于,从交易分片到交易分片的分片所获得的额外可扩展性收益实际上无法在其他风险程度可接受的前提下实现。
那么这些风险是什么呢?
最低用户数量
可以想象,只要有一个用户愿意参与,非分片区块链就可以运行。但分片区块链并非如此:单个节点无法处理整条链,因此需要足够的节点以共同处理区块链。如果每个节点可以处理50TPS,而链可以处理10000TPS,那么链至少需要200个节点才能存续。如果链在任何时候都少于200个节点,那可能会出现节点无法再保持同步,或者节点停止检测无效区块,或者还可能会发生许多其他坏事,具体取决于节点软件的设置。
在实践中,由于需要冗余(包括数据可用性采样),安全的最低数量比简单的“链TPS除以节点TPS”高几倍,对于上面的例子,我们将其设置位1000个节点。
如果分片区块链的容量增加10倍,则最低用户数也增加10倍。现在大家可能会问:为什么我们不从较低的容量开始,当用户很多时再增加,因为这是我们的实际需要,用户数量回落再降低容量?
这里有几个问题:
区块链本身无法可靠地检测到其上有多少唯一用户,因此需要某种治理来检测和设置分片数量。对容量限制的治理很容易成为分裂和冲突的根源。
如果许多用户突然同时意外掉线怎么办?
增加启动分叉所需的最低用户数量,使得防御恶意控制更加艰难。
最低用户数为1,000,这几乎可以说是没问题的。另一方面,最低用户数设为100万,这肯定是不行。即使最低用户数为10,000也可以说开始变得有风险。因此,似乎很难证明超过几百个分片的分片区块链是合理的。
历史可检索性
用户真正珍视的区块链重要属性是永久性。当公司破产或是维护该生态系统不再产生利益时,存储在服务器上的数字资产将在10年内不再存在。而以太坊上的NFT是永久的。
是的,到2372年人们仍能够下载并查阅你的加密猫。
但是一旦区块链的容量过高,存储所有这些数据就会变得更加困难,直到某时出现巨大风险,某些历史数据最终将……没人存储。
要量化这种风险很容易。以区块链的数据容量(MB/sec)为单位,乘以~30得到每年存储的数据量(TB)。当前的分片计划的数据容量约为1.3MB/秒,因此约为40TB/年。如果增加10倍,则为400TB/年。如果我们不仅希望可以访问数据,而且是以一种便捷的方式,我们还需要元数据(例如解压缩汇总交易),因此每年达到4PB,或十年后达到40PB。InternetArchive(互联网档案馆)使用50PB。所以这可以说是分片区块链的安全大小上限。
因此,看起来在这两个维度上,以太坊分片设计实际上已经非常接近合理的最大安全值。常数可以增加一点,但不能增加太多。
结语
尝试扩容区块链的方法有两种:基础的技术改进和简单地提升参数。首先,提升参数听起来很有吸引力:如果您是在餐纸上进行数学运算,这就很容易让自己相信消费级笔记本电脑每秒可以处理数千笔交易,不需要ZK-SNARK、rollups或分片。不幸的是,有很多微妙的理由可以解释为什么这种方法是有根本缺陷的。
运行区块链节点的计算机无法使用100%的CPU来验证区块链;他们需要很大的安全边际来抵抗意外的DoS攻击,他们需要备用容量来执行诸如在内存池中处理交易之类的任务,并且用户不希望在计算机上运行节点的时候无法同时用于任何其他应用。带宽也会受限:10MB/s的连接并不意味着每秒可以处理10MB的区块!也许每12秒才能处理1-5MB的块。存储也是一样,提高运行节点的硬件要求并且限制专门的节点运行者并不是解决方案。对于去中心化的区块链而言,普通用户能够运行节点并形成一种文化,即运行节点是一种普遍行为,这一点至关重要。
区块链网络拥堵怎么办1
什么是网络拥堵
通常指的是一种网络故障现象:某办公局域网计算机使用一个带路由功能的ADSLModem+HUB共享上网。当同一时间上网人数较少的时候网络比较通畅,上网人数多了以后网络会时断时通,并且HUB的Collision指示灯会闪烁不停。
而在区块链的应用程序中,无论是数字货币、智能合约、去中心的交易系统等,它们的网络都是由一个个独立的节点组成的,发生在节点中的各种操作,比如转账交易、合约状态的变更等,都会以交易事务的数据形式广播到网络中,通过矿工打包到新的区块,作为主链的一部分而最终确认所有的这些操作。
当节点很多,使用量很多的时候,大量发生的交易就会来不及在正常期望的时间内被打包,因为它们都拥堵在网络中,这些等待的被确认的交易数据通常会维持在节点的内存池中。这个就是区块链的拥堵。
2
网络拥堵是怎么发生的
目前比特币区块大小为1M,每秒大约只能处理7个交易。随着交易量不断增长,比特币网络已经难以迅速地进行转账交易确认,区块链网络时常出现拥堵。
区块链网络上最高时有上万笔交易积压,某些转账交易手续费高达几十美元,网络拥堵时,交易甚至需要花费好几天才能被打包。
实际上对于每一类区块链应用来说,这个问题都是存在的,造成不断有用户抱怨交易延迟的问题,但也侧面证明了应用的广泛,以及用户体量的增加。
那么发生这些问题,我们应该怎么办呢?
3
网络拥堵怎么解决
解决的方法,无非有如下几种。
第一种扩容,提高处理能力。
第二种截流,限制区块链包的数量。
通过将上述两种方法进行综合。
悉尼大学研究者研发了一种新型的区块链系统,在100台机器中能够实现每秒44万笔交易的吞吐量,而Visa每秒的交易处理器是5.6万笔。相比之下,比特币每秒的交易限制在7笔,以太坊区块链则为20笔。
JadeChain公链系统上线后,将彻底解决JADE生态应用中的网络拥堵问题。
『肆』 ETH以太坊核心开发者会议第92期,会议讲了哪些主要内容
ETH以太坊核心开发者会议主要内容大致如下:凯特·赫德逐渐协助开展一些调研,并将调研的连接贴上,表明了调研的内容。他表明期待根据调研得到一些数据信息。比如,在调查问卷中提及,假如必须别的远程服务器,客户最期待挑选哪一个。数据信息意见反馈说明Besu是最好是的备用胎。但在她们传出调查研究报告以前,她们还不上一个星期,她们期待获得大量的数据信息。
阿莱克西号召大量人参加进去,以掌握大家如今评定难题的方式是不是不善。提姆提了个小提议。他知道大家有一个交换目录,还有一个挖矿软件,这些,他提议大伙儿能够把这个文件目录访问 一遍,看一下用是多少占比。普贾说早已拥有这一明细,已经考虑到当中。乔治愿意现阶段的评价方法,并提议能够应用公布在EthDiscovery上的ENR数据信息。此数据信息是以前网络爬虫信息内容获得的,包含ENR安装的手机客户端总数,ENR中是不是有ENR实际手机客户端信息内容这些。阿莱克西觉得,他更趋向于手工制作方式。他觉得自动化技术调节能够得到数据信息,但没法告诉你某一连接点的必要性。针对某一连接点的必要性,及其一旦该连接点不成功或发生的共识无效的难题,大家并不清楚它将产生多少的冲击性。有多少连接点不可以工作中,我们可以了解,可是不清楚它将造成哪些结果。乔治问Peter是不是了解ENR信息内容是功能完善的或是轻形远程服务器的。皮特觉得,这类必须分状况不可以一概而论。
阿莱克西注重,在开展调研时,大家还务必重视客户的私人信息,这一方面很重要,另一方面也是为了更好地防止客户因担忧隐私保护而不可以精确解答问题。普贾说,如今全部的信息内容都存有excel表,她们不容易与群众共享资源。在考虑到私人信息的状况下,一些难题被设计方案为可挑选的。阿莱克西问隐私保护数据泄露的不良影响是啥,马库斯莫里斯回应说,如果有挖矿共享资源硬件配置机器设备信息内容,就很有可能造成 DDoS对于她们的进攻,尤其是应用别的顾客的竞争者。他感觉这并不一定会产生,它是很有可能的。
ETH以太坊核心开发者会议第92期,会议讲了哪些主要内容?
有关调研数据信息,Alexey明确提出的另一个难题是,是不是能够按时发布调查报告,例如每月发布一次?因为他了解到一些作业者一直把Geth视作流行,从来没有想过要更改以往。倘若我们可以根据数据信息的展现告知她们,事实上大家应当做些哪些来改进现况。他们还能够从商业服务层面,及其他们可否项目投资是多少以改进这一管理体系的水平上开展评定,并从这当中获利。只愿过去了好多个月,大家会见到新数据的一些转变。胡德森完全同意。
杰姆斯不同意,他觉得从他自己的工作经验看来,他感觉难以从连接点营运商那边得到恰当的信息内容。即便大家获得了恰当的数据信息,要更改连接点那里的情况也十分艰难。阿莱克西觉得,如今没人来融洽全部系统软件,每一个人都从自身的视角或从本身运营模式的利润最大化视角来考虑到难题。蒂姆明确提出了一个见解,即如果我们必须使顾客多元化,大家应当根据调研找到想要应用不一样顾客客户或连接点营运商的相同点,随后小结出这种相同点并不断发展。
阿莱克西说,假如对调研和调研数据信息没有一切附加的建议,他还想再提一个难题。最初,当他想起这个问题时,他觉得凯特·赫德斯能帮上忙。在他来看,这些人手上都是有一张有关工作人员的名册,选用采访并非调研的方式,比如电话调研,那样能够更迅速、更合理地掌握每一个人的念头。蒂姆表明,它是对调研的一个非常好的填补。阿莱克西再次说,假如大家都愿意调研的方式,那麼就必须一位助理员来保证 大伙儿的观念一致,另外还要保证 生态链的每一个角落里都能获得恰当的信息内容。
ETH以太坊核心开发者会议第92期,会议讲了哪些主要内容?
维塔利克说,事实上这里有2个难题,一个是短期内的难题,谁在进攻互联网,一个是长期性的难题,互联网的经营规模在不断发展。皮特他抵制把gas限定提升 。假如让互联网再次扩大得话,可能引起比较严重的难题。依据上一次苏州地区黑客攻击的工作经验,网络攻击是先让互联网澎涨,让以太坊互联网不断发展,随后根据各种各样方法进攻连接点。在那个时候,有二种解决方法,一种是推升成本费,让网络攻击没法压力让互联网澎涨提升的成本费,另一种是立即删掉提升的一部分网络语言暴力。倘若大家如今决策提升gas极限,那麼互联网的经营规模可能渐渐地提升,假如提升到一个风险的极限情况,大家将删不掉任何东西,大家将束手无策。大家确实必须因此忧虑一下。在同歩角上也会发生难题。当互联网尺寸翻倍时,系统软件同歩需要的时间将提升大量,并非同歩翻倍。詹姆士问皮特,是不是有一些解决方法非常值得考虑到?
阿莱克西表明,如今得出一个详细的解决方法很有可能过早了,并且现阶段都还没充足的时间来全方位考虑到一切解决方法的提议。实际上,上一次大会上,他说道有一点小矛盾,一些人觉得写一个详细的以太坊手机客户端是很艰难的,因而大家明确提出why。然后,纪录了四个回答。其一是协议书过度繁杂,无法将编码分层次模块化设计。可是Alexey却觉得,实际上,大家并没有在一开始就设计方案好编码。如今的手机软件模块化设计干了许多工作中,那样就非常容易完成不一样的人维护保养不一样的手机软件控制模块。但他猜疑是不是每一个人都是有那样的念头,都想要那么做,是不是有那麼多的人想要资金投入这么多资源,或是要直到Eth2.0?
皮特表述说,的确有很多人觉得Eth2.0是一种解决方法,但他要想回应的是,Eth2.0的确提升 了货运量,但并没有解决困难,因此Eth2.0并不是解决方法,它仅仅增加了难题的曝露时间。Alexey表明,他的聚焦点没有技术性,而在构架和机构。可否创建一个软件体系结构精英团队,该精英团队是不是可以在Eth2.0精英团队中开始工作。如果没有得话,Eth2.0是否会丧失模块化设计手机软件的机遇?皮特说Eth2.0。
#数字货币# #比特币[超话]#
『伍』 如何显示挖矿的成果
这个链接。如果你在本地启动了Geth客户端的话,页面会显示出如下信息:
在Balance(ethers)的下面就能看到账户的余额。单位是以太。
2.在命令行执行,geth console.启动以太坊的控制终端。
在出现">"提示符后,输入web3.fromWei(eth.getBalance(eth.coinbase), "ether")后,按回车确定。
就会显示出帐号的余额。单位是以太。
『陆』 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消息
『柒』 eth涓嶈繘鐭挎睜鎬庝箞鏍锋寲
eth涓嶈繘鐭挎睜鎬庝箞鎸栫熆
瑕佹兂鍦ㄤ笉鍔犲叆鐭挎睜鐨勬儏鍐典笅鎸朎TH锛屾偍闇瑕佹寜鐓т互涓嬫ラよ繘琛屾搷浣滐細
鑾峰彇浠ュお鍧婇挶鍖咃細鎮ㄩ渶瑕佸畨瑁呬互澶鍧婇挶鍖咃紝渚嬪侴eth銆丳arity鎴朚yEtherWallet銆傝繖灏嗕负鎮ㄦ彁渚涗竴涓浠ュお鍧婂湴鍧锛岀敤浜庢帴鏀舵寲鍒扮殑ETH銆
鑾峰彇浠ュお鍧婃寲鐭胯蒋浠讹細鎮ㄩ渶瑕侀夋嫨涓绉嶄互澶鍧婃寲鐭胯蒋浠讹紝渚嬪侰laymore銆丳hoenix鎴朑miner銆傝繖浜涜蒋浠跺皢浼氬府鍔╂偍璁$畻浠ュお鍧婂搱甯岀巼锛屽苟灏嗗叾鍙戦佺粰浠ュお鍧婄綉缁溿
杩炴帴浠ュお鍧婄綉缁滐細鍦ㄥ惎鍔ㄤ互澶鍧婃寲鐭胯蒋浠朵箣鍓嶏紝鎮ㄩ渶瑕佸皢鍏惰繛鎺ュ埌浠ュお鍧婄綉缁溿傚傛灉鎮ㄦe湪浣跨敤浠ュお鍧婁富缃戯紝璇峰皢浠ュお鍧婃寲鐭胯蒋浠惰繛鎺ュ埌浠ュお鍧婁富缃戣妭鐐广
閰嶇疆浠ュお鍧婃寲鐭胯蒋浠讹細鎮ㄩ渶瑕佽剧疆浠ュお鍧婃寲鐭胯蒋浠朵互渚胯╁叾鐭ラ亾鎮ㄧ殑浠ュお鍧婂湴鍧锛屼互渚垮皢鎸栧埌鐨凟TH鍙戦佸埌璇ュ湴鍧銆傛偍杩橀渶瑕侀夋嫨瑕佷娇鐢ㄧ殑鎸栫熆姹犳垨鑰呬娇鐢ㄧ嫭绔嬫寲鐭匡紝杩欏彇鍐充簬鎮ㄧ殑鍋忓ソ銆
寮濮嬫寲鐭匡細涓鏃︽偍宸茬粡瀹屾垚涓婅堪姝ラわ紝鎮ㄥ彲浠ュ紑濮嬫寲鐭夸簡銆傛偍鐨勪互澶鍧婃寲鐭胯蒋浠跺皢浼氬紑濮嬭$畻浠ュお鍧婂搱甯岀巼锛屽苟鍚戜互澶鍧婄綉缁滃彂閫佽繖浜涗俊鎭銆
闇瑕佹敞鎰忕殑鏄锛屽湪涓嶅姞鍏ョ熆姹犵殑鎯呭喌涓嬶紝鎮ㄩ渶瑕佹嫢鏈夋洿寮哄ぇ鐨勮$畻鏈烘墠鑳芥寲鍒颁互澶鍧娿傛寲鐭块渶瑕佸ぇ閲忕殑璁$畻璧勬簮锛屽苟涓斾細瀵规偍鐨勭數鑴戜骇鐢熷緢澶х殑鍘嬪姏锛屾墍浠ユ偍闇瑕佺‘淇濇偍鐨勭數鑴戝彲浠ユ壙鍙楄繖浜涜礋鎷呫
『捌』 Geth 控制台使用及 Web3.js 使用
在以太坊的DAPP开发中,需要 页面开发 和 智能合约 开发,页面开发需要 H5 , 智能合约 开发用 Solidity 实现。页面和以太坊智能合约交互,就需要使用 Web3.js 。
Geth 控制台(REPL)实现了所有的 web3 API 及 Admin API ,如果你对Geth命令行不太熟悉,请参考之前的文章。
以太坊客户端Geth常用命令详解
重定向日志到文件
使用geth console启动时,会在当前的交互界面下时不时出现日志。
可以使用以下方式把日志输出到文件。
可以新开一个命令行终端输入以下命令查看日志:
重定向另一个终端
也可以把日志重定向到另一个终端,先在想要看日志的终端输入:
就可以获取到终端编号,如:/dev/test
然后另一个终端使用:
启动geth, 这是日志就输出到另一个终端。
如果不想看到日志还可以重定向到空终端:
日志级别控制
使用–verbosity可以控制日志级别,如不想看到日志还可以使用:
另外一个启动geth的方法是连接到一个geth节点:
『玖』 以太坊转pos对挖矿给有影响
如果完全转成pos,挖矿就GG了,在产生新币不再是贡献算力争夺记账权了,完全变成持有eth的派息了!