IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 以太坊虚拟机( EVM ) -> 正文阅读

[区块链]以太坊虚拟机( EVM )

以太坊虚拟机( EVM )

  • 以太坊虚拟机 EVM 是智能合约的运行环境
  • 作为区块验证协议的一部分,参与网络的每个节点都会运行 EVM 。他们会检查正在验证的块中列出的交易,并运行由 EVM 中的交易触发的代码
  • EVM 不仅是沙盒封装的,而且是完全隔离的,也就是说在 EVM 中运行的代码是无法访问网络、文件系统和其他进程的,甚至智能合约之间的访问也是受限的
  • 合约以字节码的格式( EVM bytecode )存在于区块链上
  • 合约通常以高级语言( solidity )编写,通过 EVM 编译器编译为字节码,最终通过客户端上部署到区块链网络中

EVM 和 账户

  • 以太坊中有两类账户:外部账户合约账户,它们共用 EVM 中同一个地址空间
  • 无论账户是否存储代码,这两类账户对 EVM 来说处理方式是完全一样的
  • 每个账户在 EVM 中都有一个键值对形式的持久化存储。其中 key 和 value 的长度都是 256 位,称之为 存储空间( storage )

?EVM 和交易

  • 交易可以看作是从一个账户发送到另一个账户的消息,它可以包含二进制数据( payload )以太币
  • 如果目标账户含有代码,此代码会在 EVM 中执行,并从 payload 作为入参,这就是?合约的调用
  • 如果目标账户是零账户( 账户地址为 0 ),此交易就将创建一个 新合约,这个用来创建合约的交易的 payload 会被转换为 EVM 字节码并执行,执行的输出作为合约代码永久存储

EVM 和 gas

  • 合约被交易触发调用时,指令会在全网的每个节点上执行:这需要消耗算例成本;每一个指令的执行都有特定的消耗,gas 就用了该量化表示这个成本消耗
  • 一经创建,每笔交易都按照一定数量的 gas 预付一笔费用,目的是限制执行交易所需要的工作量和为交易支付手续费
  • EVM 执行交易时,gas 将按特定规则逐渐消耗
  • gas price 时交易发送者设置的一个值,作为发送者预付手续费的单价。如果交易执行后还有剩余,gas 会被原路返还
  • 无论执行到什么位置,一旦 gas 被耗尽( 比如降为负值?),将会触发一个 out-of-gas 异常。当前调用帧( call frame )所做的所有状态修改都将被回滚

EVM 数据存储

Storage

  • 每个账户都有一块持久化的存储空间,称为 storage,这是一个将 256 为字映射到 256 位字的 key-value 存储区,可以理解为合约的数据库
  • 永久存储在区块链中,由于会永久保存合约状态变量,所以读写的 gas 开销也是最大的

Memory(内存)

  • 每一个消息调用,合约会临时获取一块干净的内存空间
  • 生命周期仅为整个方法执行期间,函数调用后回收,因为仅保存临时变量,故读写 gas 开销较小

Stack(栈)

  • EVM 不是基于寄存器的,而是基于栈的,因此所有的计算都在一个被称为栈( stack )的区域执行
  • 存放部分局部值类型变量,几乎免费使用的内存,但有数量限制

EVM 指令集

  • 所有的指令都是针对 “256 位的字( word )” 这个基本的数据类型来进行操作
  • 具备常用的算数、位、逻辑和比较操作,也可以做到有条件和无条件跳转
  • 合约可以访问当前区块的相关属性,比如它的块高度和时间戳

消息调用( Message Calls )

  • ?合约可以通过调用的方式来调用其它合约或者发送以太币到非合约账户
  • 合约可以决定在其内部的消息调用中,对于剩余的 gas ,应发送和保留多少
  • 如果在内部消息调用发生了 out-of-gas 异常(或其他任何异常),这将由一个被压入栈顶的错误值所指明;此时只有与该内部消息调用一起发送的 gas 会被消耗掉

?

?委托调用(Delegatecall)

  • ?一种特殊类型的消息调用
  • 目的地址的代码将在发起调用的合约的上下文执行,并且 msg.sender 和 msg.value 不变
  • 可以由此实现 “库”( library ):可复用的代码库可以放在一个合约的存储上,通过委托调用引入相应代码

?

?合约的创建和自毁

  • 通过一个特殊的消息调用 create calls,合约可以创建其他合约(不是简单的调用零地址)
  • 合约代码从区块链上移除的唯一方法是合约在合约地址上执行自毁操作?selfdestruct?;合约账户上剩余的以太币会发送给指定的目标,然后其存储和代码从状态中被移除
  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:16:39  更:2022-03-11 22:16:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:29:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码