主页 > imtoken硬件钱包安全吗 > 以太坊源码解读(一)以太坊的概念

以太坊源码解读(一)以太坊的概念

imtoken硬件钱包安全吗 2023-08-16 05:07:24

以太坊源码解读(一)以太坊的概念 一、定义

以太坊是一个具有智能合约功能的开源公共区块链平台。

以太坊的特点二、以太坊的发展阶段

以太坊完整的发展路线分为四个阶段,阶段之间的切换需要通过硬分叉来实现,即:

目前,以太坊正处于“大都市”的第三阶段。 这一阶段主要有四个特点,即零知识证明的实施、权益证明的早期实施、更加灵活稳定的智能合约、抽象账户的应用。 由于这些功能不会一次性推出,而是分两个阶段推出,这两个阶段就是两个硬分叉,分别命名为“拜占庭”和“君士坦丁堡”。 也就是说,以太坊目前处于“拜占庭式”硬分叉阶段。

这里有一个概念叫做“难度炸弹”。 “难度炸弹”可以说从以太坊的设计之初就已经确定了,因为以太坊从一开始的目标就是通过POW建立生态,并在“安静”阶段完全切换到POS模式以减少挖矿费用。 硬件相关。 这样的改变势必会遭到前期花费大量投资购买矿机设备的矿工的抵制。 为了防止这些矿工接受新规则而造成硬分叉,以太坊设计者在计算区块难度时加入了参数“难度炸弹”。 难度炸弹是指在计算难度时,除了根据出块时间和前一个区块的难度进行调整外,还增加了一个每100,000个区块呈指数增长的难度系数。

三、核心概念

sitebishijie.com 基于以太坊发币_以太坊基于pow算法叫_以太坊年底结束pow挖矿

EVM

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

EVM 不是基于寄存器的,而是基于堆栈的虚拟机。 因此所有的计算都在一个称为堆栈的区域中进行。 堆栈最多有1024个元素,每个元素256位。 对栈的访问仅限于栈顶,不可能只访问栈上指定深度的元素。 在此之前,必须从堆栈中删除指定深度以上的所有元素。 当然,你可以把栈上的元素放到storage或者memory中。

存储、内存

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

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

帐户

外部账户:由公钥-私钥对控制,其地址由公钥确定,无需代码以太坊基于pow算法叫,通过创建和签署交易可以从外部账户发送消息。

合约账户:由账户中存储的代码控制,每当合约账户收到消息时,合约内部的代码将被激活以太坊基于pow算法叫,允许其读取/写入/发送其他消息到内部存储并创建合约。

贸易

一笔交易是指从外部账户发送过来的一个签名数据包,包括交易接收方、用于确认发送方的签名、交易金额、要发送的数据、GasLimit、GasPrice。

GasLimit 通过需要支付的燃料来限制计算步数,防止合约代码出现指数级爆炸和死循环。

当交易的目标账户是合约账户时,合约账户中的代码将与交易中的数据(payload)一起执行。

如果交易的目标账户是零账户,则意味着要创建合约。 交易的有效负载是合约代码的 ABI。 ABI作为EVM字节码执行,真正的合约代码输出永久保存。 这个过程称为“部署合约”。

留言电话

合约可以通过消息调用调用其他合约,或者发送以太币给非合约账户。 消息调用与交易非常相似,它们都有消息源、目的地、数据负载、以太币、gas 和返回数据。

事实上,每个交易都可以被认为是一个顶级的消息调用,它又会产生更多的消息调用。 呼叫级别数限制为 1024。

气体

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

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

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

指令系统

EVM支持的指令编码,EVM的所有指令都运行在256位的基本数据单元上。 此外,合约可以访问当前区块的相关属性,例如它的编号和时间戳。

日志

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

以太坊上的世界状况

包括每个账户的余额、合约代码、账户存储、Nounce值。

以太坊的状态转换是指以太坊在一笔交易发生时,从一个正确的状态S到下一个正确的状态S'的转换过程。

共识算法的两种实现

以太坊共识算法暴露的接口是Engine接口。 共识算法由两个实现组成:

换句话说,以太坊的共识算法是系统提供的接口,只要实现了共识算法,就可以进行插拔和引用。 Ethash 和 Clique 都是 Engine 接口的两个实现。

下一节:以太坊源码解读(二)Geth目录结构以太坊源码分析

Geth是以太坊官方唯一推荐的客户端,相当于以太坊区块链的官方实现。 源码地址为: 下面我们从Geth源码的目录来看...