主页 > 下载imtoken官网苹果版 > 以太坊智能合约的生命周期

以太坊智能合约的生命周期

下载imtoken官网苹果版 2023-02-07 05:43:37

编者按:本文转载自“Codefine 好码安全”公众号,描述了以太坊上合约从部署到调用的完整过程。 值得指出的是,由于合约相关交易被打包成块并计算的过程与普通交易类似,读者也可以借此一窥以太坊的计算机系统是如何工作的。

“智能合约是在直接控制数字资产的安全环境中执行的计算机程序。”

– Vitalik Buterin

作为以太坊的标志性技术,网上已经有很多文章介绍智能合约。 今天,Cindy将主要带领大家走过一段以太坊智能合约的生命周期之旅以太坊合约地址可以转走吗,一起走过合约存储、创建、部署、执行、升级、销毁的过程。

我们一起去吧!

第一站:合约存储

以太坊合约地址是什么_以太坊合约地址可以转走吗_以太坊智能合约是什么

以太坊合约地址是什么_以太坊合约地址可以转走吗_以太坊智能合约是什么

-以太坊上的两种账户:a) 个人账户 b) 合约账户-

首先,以太坊智能合约有两类账户:外部个人账户和合约账户。 这两种账户的功能和特点是不同的。

其次,在部署合约时,会创建一个合约账户,将合约代码的可执行字节码(Bytecode)存放在合约账户(CA)中。 具体来说,有一个account codehash指向的存储区; codeHash是code的hash值,创建后不可更改。

同样,数据主要存放在账户storageRoot指向的存储区; storageRoot对应合约存储结构MPT树根节点的哈希值,通过它可以在数据库中检索到合约的变量信息。

最后,目前所有的底层存储都是基于leveldb,一个kv数据库。

第二站:合约创建

这里我们以用户A为例进行说明。

以太坊智能合约是什么_以太坊合约地址是什么_以太坊合约地址可以转走吗

以太坊合约地址是什么_以太坊合约地址可以转走吗_以太坊智能合约是什么

用户A使用solidity等语言创建合约代码A 在IDE/wallet/other client中,按照一定的格式(from,data,value,Gas,GasPrice...)填写数据,然后确认(即发起交易) client 会填写账户nonce(tx计数器),编译solidity,签名等操作,并将to字段置零(代表合约创建)。 tx被广播到网络,B节点收到tx。 B节点检查tx是否有效,格式是否正确,验证交易签名是否合法。 如果满足要求,计算可能的最高交易费用,确定发送方地址,并检查发送方在本地区块链上的余额,如果账户余额不足以支付最高交易费用,则返回错误。 对于符合要求的交易请求,B将其放入交易存储池中,并转发给其他节点(例如转发给C)。 C 收到交易请求的节点重复用户B的流程。第三站:合约部署

我们加入矿工 B 和 C。

以太坊合约地址是什么_以太坊合约地址可以转走吗_以太坊智能合约是什么

-部署挖矿流程-

B和C各自从本地交易存储池中获取一批TX,然后打包进行哈希计算(挖矿)。

假设B挖矿成功(获得记账权),B将根据A提供的交易手续费和合约代码创建合约账户,并在账户空间部署合约。 合约创建的tx确认后返回给A的合约账户地址

以太坊合约地址可以转走吗_以太坊智能合约是什么_以太坊合约地址是什么

B 的打包块(包括 A 创建的智能合约)被发送到对等节点并在整个网络中传播。

C 收到区块,验证区块,如果区块验证通过:

一种。 C从内存池中删除A创建的智能合约交易请求

b. C 将块链接到本地​​最长链(同步块)

C。 C 在本地区块链中部署 A 的智能合约。

以太坊合约地址是什么_以太坊合约地址可以转走吗_以太坊智能合约是什么

-区块验证流程-

以太坊合约地址可以转走吗_以太坊智能合约是什么_以太坊合约地址是什么

第四站:合约执行

以太坊合约地址是什么_以太坊合约地址可以转走吗_以太坊智能合约是什么

-合约执行流程-

用户A按照一定的格式在网络中发起tx请求; 该请求由网络中的节点 B 接收: i. 如果满足要求,则计算可能的最高交易费用(最高交易费用=Gas Limit×GasPrice),并确定发送方地址,并从发送方在本地区块链上的账户中扣除相应的费用 ii. 如果账户余额不足,则返回错误,直接丢弃该笔交易。 B 同步到此交易,检查交易是否有效且格式正确。 对于符合要求的交易请求,用户B将其放入交易存储池中,转发给其他节点。 其他节点执行与B相同的操作过程,B挖矿成功。 一种。 对于转账交易,B将这笔交易与其他交易一起打包到区块中。 b. 对于合约调用交易,B将该交易与其他交易一起打包成一个区块,并在本地EVM上运行合约代码: 如果代码没有完成,Gas已经用完,那么由于代码运行而改变B的状态,回滚到代码运行前,但是已经支付的交易手续费无法收回,获得交易手续费由 B.ii。 如果代码运行后还有剩余的Gas,那么B只会得到消耗的Gas×GasPrice作为手续费,不会收取剩余Gas对应的手续费。 C。 B 将包含 A 的交易请求的块传播到对等节点并在网络中广播。 节点 C 收到区块后: 验证区块(用户A交易的合法性也再次验证) i. 验证通过后,C 在内存池中删除 A 的交易请求,同时删除 B 的区块 加入本地区块链 ii. 如果验证失败,则 C 丢弃该块。 b. 在区块 i 中执行智能合约交易。 C在本地EVM上运行智能合约以太坊合约地址可以转走吗,并与B相互验证执行结果。网络上的其他矿工节点重复C的执行过程:通过EVM在本地计算机上运行智能合约作为参与的一部分挖掘过程,然后得出一个结果并进行验证。 一种。 理论上,如果没有恶意操作,每台计算机代码运行的结果都是一样的,因为它们运行的​​是相同的提供相同信息的合约代码

以太坊合约地址是什么_以太坊合约地址可以转走吗_以太坊智能合约是什么

第五站:合约升级

部署在以太坊区块链上的代码是不可变的,即无法将新合约重新部署到同一地址。 (编者按:其实是可以改的。但是需要)

以太坊合约地址可以转走吗_以太坊智能合约是什么_以太坊合约地址是什么

智能合约升级难度大,需要一次“完美”编写合约(测试/验证要求极高)。

黑客攻击方法: 部署具有呼叫转移功能的智能合约 b。 将接收到的调用转发到另一个包含逻辑函数的合约地址 c。 升级合约时,只需部署新合约,修改转发的Destination地址指向新合约即可。

第六站:合约销毁

合约发起者可以调用selfdestruct()方法来销毁合约。 例子:

以太坊合约地址是什么_以太坊合约地址可以转走吗_以太坊智能合约是什么

参考:

以太坊技术详解与实战。 闫莹主编; 郑凯; 郭忠信 发表时间:2018年6月