主页 > imtokenapp下载安装 > 遍历以太坊节点 CSDN博客

遍历以太坊节点 CSDN博客

imtokenapp下载安装 2023-04-28 06:07:51

什么是以太坊?

以太坊是一个全新的开放区块链平台,允许任何人构建和使用在区块链技术上运行的去中心化应用程序。 与比特币一样,以太坊不受任何人控制或拥有——它是一个由世界各地许多人创建的开源项目。 与比特币协议不同遍历以太坊节点,以太坊的设计具有灵活性和适应性。 在以太坊平台上创建新的应用程序非常容易,随着 Homestead 的发布,任何人都可以安全地使用平台上的应用程序。

下一代区块链

区块链技术是比特币的底层技术,最早在中本聪2008年发表的白皮书《比特币:一种点对点的电子现金系统》中有所描述。原书中讨论了区块链技术的更多一般用途,但直到几年后,区块链技术才作为一个通用术语出现。 区块链是一种分布式计算架构,其中每个网络节点执行并记录相同的交易,并将交易分组为块。 一次只能添加一个块,每个块都有数学证明,以确保新块与前一个块保持顺序。 这样,区块链的“分布式数据库”就可以与全网保持一致。 个人用户与分类帐的交互(交易)受到安全密码保护。 由数学强制执行并编码到协议中的经济激励措施激励节点维护和验证网络。

在比特币中,分布式数据库被设想为一个账户余额表,一个总账,交易是比特币的转移,实现个体之间无需信任的金融活动。 但随着比特币吸引了更多开发人员和技术人员的注意,新项目开始将比特币网络用于转移有价值的代币以外的目的。 其中许多采用“令牌”的形式——建立在原始比特币协议的基础上,添加了新的特性或功能,为各自的加密货币使用单独的区块链。 2013 年底,以太坊发明者 Vitalik Buterin 建议,能够重新编程以执行任意复杂操作的单个区块链应该包含其他程序。

2014年,以太坊创始人Vitalik Buterin、Gavin Wood和Jeffrey Wilcke开始研究新一代区块链,试图实现一个不需要一般信任基础的智能合约平台。

以太坊虚拟机

以太坊是一个可编程的区块链。 它不给用户一系列预先设定的操作(如比特币交易),而是允许用户根据自己的意愿创建复杂的操作。 因此,它可以作为多种类型的去中心化区块链应用程序的平台,包括但不限于加密货币。

以太坊狭义地指一组为去中心化应用程序定义平台的协议。 其核心是以太坊虚拟机(“EVM”),它可以执行任意复杂算法的编码。 用计算机科学术语来说,以太坊是“图灵完备”的。 开发者可以使用 JavaScript 和 Python 等其他友好的编程语言作为模型来创建运行在以太坊模拟器上的应用程序。

与其他区块链一样,以太坊具有点对点网络协议。 以太坊区块链数据库由连接到网络的众多节点维护和更新。 每个网络节点都运行一个以太坊模拟器并执行相同的指令。 因此,人们有时形象地将以太坊称为“世界计算机”。

这种跨越整个以太坊网络的大规模并行计算并不是为了提高计算效率而设计的。 实际上,这个过程使得以太坊上的计算比传统“计算机”上的计算更慢、成本更高。 但是,每个以太坊节点都运行以太坊虚拟机,以保持整个区块链的一致性。 去中心化共识使以太坊具有极高的容错性,保证零停机时间,并允许存储在区块链上的数据保持不变和抗审查。

以太坊节点服务器搭建_以太坊和以太币有什么区别_遍历以太坊节点

以太坊平台本身没有特点,没有价值。 与编程语言一样,由企业家和开发人员决定使用什么。 然而遍历以太坊节点,很明显,某些应用程序类型比其他应用程序类型从以太坊的功能中受益更多。 以太坊特别适用于自动化对等点之间的直接交互或促进跨网络的组协调活动的应用程序。 例如,协调点对点市场的应用程序,或复杂金融合同的自动化。 比特币使个人能够在不求助于金融机构、银行或政府等其他中介机构的情况下进行货币兑换。 以太坊的影响可能更为深远。 理论上,任何复杂的金融活动或交易都可以在以太坊上自动可靠地编码。 除了金融应用,任何对信任、安全、持久化要求高的应用场景——如资产登记、投票、管理、物联网等——都会受到以太坊平台的大规模影响。

以太坊如何运作?

以太坊融合了很多比特币用户熟悉的特性和技术,同时也对自己进行了很多修正和创新。 比特币区块链纯粹是一个交易列表,而以太坊的基本单位是账户。 以太坊区块链跟踪每个账户的状态,以太坊区块链上的所有状态转换都是账户之间价值和信息的转移。 账户分为两类:

外部账户 (EOA),由私人密码控制

合约账户,由合约代码控制,只能被外部账户“激活”

对于大多数用户来说,两者的基本区别在于外部账户是由人类用户控制的——因为他们可以控制私钥,从而控制外部账户。 合约账户由内部代码控制。 如果它们被人类用户“控制”,那是因为它们被编程为由具有特定地址的外部帐户控制,而该地址又由持有私钥的人控制以控制外部帐户。 流行的术语“智能合约”是指合约账户中的代码——当交易被发送到该账户时运行的程序。 用户可以通过在区块链中部署代码来创建新的合约。

只有当外部账户发出指令时,合约账户才会执行相应的操作。 因此,合约账户不可能自发地执行任意数字生成或 API 调用等操作——它只会在外部账户提示时才会做这些事情。 这是因为以太坊要求节点与运行结果一致,这就需要严格的确定性执行。

与比特币一样,以太坊用户必须向网络支付少量交易费用。 这使以太坊区块链免受无害或恶意计算任务的影响,例如分布式拒绝服务 (DDoS) 攻击或无限循环。 交易的发送方必须在激活的“程序”的每一步进行支付,包括计算和内存存储。 费用以以太坊自己的价值代币 Ether 支付。

交易费用由节点收取,使网络生效。 这些“矿工”是以太坊网络中收集、传播、确认和执行交易的节点。 矿工将交易——包括对以太坊区块链中账户“状态”的更新——分组为称为“块”的组,矿工相互竞争将他们的块添加到下一个块中。 在区块链上。 矿工每挖出一个成功的区块都会获得以太币奖励。 这为人们向以太坊网络贡献硬件和电力创造了经济激励。

以太坊和以太币有什么区别_遍历以太坊节点_以太坊节点服务器搭建

与比特币网络一样,矿工的任务是解决复杂的数学问题,以便成功“挖掘”区块。 这称为“工作量证明”。 与验证解决方案相比,需要更多资源来解决算法问题的计算问题是工作量证明的绝佳候选者。 为了防止比特币网络中已经出现的专用硬件(如专用集成电路)造成的中心化,以太坊选择解决难以存储的计算问题。 如果题目需要内存和CPU,其实理想的硬件就是一台普通电脑。 这使得以太坊的工作量证明反 ASIC,这可以导致比比特币更分散的安全分布,比特币是一种由专用硬件控制挖矿的区块链。

以太坊核心概念

以太坊虚拟机 (EVM)

以太坊虚拟机 (EVM) 是以太坊中智能合约的运行时环境。 它不仅是沙盒化的,而且实际上是完全隔离的,这意味着在 EVM 内运行的代码无法接触网络、文件系统或其他进程。 智能合约之间甚至还有有限的调用。

帐户

以太坊中有两种类型的账户,它们共享相同的地址空间。 外部账户,由公私密钥对控制。 合约账户,此类账户由账户中存储的代码控制。 外部账户的地址由公钥确定,而合约账户的地址是在创建合约时确定的(这个地址是根据合约创建者的地址和该地址发送的交易数量计算的,以及该地址发送的交易数量也由所谓的“随机数”决定)

两种账户的唯一区别是合约账户存储代码,而外部账户不存储代码。

每个账户都有一个键值对形式的持久化存储。 key和value的长度都是256bit。

此外,每个账户都有一个以太币余额(以“Wei”为单位),可以通过向其发送以太币交易来更改。

以太坊节点服务器搭建_以太坊和以太币有什么区别_遍历以太坊节点

交易

交易是一条消息,从一个帐户发送到另一个帐户。 交易可以包含二进制数据(有效载荷)和以太币。

如果目标帐户包含代码,则将执行该代码和输入数据。

如果目标账户是零账户(账户地址为0),交易将创建一个新合约。 上面说了,这个合约地址不是零地址,而是根据合约创建者的地址和这个地址发送的交易数量计算出来的。 合约创建交易的有效负载作为 EVM 字节码执行。 执行的输出作为合约代码永久存储。 这意味着,为了创建合约,您不需要向合约发送真实的合约代码,而是发送返回真实代码的代码。

气体

以太坊上的每笔交易都会收取一定数量的天然气。 gas 的目的是在支付执行费用的同时限制执行交易所需的工作量。 当EVM执行一笔交易时,gas会按照一定的规则逐渐消耗。

gas price(gas price, in Ether)由交易创建者设定,发送账户需要预付交易费=gas price * gas amount。 如果执行后还有gas剩余,gas会返还给发送账户。

无论在哪里执行,一旦gas耗尽(比如下降到负值),都会触发out-of-gas异常。 当前调用框架所做的所有状态修改都将回滚。

存储、内存和堆栈

以太坊节点服务器搭建_以太坊和以太币有什么区别_遍历以太坊节点

每个帐户都有一个称为存储的持久内存区域。 它的格式是key-value,key和value的长度都是256位。 在合约中,无法遍历账户的存储。 与其他两者相比,存储读取操作的开销相对较大,而修改存储的开销更大。 合约只能读写自己的存储。

第二个内存区域称为主内存。 每次合约执行消息调用时,都会有一个新的、清理过的主内存。 主存可以按字节粒度寻址,但读写粒度为32字节(256位)。 操作主内存的开销随着它的增长而增长(平方尺度)。

EVM 不是基于寄存器的,而是基于堆栈的虚拟机。 因此所有的计算都在一个称为堆栈的区域中进行。 堆栈最多有1024个元素,每个元素256位。 通过允许将顶部 16 个元素之一复制到堆栈顶部,或将堆栈的顶部元素与以下 16 个元素之一交换,对堆栈的访问仅限于其顶部。 所有其他操作只能取栈顶的两个(或一个,或多个,取决于具体操作)元素并将结果压入栈顶。 当然,你可以把栈上的元素放入存储器或主存中。 但是不可能只访问栈上指定深度的元素。 在此之前,必须从堆栈中删除指定深度以上的所有元素。

指令集(Instruction Set)

EVM 的指令集有意保持在最小尺寸,以尽可能避免可能导致共识问题的不正确实现。 所有指令都对 256 位的基本数据类型进行操作。 具有常用的算术、位、逻辑和比较运算。 也可以进行有条件和无条件的跳转。 此外,合约可以访问当前区块的相关属性,例如它的编号和时间戳。

留言来电

合约可以通过消息调用调用其他合约或发送以太币给非合约账户。 消息调用与交易非常相似,它们都有源、目的地、数据有效负载、以太币、gas 和返回数据。 实际上,每笔交易都可以看作是一次顶层的消息调用,进而产生更多的消息调用。

一份合约可以决定剩余gas的分配。 例如内部消息调用使用了多少gas,或者预留了多少gas。 如果在内部消息调用期间发生 out-of-gas 异常(或其他异常),将通知合约并将错误代码压入堆栈。 这种情况只是内部消息调用的gas耗尽。 在 solidity 中,这种情况下的调用合约默认会触发人为异常。 此异常将打印出调用堆栈。

如前所述,被调用合约(以及调用合约)将拥有新的主内存并可以访问调用有效负载。 呼叫有效载荷存储在称为呼叫数据的单独区域中。 调用执行后,返回的数据会存放在调用者预先分配的一块内存中。

以太坊和以太币有什么区别_遍历以太坊节点_以太坊节点服务器搭建

调用层数限制为1024,所以对于更复杂的操作,我们应该使用循环而不是递归。

代码调用和库(Delegatecall / Callcode and Libraries)

有一种特殊类型的消息调用称为调用代码。 它与消息调用几乎完全相同,只是从目标地址加载的代码将在调用合约的上下文中运行。

这意味着合约可以在运行时从另一个地址动态加载代码。 存储、当前地址和余额都指向调用合约,只有代码是从被调用地址中获取的。

这允许 Solidity 实现“库”。 可重用的库代码可以应用于合约的存储,可以用来实现复杂的数据结构。

日志

在块级别,可以使用特殊的可索引数据结构来存储数据。 此功能称为日志记录,Solidity 使用它来实现事件。 合约创建后,无法访问日志数据,但可以从区块链外部高效访问数据。 因为部分日志数据存储在布隆过滤器中,我们可以高效安全地搜索日志,所以那些没有下载整个区块链的网络节点(轻客户端)也可以找到这些日志。

创建

合约甚至可以通过特殊命令创建其他合约(而不是简单地调用零地址)。 创建合约的调用与普通消息调用的区别在于,payload 数据执行的结果被视为代码,调用者/创建者在堆栈上获得新合约的地址。

自我毁灭

只有当某个地址的合约自毁时,合约代码才会从区块链中移除。 合约地址上剩余的以太币被发送到指定的目的地,然后它的存储和代码被移除。 请注意,即使合约的代码不包含自毁指令,仍然可以通过调用代码执行此操作。