文组也该知道的区块链技术知识 以太坊区块链架构

本文作者为赖彦廷,于区块链解决方案服务商 Pelith 沛理科技担任专案经理,本系列文章并不会谈到太深的技术钻研,而是以深入浅出的方式,让每一个想要了解区块链技术的读者,都可以在读完后说出:原来如此!

 

上一节 我们带大家核心地认识了区块链架构的全貌,相信大家都更加了解区块链运作的机制和原理。本篇文章我们将接续上篇来介绍 区块链 2.0 以太坊- Vitalik 如何在中本聪设计的比特币架构上进行升级与改动,透过首度揭晓的「以太坊区块链架构图」带大家完整认识以太坊的运作原理!

Vitalik Buterin 领衔设计的 区块链 2.0-以太坊 Ethereum

How Ethereum Blockchain Work

以太坊虚拟机(EVM — Ethereum Virtual Machine

文组也该知道的区块链技术知识  以太坊区块链架构
智慧合约进到各节点之 EVM 执行示意图

介绍以太坊区块链架构前必须要介绍一下EVM ,EVM 是以太坊为了让人人都能成为节点而创造的计算引擎。由于每个节点的软硬体环境可能都不一样,为了确保每个节能都能进行一样的运算,于是各个节点都 透过 EVM 来执行 Ethereum 交易的状态转移与智能合约,以确保每一个节点都有相同的执行环境。

前言完毕,紧接着我们便来一探究竟:

以太坊交易的一生

有别于比特币的 UTXO,以太坊是采用 Account 的架构。

由于以太坊多了智慧合约的设定,将会分成 A. B. C 三个 part 来做说明,

我们先从最单纯的 Ether 转帐交易开始看起:

A. 单纯的 Ether 转帐交易

文组也该知道的区块链技术知识  以太坊区块链架构
「 单纯的 Ether 转帐交易 」示意图
  1. 一个使用者(EOA)欲发起一笔交易。
  2. 透过钱包(管理私钥的工具)输入交易资讯
    To: 对方接收地址;
    Amount: 欲转移的 Ether 数量;
    Gas Price: 单位 Gas 给的手续费;(参阅 第 5 节
    Gas Limit: 普通的 Ether 转移交易都是 21,000 Gas,不用动;
    Input Data: 视是否要在交易中留下文字讯息。
  3. 私钥签署交易。
  4. 广播「加上签名的交易封包」至邻近的以太坊节点们。
  5. 节点接收到新交易时,会先至 State Database 检查交易发起地址是否具有足额 Ether(Balance)可做转移,若无则该交易会即刻被丢弃。
  6. 若检查后确认有足额,则该交易会被放入到 Tx Pool 中。
    (按照 Gas Price 设的多寡由高至低排序)
  7. 等待出块的同时,各节点会
    A. 广播接收到的交易
    B. 接收未在 Tx Pool 内的交易
  8. 矿工节点们(有在用电脑算力找 nonce 值,拼出块奖励的节点)会捞取手续费较高的交易们,进到 EVM 运算并更改状态值后,将已完成运算的交易们来打包成新区块(运算中出现错误的交易会被丢弃),随后用电脑算力来计算 nonce 值。
    *注:这边的 nonce 值 跟前面介绍过的 以太坊地址的 nonce 值 不同(以太坊有两个 nonce:一个是挖矿的;一个是地址的交易序次。)
    *注 2:运算的同时便会消耗 Gas。
  9. 成功找到 nonce 值,出块的矿工会获得出块奖励及该区块所有打包交易给的手续费
  10. 该矿工节点将新的区块广播至全世界的其他节点们。
  11. 其他节点同步 <8660586 区块高度(最新的区块)>、
    <State Database>、<Tx Pool> 资料,继续广播与接收新交易
  12. 矿工节点再从 Tx Pool 中捞取未出块的交易们运算并打包成新的区块。

以上,便是一笔以太坊交易从发送到出块会经历的流程。紧接着我们来一探究竟智慧合约是如何部署的:

B. 部署智慧合约(Smart Contract)

我们在第 2 节 其实有概略性的介绍过一次,此刻我们搭配示意图更完整地来介绍一遍吧!

文组也该知道的区块链技术知识  以太坊区块链架构
「 部署智慧合约 」流程示意图
  1. Remix 或其它开发工具撰写完成智慧合约。
  2. 将原始码编译为 Bytecode。
  3. 使用者(EOA)透过钱包(管理私钥的工具)输入交易资讯
    To: 0x0
    Amount: 视是否要将 Ether 打入合约中
    Gas Limit: 按照合约繁复程度决定要设多少
    Gas Price: 视交易状况及欲出块的时间急迫性
    Input Data: 放入合约 Bytecode
  4. 私钥签署交易,广播「加上签名的交易封包」至邻近的以太坊节点们。
  5. 节点接收到新交易时,一样会先至 State Database 检查交易发起地址是否具有足额 Ether(Balance)可做转移(有些情况会把 Ether 打入合约) ,若无足额则该交易会即刻被丢弃。
  6. 若检查后确认有足额,则该交易会被放入到 Tx Pool 中。
    (按照 Gas Price 设的多寡由高至低排序)
  7. 等待出块的同时,各节点依旧会
    A. 广播接收到的交易
    B. 接收未在 Tx Pool 内的交易
  8. 矿工节点们捞取起本笔合约部署交易,进到 EVM 运算。
  9. 将合约程式码部署至 Program Code ROM,是个部署后便不能进行更动的 Read-Only Memory(唯独记忆体)。
  10. 同时,智慧合约亦可以另外使用记忆体(Memory)来储存合约所需要纪录的资讯。例如:一个发行 ERC-20 Token 的智慧合约,便可以使用记忆体来 纪录各个以太坊地址所「持有 Token 数量」,追踪各个地址的 ERC-20 Token Balance
  11. 上方步骤完成后,便会将运算后的结果(合约地址、Gas Used)写回到该笔交易中。
  12. 矿工节点们将运算完的交易们 打包成新区块(运算中出现错误 或 Gas 给不够 的交易会被丢弃),随后用电脑算力来计算 nonce 值。
  13. 成功找到 nonce 值,出块的矿工会获得出块奖励及该区块所有打包交易给的手续费
  14. 该矿工节点将新的区块广播至全世界的其他节点们。
  15. 其他节点同步 <8660586 区块高度(最新的区块)>、
    <State Database>、<Tx Pool>、<Contract Code ROM>
    <ERC-20 Token Balance> 资料,继续广播与接收新交易
  16. 矿工节点再从 Tx Pool 中捞取未出块的交易们运算并打包成新的区块。

以上,便是一笔智慧合约部署的交易从发送到出块会经历的流程。

最后,我们来解析呼叫智慧合约进行操作与互动:

C. 呼叫合约进行互动

这部分我们在 第 2 节第 4 节 其实也有概略性的介绍过,

此刻我们搭配示意图,更着重在节点的部分,较完整地来介绍一遍吧!

文组也该知道的区块链技术知识  以太坊区块链架构
「 呼叫智慧合约 」流程示意图
  1. 透过 DApp 介面或其它方式来呼叫智慧合约进行互动
  2. 生成以下形式的交易格式:
    To: 合约地址
    Amount: 视是否要将 Ether 打入合约中
    Gas Limit: 按操作合约的繁复程度决定要设多少
    Gas Price: 视交易状况及欲出块的时间急迫性
    Input Data: 放入以 hex 型态表示 「要呼叫的合约 function 与 参数」
  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. 上方步骤完成后,便会将运算后的结果(新的 Token Balance、Gas Used)写回到该笔交易中。
  12. 矿工节点们将运算完的交易们 打包成新区块(运算中出现错误 或 Gas 给不够 的交易会被丢弃),随后用电脑算力来计算 nonce 值。
  13. 成功找到 nonce 值,出块的矿工会获得出块奖励及该区块所有打包交易给的手续费
  14. 该矿工节点将新的区块广播至全世界的其他节点们。
  15. 其他节点同步 <8660586 区块高度(最新的区块)>、
    <State Database>、<Tx Pool>、<ERC-20 Token Balance> 等资料,继续广播与接收新交易
  16. 矿工节点再从 Tx Pool 中捞取未出块的交易们运算并打包成新的区块。

以上,我们便核心地介绍完了以太坊区块链的架构。尽管有许多的技术细节我们此时并未完整交代也未深入着墨,但相信对于初学区块链技术读者来说应该能逐步建立起区块链架构的全貌。未来我们将持续在这基础上解析更多面向的区块链技术知识,谢谢大家!

以上若有任何

A. 不够清楚的地方
B.
撰写上改进的建议
C.
希望我能够撰写分享的区块链技术知识内容

本文来源于互联网:文组也该知道的区块链技术知识 以太坊区块链架构

Click to rate this post!
[Total: 0 Average: 0]

人已赞赏
名家说每日优选

习近平: 把区块链作为核心技术自主创新重要突破口(附新闻联播视频)

2019-10-26 15:04:32

名家说每日优选

加密独角兽 Coinbase|估值 2400亿,交易所创办至今仅交易手续费收入已超过 600 亿台币

2019-10-28 10:16:39

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索