主页 > imtoken网页版 > 以太坊区块链的结构是什么

以太坊区块链的结构是什么

imtoken网页版 2023-09-25 05:12:42

描述

在上一节中,我们带你深入了解区块链架构的全貌。相信大家对区块链的运行机制和原理有了更深入的了解。在本文中,我们将继续上一篇文章介绍区块链2.0 以太坊——Vitalik 如何升级和改变中本聪设计的比特币架构。《链式架构图》带你全面了解以太坊的运行原理!

区块链 2.0 由 Vitalik Buterin 设计 - 以太坊

以太坊区块链如何工作

以太坊虚拟机(EVM — 以太坊虚拟机)

在介绍以太坊区块链架构之前,我们必须先介绍一下“EVM”。EVM是以太坊创建的一个计算引擎,让每个人都可以成为一个节点。由于每个节点的软硬件环境可能不同,为了保证每次节能都可以执行相同的操作,每个节点通过EVM执行以太坊交易的状态转移和智能合约以太坊区块0交易块,保证每个节点可以执行相同的操作手术。具有相同的执行环境。

前言之后,我们来仔细看看:

以太坊交易的生命周期

与比特币的 UTXO 不同,以太坊采用 Account 的结构。

由于以太坊的智能合约设置较多,所以将分AB、C三个部分进行讲解。

让我们从最简单的 Ether 转账交易开始:

A. 简单的以太币转账交易

“简单的以太转账交易”图

1. 用户 (EOA) 想要发起交易。

2. 通过钱包输入交易信息(私钥管理工具)

To:对方的收货地址;

金额:要转移的以太币数量;

以太坊区块0交易块

Gas Price:以Gas为单位的手续费;(见第 5 节)

Gas Limit:普通以太转账交易为21,000 Gas,不需要动;

输入数据:取决于您是否要在交易中留下短信。

3. 使用私钥签署交易。

4. 向相邻的以太坊节点广播“签名交易包”。

5. 当一个节点收到一笔新的交易时,它首先会去状态数据库检查交易发起地址是否有足够的以太币(Balance)来转移。如果没有,交易将被立即丢弃。

6. 如果检查后确认有足够的金额,则将交易放入Tx Pool。

(按照 Gas Price 设定的金额从高到低排序)

7. 在等待区块生成的过程中,每个节点都会

A. 广播收到的交易

B. 接收不在 Tx Pool 中的交易

8. 矿工节点(有使用计算机算力查找nonce值并拼出块奖励的节点)会获取更高费用的交易,进入EVM操作并改变状态值,操作将完成将交易打包成新的区块(操作中出现错误的交易将被丢弃),然后使用计算机计算能力计算nonce值。

*注:这里的nonce值与前面介绍的以太坊地址的nonce值不同(以太坊有两个nonce:一个是用于挖矿的;另一个是地址的交易顺序。)

*注2:在操作的同时会消耗气体。

9. 如果成功找到nonce值,出块的矿工将获得出块奖励和该区块内所有打包交易的手续费。

10. 这个矿工节点将新区块广播给全球其他节点。

以太坊区块0交易块

11. 其他节点同步“8660586区块高度(最新区块)”,

“State Database”、“Tx Pool”数据,不断广播和接收新的交易。

12. 然后矿工节点从 Tx Pool 中取出未阻塞的交易进行计算并打包成新的块。

以上是以太坊交易从发送到区块的过程。接下来,我们来看看智能合约是如何部署的:

B. 部署智能合约

其实我们在第2节就简单介绍过一次。现在我们用原理图更全面的介绍一下吧!

“部署智能合约”流程图

1. 使用 Remix 或其他开发工具编写和完成智能合约。

2. 将源代码编译为字节码。

3. 用户(EOA)通过钱包(管理私钥的工具)输入交易信息

至:0x0

金额:取决于是否将以太币放入合约中

Gas Limit:根据合约的复杂程度决定设置多少

Gas Price:取决于交易状态和出块时间的紧迫性

输入数据:放入合约字节码

4. 用私钥对交易进行签名,并将“签名交易包”广播给相邻的以太坊节点。

以太坊区块0交易块

5. 节点收到新的交易后,首先会去State Database检查交易发起地址是否有足够的Ether(Balance)进行转账(在某些情况下,会在合约中输入Ether)。交易立即被丢弃。

6. 如果检查后确认有足够的金额,则将交易放入Tx Pool。

(按照 Gas Price 设定的金额从高到低排序)

7.在等待区块生成的过程中,每个节点仍然会

A. 广播收到的交易

B. 接收不在 Tx Pool 中的交易

8. 矿工节点接收到这个合约部署交易并进入 EVM 计算。

9. 将合约代码部署到 Program Code ROM 是只读存储器以太坊区块0交易块,部署后无法更改。

10.同时,智能合约还可以使用内存来存储合约需要记录的信息。例如,发行 ERC-20 代币的智能合约可以使用内存记录“每个以太坊地址持有的代币数量”,并跟踪每个地址的 ERC-20 代币余额。

11. 以上步骤完成后,操作结果(合约地址,Gas Used)将被写回交易。

12. 矿工节点将完成的交易打包成新的区块(有错误或Gas不足的交易将被丢弃),然后使用计算机计算能力计算nonce值。

13.成功找到nonce值,出块矿工将获得出块奖励和该区块内所有打包交易的手续费。

14.矿工节点将新区块广播给全球其他节点。

15. 其他节点同步“8660586区块高度(最新区块)”,

“状态数据库”、“Tx 池”、“合约代码 ROM”、

“ERC-20 Token Balance”数据,持续广播和接收新交易。

以太坊区块0交易块

16. 然后矿工节点从 Tx Pool 中取出未阻塞的交易进行计算并打包成新的块。

以上是智能合约部署的交易从发送到出块的过程。

最后,我们解析并调用智能合约进行操作和交互:

C.调用合约进行交互

我们也在第 2 节和第 4 节中简要介绍了这部分。

此时我们匹配原理图,更多关注节点部分。让我们更完整地介绍它!

“调用智能合约”流程图

1. 通过DApp接口或其他方式调用智能合约进行交互

2. 生成如下形式的交易格式:

收件人:合约地址

金额:取决于是否将以太币放入合约中

Gas Limit:根据操作合约的复杂程度决定设置多少

Gas Price:取决于交易状态和出块时间的紧迫性

输入数据:将“要调用的合约函数和参数”以hex的形式放入

3. 用私钥对交易进行签名,并将“签名的交易包”广播给相邻的以太坊节点。

4. 节点收到新的交易后,会先去State Database查看交易发起地址是否有足够的Ether(Balance)可以转账(如果有的话),如果不够,则交易将立即被丢弃。

以太坊区块0交易块

5. 如果检查后确认有足够的金额,则将交易放入Tx Pool。

(按照 Gas Price 给出的数量从高到低排序)

6. 在等待一个区块时,每个节点仍然会

A. 广播收到的交易

B. 接收不在 Tx Pool 中的交易

7. 矿工节点拿起这个“合约操作交易”,进入 EVM 操作。

8. 根据合约地址在Program Code ROM中找到合约代码。

9. 根据MethodID(Function Hash)在合约中找到对应的Function。

10. 填写相关参数,进行相应的操作。

以 ERC-20 Token 的 Transfer Function 为例,操作过程中相关地址的 ERC-20 Token Balance 会发生变化。

11. 上述步骤完成后,操作结果(new Token Balance, Gas Used)将被写回交易。

12.矿工节点将完成的交易打包成新的区块(错误或Gas不足的交易将被丢弃),然后使用计算机计算能力计算nonce值。

13. 如果成功找到nonce值,出块的矿工将获得出块奖励和该区块内所有打包交易的手续费。

14. 这个矿工节点将新区块广播给全球其他节点。

15. 其他节点同步“8660586区块高度(最新区块)”,

“State Database”、“Tx Pool”、“ERC-20 Token Balance”等资料,持续广播接收新交易。

16.然后矿工节点从 Tx Pool 中取出未阻塞的交易进行计算并打包成新的块。

以上,我们已经介绍了以太坊区块链的核心结构。虽然目前还有很多技术细节我们没有完全解释或深入介绍,但相信区块链技术初学者应该能够逐步建立起区块链架构的全貌。以后我们会在此基础上继续分析更多面向的区块链技术知识,谢谢!