EVM 操作码(Opcode)与 字节码(Bytecode)

这篇具有很好参考价值的文章主要介绍了EVM 操作码(Opcode)与 字节码(Bytecode)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以太坊虚拟机(EVM)是一种基于栈的、准图灵完备(quasi-Turing complete)的虚拟机。EVM是智能合约的执行时环境,它是完全孤立的沙盒:运行在EVM中的代码无法访问网络、文件系统或其他进程。

evm的交易可以看作是从一个帐户发送到另一个帐户的消息。它能包含一个二进制数据(合约payload)和以太币。

如果目标账户含有代码,此代码会被执行,并以 payload 作为入参。

如果目标账户是零账户(账户地址为 0 ),此交易将创建一个 新合约 。 如前文所述,合约的地址不是零地址,而是通过合约创建者的地址和从该地址发出过的交易数量计算得到的(所谓的“nonce”)。 这个用来创建合约的交易的 payload 会被转换为 EVM 字节码并执行。执行的输出将作为合约代码被永久存储。这意味着,为创建一个合约,你不需要发送实际的合约代码,而是发送能够产生合约代码的代码

Solidity这样的高级语言是无法在EVM中被直接执行的,代码会被编译成更加接近机器的低级语言—操作码(opcode)来执行。我们的目的,就是把操作码尽可能地还原成高级语言,以分析其逻辑。

EVM与操作码(Opcode)

EVM是基于栈的虚拟机,为了方便计算,EVM定义了以32个字节为一个词(word)进行操作,栈中最多存储1024个词。文章来源地址https://www.toymoban.com/news/detail-474515.html

function add(uint a, uint b) {
   uint sum = a+b;
}

到了这里,关于EVM 操作码(Opcode)与 字节码(Bytecode)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web3中文|什么是以太坊虚拟机(EVM),它是如何工作的?

    来源 | cointelegraph 编译 | Dali@iNFTnews.com 以太坊已成为仅次于比特币的第二重要区块链。以太坊能发展得这么好,它的原生Solidity编程语言和以太坊虚拟机(EVM)发挥了重要的作用。 以太坊区块链凭借自身拥有的灵活性、大量可用的开发工具和庞大的用户基础,继续吸引着去中

    2024年01月18日
    浏览(33)
  • android studio 字节码查看工具jclasslib bytecode viewer

    jclasslib bytecode viewer 是一款非常好用的.class文件查看工具; jclasslib bytecode editor is a tool that visualizes all aspects of compiled Java class files and the contained bytecode. Many aspects of class files can be edited in the UI. In addition, it contains a library that enables developers to read and write Java class files and bytecode.

    2024年02月06日
    浏览(32)
  • 以太坊EVM源码分析学习记录

    analysis.go common.go contract.go contracts.go doc.go eips.go errors.go evm.go gas.go gas_table.go instructions.go interface.go interpreter.go jump_table.go logger.go memory.go memory_table.go opcodes.go operations_acl.go stack.go stack_table.go 2020年版本的evm结构 大致流程 编写合约 生成abi 解析abi得出指令集 指令通过opcode来映射成

    2024年02月01日
    浏览(33)
  • 以太坊EVM智能合约交易信息中Input和Logs解码

    以太坊交易获取一般通过两种方式:getTransaction、getTransactionReceipt web3.eth.getTransaction: web3.eth.getTransactionReceipt: abi-parser 是一个用于解析ethereum/web3 日志、事件和方法的 NodeJS/JS 库。

    2024年02月15日
    浏览(32)
  • websocket 内的操作码fin和opcode

    websocket传输的头两个字节非常关键,提供了每一帧的基本信息,RFT6455中给出了帧头的格式说明: 第一个字节中最重要的就是fin位和opcode位,用c++的struct bit field配合union可以方便的对数据实现存取,这儿给出一个例子:  在定义结构体的时候休要注意字节序的大小端区别,这

    2024年04月23日
    浏览(15)
  • web3:智能合约-虚拟机(EVM、HVM、WASM、MOVE)

    在区块链上,用户通过运行部署在区块链上的合约,完成需要共识的操作。而为智能合约提供运行环境的便是对应的虚拟机。

    2024年02月15日
    浏览(29)
  • 《深入理解Java虚拟机》读书笔记:字节码指令简介

    字节码指令简介   Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的架构(这两种架构的区别和影响将在

    2024年02月12日
    浏览(33)
  • 《深入理解Java虚拟机》 JAVA 字节码指令 基础

    解释时,JVM会为方法分配一个栈帧,而栈帧又由 局部变量表,操作数帧,方法引用,动态链接 组成 方法中的每条指令执行时,要求该指令的操作数已经压入栈中;执行指令时会将操作数从栈中弹出,是否将操作数再次压入栈中取决与具体的命令。 new,dup指令 使用new

    2024年02月05日
    浏览(30)
  • Tomcat 配合虚拟线程,一种新的编程体验

    Java 21 在今年早些时候的 9 月 19 日就正式发布,并开始正式引入虚拟线程,但是作为 Java 开发生态中老大哥 Spring 并没有立即跟进,而是在等待了两个月后的 11 月 29 日,伴随着 Spring Boot 3.2 版本的发布,在这个版本中也终于是引入了对虚拟线程的支持。 虚拟线程的引入标志着

    2024年02月05日
    浏览(49)
  • 深入理解 python 虚拟机:字节码教程(3)——深入剖析循环实现原理

    在本篇文章当中主要给大家介绍 cpython 当中跟循环相关的字节码,这部分字节码相比起其他字节码来说相对复杂一点,通过分析这部分字节码我们对程序的执行过程将会有更加深刻的理解。 我们使用各种例子来理解和循环相关的字节码: 上面的代码对应的字节码如下所示:

    2023年04月15日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包