主页 > imtoken网页版 > 以太坊区块链的结构是什么
以太坊区块链的结构是什么
描述
在上一节中,我们带你深入了解区块链架构的全貌。相信大家对区块链的运行机制和原理有了更深入的了解。在本文中,我们将继续上一篇文章介绍区块链2.0 以太坊——Vitalik 如何升级和改变中本聪设计的比特币架构。《链式架构图》带你全面了解以太坊的运行原理!
区块链 2.0 由 Vitalik Buterin 设计 - 以太坊
以太坊区块链如何工作
以太坊虚拟机(EVM — 以太坊虚拟机)
在介绍以太坊区块链架构之前,我们必须先介绍一下“EVM”。EVM是以太坊创建的一个计算引擎,让每个人都可以成为一个节点。由于每个节点的软硬件环境可能不同,为了保证每次节能都可以执行相同的操作,每个节点通过EVM执行以太坊交易的状态转移和智能合约以太坊区块0交易块,保证每个节点可以执行相同的操作手术。具有相同的执行环境。
前言之后,我们来仔细看看:
以太坊交易的生命周期
与比特币的 UTXO 不同,以太坊采用 Account 的结构。
由于以太坊的智能合约设置较多,所以将分AB、C三个部分进行讲解。
让我们从最简单的 Ether 转账交易开始:
A. 简单的以太币转账交易
“简单的以太转账交易”图
1. 用户 (EOA) 想要发起交易。
2. 通过钱包输入交易信息(私钥管理工具)
To:对方的收货地址;
金额:要转移的以太币数量;
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. 这个矿工节点将新区块广播给全球其他节点。
11. 其他节点同步“8660586区块高度(最新区块)”,
“State Database”、“Tx Pool”数据,不断广播和接收新的交易。
12. 然后矿工节点从 Tx Pool 中取出未阻塞的交易进行计算并打包成新的块。
以上是以太坊交易从发送到区块的过程。接下来,我们来看看智能合约是如何部署的:
B. 部署智能合约
其实我们在第2节就简单介绍过一次。现在我们用原理图更全面的介绍一下吧!
“部署智能合约”流程图
1. 使用 Remix 或其他开发工具编写和完成智能合约。
2. 将源代码编译为字节码。
3. 用户(EOA)通过钱包(管理私钥的工具)输入交易信息
至:0x0
金额:取决于是否将以太币放入合约中
Gas Limit:根据合约的复杂程度决定设置多少
Gas Price:取决于交易状态和出块时间的紧迫性
输入数据:放入合约字节码
4. 用私钥对交易进行签名,并将“签名交易包”广播给相邻的以太坊节点。
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”数据,持续广播和接收新交易。
16. 然后矿工节点从 Tx Pool 中取出未阻塞的交易进行计算并打包成新的块。
以上是智能合约部署的交易从发送到出块的过程。
最后,我们解析并调用智能合约进行操作和交互:
C.调用合约进行交互
我们也在第 2 节和第 4 节中简要介绍了这部分。
此时我们匹配原理图,更多关注节点部分。让我们更完整地介绍它!
“调用智能合约”流程图
1. 通过DApp接口或其他方式调用智能合约进行交互
2. 生成如下形式的交易格式:
收件人:合约地址
金额:取决于是否将以太币放入合约中
Gas Limit:根据操作合约的复杂程度决定设置多少
Gas Price:取决于交易状态和出块时间的紧迫性
输入数据:将“要调用的合约函数和参数”以hex的形式放入
3. 用私钥对交易进行签名,并将“签名的交易包”广播给相邻的以太坊节点。
4. 节点收到新的交易后,会先去State Database查看交易发起地址是否有足够的Ether(Balance)可以转账(如果有的话),如果不够,则交易将立即被丢弃。
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 中取出未阻塞的交易进行计算并打包成新的块。
以上,我们已经介绍了以太坊区块链的核心结构。虽然目前还有很多技术细节我们没有完全解释或深入介绍,但相信区块链技术初学者应该能够逐步建立起区块链架构的全貌。以后我们会在此基础上继续分析更多面向的区块链技术知识,谢谢!