由于微信限制了第三方应用的跳转,请使用以下方法。
1. 点击右上角的
2. 选择在浏览器中打开
本篇文章我们将接续上篇来介绍区块链2.0 以太坊- Vitalik如何在中本聪设计的比特币架构上进行升级与改动,透过首度揭晓的「以太坊区块链架构图」带大家完整认识以太坊的运作原理!
Vitalik Buterin 领衔设计的区块链2.0 -以太坊Ethereum
How Ethereum Blockchain Work
以太坊虚拟机(EVM — Ethereum Virtual Machine )
介绍以太坊区块链架构前必须要介绍一下「EVM 」,出
以太坊交易的一生
有别于比特币的UTXO,以太坊是采用Account 的架构。
由于以太坊多了智慧合约的设定,将会分成AB 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 中捞取未出块的交易们运算并打包成新的区块。
来源:
发布人:大伟谈币
声明:该文观点仅代表作者本人,不代表火讯财经立场。火讯财经系信息发布平台,仅提供信息存储空间服务。
如文章涉及侵权, 请及时致函告之,本站将第⼀时间删除⽂章。邮箱:840034348@qq.com