资讯详情

以太坊虚拟机( EVM )

以太坊虚拟机( EVM )

  • 以太坊虚拟机 EVM 是智能合同的运行环境
  • 作为,参与网络的 。他们会,并
  • EVM 不仅沙盒包装,而且完全隔离,也就是说 EVM 运行的代码无法访问网络、文件系统和其他流程,甚至智能合同之间的访问也有限
  • 合同以字节码的形式( EVM bytecode )存在于区块链上
  • 合约通常以高级语言( solidity )编写,通过 EVM 编译器编译成字节码,最后通过客户端部署到区块链网络中

EVM 和 账户

  • 以太坊有两种账户:,它们共用 EVM 地址空间相同
  • 无论账户是否存储代码,这两类账户都是对的 EVM 处理方法完全相同
  • 每个账户在 EVM 中都有一个持久存储 key 和 value 的长度都是 256 位,称之为

EVM 和交易

  • 交易可以看作是从一个账户发送到另一个账户的消息,可以包括在内
  • 如果,此代码会在 EVM 并从 payload 这就是入参
  • 如果目标账户是零账户( 账户地址为 0 ),这笔交易将创建一笔 ,用于创建合同的交易 payload 会被转换为 EVM 并执行字节码,执行输出作为合同代码永久存储

EVM 和 gas

  • 当合同被交易触发并调用时,指令将在整个网络的每个节点执行:这需要消耗算例成本;每个指令的执行都有特定的消耗,gas 使用量化表示成本消耗
  • 一旦创建,每笔交易都是按一定数量进行的 gas 预付费用的目的是限制交易所需的工作量,并支付交易费用
  • EVM 执行交易时,gas 按规定逐渐消耗
  • gas price 交易发送人设定的价值作为发送人预付手续费的单价。如果交易执行后有剩余,gas 原路返还
  • 无论执行到哪里,一旦执行到哪里 gas 被耗尽( 例如,将负值降低),会触发一个 out-of-gas 异常。当前调用帧( call frame )所有状态修改都将被回滚

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

  • 每个新闻调用,合同将暂时获得一个干净的内存空间
  • 生命周期仅为整个方法执行期,函数调用后回收,因为只保存临时变量,所以读写 gas 开销较小

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

EVM 指令集

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

消息调用( Message Calls )

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

委托调用(Delegatecall)

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

合同的创建和自毁

  • 通过一个特殊的消息调用 ,合同可以创建其他合同(不是简单的调用零地址)
  • 从区块链中删除合同代码的唯一方法是在合同地址上执行自毁操作;合约账户上剩余的以太币会发送给指定的目标,然后其存储和代码从状态中被移除

标签: evm2gsx80b24电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台