主页 > imtoken苹果手机不能下载 > 以太坊源码解析(四)——以太坊总体架构与核心概念

以太坊源码解析(四)——以太坊总体架构与核心概念

imtoken苹果手机不能下载 2023-03-11 06:54:03

以太坊目标

以太坊的目标是创建一个去中心化的平台,用于运行基于区块链技术的智能合约。

以太坊核心概念

在这里插入图片描述

EVM

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

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

存储、内存

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

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

帐户

外部账户:存储以太币,由公私钥对控制,其地址由公钥确定,没有代码,可以通过创建和签署交易从外部账户发送消息。

合约账户:主要存储执行的合约代码,由账户中存储的代码控制。 每当合约账户收到消息时,合约内部的代码就会被激活,允许其读取/写入/发送内部存储。 消息并创建合同。

交易

一笔交易是指从外部账户发送过来的一个签名数据包,包括交易接收方、用于确认发送方的签名、交易金额、要发送的数据、GasLimit、GasPrice。 GasLimit 通过需要支付的燃料来限制计算步数,防止合约代码出现指数级爆炸和死循环。

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

气体

以太坊钱包imtoken下载链接_以太坊开源代码链接_以太坊钱包下载链接

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

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

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

指令系统

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

P2P网络

以太坊分布式网络中的所有节点都是平等的,没有中央服务器。

日志

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

以太坊上的世界状况

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

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

矿业

以太坊网络使用工作量证明算法来保证网络的安全运行。

共识算法的两种实现

以太坊开源代码链接_以太坊钱包下载链接_以太坊钱包imtoken下载链接

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

1. Ethash算法(POW):基础算力,目前是以太坊基于POW工作量证明的共识引擎(也叫挖矿算法)。

2. Clique算法(POS):基于“对等”认证,网络中的每个区块都由某个认证节点进行认证,其他节点只需验证认证信息即可判断该区块是否合法。

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

以太坊模型

以太坊的本质是一个基于交易的状态机。 以太坊状态下有数百万笔交易。

这些交易被打包成一个区块,每个区块都与前一个区块相连,形成一个反向链表,所以称为区块链。 在区块链的基础上,加入智能合约,创建以太坊。

一笔交易要被认为有效,必须经过一个验证过程,即挖矿(Mine)。 以太坊网络上的任何矿工都可以尝试创建和验证区块。 如果一个区块被认为是有效的并且最快完成验证,它将被添加到主链,即以太坊网络。 最长的链条。 如果多个矿工同时打包一个区块,区块在网络中传播需要一定的时间,难免会产生多条路径,也就是所谓的分叉。

为了防止产生多条链,以太坊使用了GHOST协议(Greedy Heaviest Observed Subtree)以太坊开源代码链接,即选择一条完成最多计算的路径。 区块号越大,路径越长,说明挖矿消耗的算力越多。 许多。

因为成功确认一个新区块会得到一定数量的以太坊作为奖励,所以从经济学和博弈论的角度来看,选择主链是最优的。

以太坊的架构

以太坊的架构设计可以简单分为三层,协议层、接口层和应用层。 协议层可分为网络层和存储层。

从技术角度看,协议层主要包括P2P网络通信、分布式算法、加密签名和数据存储技术。 在数据存储的底层,比特币和以太坊都使用谷歌开源的LevelDB数据库。

接口层与协议层完全分离,除交易时与协议层交互外,保证基于区块链的各种应用层服务的开发不受限制,包括分布式存储服务、机器学习、物联网等事物。

应用层主要从区块链本身的特性出发,在不引用第三方机构的情况下,提供去中心化、不可篡改、安全可靠的场景应用。 主要包括金融服务、征信与所有权管理、资源共享、投资管理、物联网与供应链等。

以太坊钱包imtoken下载链接_以太坊开源代码链接_以太坊钱包下载链接

以太坊核心数据结构 区块(Block)是以太坊的核心数据结构之一。 Block由两部分组成,Header和Body。 Blockchain 和 HeaderChain,Blockchain 管理着所有的 Block,并使它们形成一个单向链表。 Headerchain管理所有的Headers,形成一个单向链表。 Headerchain 是区块链的一部分。 Transaction是Body的一个重要数据结构。 交易是由外部账户加密签名,序列化,然后提交到区块链的指令。 以太坊的数据库系统——Merkle-Patricia Trie (MPT),它是由一系列节点组成的二叉树,树的底部包含大量源数据的叶子节点,父节点是两个子节点,一直到根节点。 go ethereum源码目录结构

accounts        	实现了一个高等级的以太坊账户管理
bmt			二进制的默克尔树的实现
build			主要是编译和构建的一些脚本和配置
cmd			命令行工具,又分了很多的命令行工具,下面一个一个介绍
	/abigen		Source code generator to convert Ethereum contract definitions into easy to use, compile-time type-safe Go packages
	/bootnode	启动一个仅仅实现网络发现的节点
	/evm		以太坊虚拟机的开发工具, 用来提供一个可配置的,受隔离的代码调试环境
	/faucet		
	/geth		以太坊命令行客户端,最重要的一个工具
	/p2psim		提供了一个工具来模拟http的API
	/puppeth	创建一个新的以太坊网络的向导
	/rlpdump 	提供了一个RLP数据的格式化输出
	/swarm		swarm网络的接入点
	/util		提供了一些公共的工具

以太坊开源代码链接_以太坊钱包imtoken下载链接_以太坊钱包下载链接

/wnode 这是一个简单的Whisper节点。 它可以用作独立的引导节点。此外,可以用于不同的测试和诊断目的。 common 提供了一些公共的工具类 compression Package rle implements the run-length encoding used for Ethereum data. consensus 提供了以太坊的一些共识算法,比如ethhash, clique(proof-of-authority) console console类 contracts core 以太坊的核心数据结构和算法(虚拟机,状态,区块链,布隆过滤器) crypto 加密和hash算法, eth 实现了以太坊的协议 ethclient 提供了以太坊的RPC客户端 ethdb eth的数据库(包括实际使用的leveldb和供测试使用的内存数据库) ethstats 提供网络状态的报告 event 处理实时的事件 les 实现了以太坊的轻量级协议子集 light 实现为以太坊轻量级客户端提供按需检索的功能

以太坊钱包下载链接_以太坊开源代码链接_以太坊钱包imtoken下载链接

log 提供对人机都友好的日志信息 metrics 提供磁盘计数器 miner 提供以太坊的区块创建和挖矿 mobile 移动端使用的一些warpper node 以太坊的多种类型的节点 p2p 以太坊p2p网络协议 rlp 以太坊序列化处理 rpc 远程方法调用 swarm swarm网络处理 tests 测试 trie 以太坊重要的数据结构Package trie implements Merkle Patricia Tries. whisper 提供了whisper节点的协议。

参考:

去以太坊代码分析

以太坊源码分析(一)go-ethereum的设计思路和模块组织

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

以太坊网络架构分析