以太坊虚拟机EVM介绍,智能合约详解

这篇具有很好参考价值的文章主要介绍了以太坊虚拟机EVM介绍,智能合约详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以太坊为例:什么是智能合约?智能合约怎么部署、调用、执行?智能合约的原理?智能合约存在哪儿?如何区分调用的是智能合约?世界状态数据库、EVM、智能合约它们之间的关系?

什么是智能合约

指的是“一套以数字形式指定的承诺,包括合约参与方可以在上面执行这些承诺的协议”。早在1994年,美国计算机科学家尼克·萨博(Nick Szabo)就提出了智能合约的概念。

智能合约是一种基于区块链技术的自动执行合约的计算机程序。它们是一组以代码形式编写的、在区块链上运行的规则和逻辑。智能合约定义了在满足特定条件时应该执行的操作,而无需中介方的干预。

以太坊是最为著名的支持智能合约的区块链平台之一。在以太坊中,智能合约是用一种称为Solidity的编程语言编写的。这些合约代码被部署到以太坊区块链上,并由全网节点验证执行。智能合约的执行结果和状态存储在区块链上,确保了透明性和不可篡改性。

智能合约可以执行各种任务,包括但不限于转移数字货币,管理数字身份,执行投票和投资等。由于其自动执行和透明的特性,智能合约在去除信任第三方的同时提供了更多的安全性。

智能合约怎么部署、执行

拿以太坊来说,可以在以太坊虚拟机EVM中部署和调用智能合约。
在以太坊上,合约的执行是通过向合约地址发送交易来触发的。合约地址是由合约创建者的地址和创建者账户的 nonce 生成的,所以在区块链上唯一标识一个合约。

执行合约的过程如下:

  1. 创建合约: 首先,有人(创建者)通过发送一个特殊的交易(称为合约创建交易)来部署合约。这个交易包含了合约的字节码(即合约的编译后的代码)以及其他必要的参数。在这个交易中,创建者将以太币(ETH)发送到合约地址,作为合约的初始资金。

  2. 合约创建交易: 这个合约创建交易被广播到整个以太坊网络,并被矿工包含在一个区块中。

  3. 区块链确认: 矿工通过执行交易中的合约字节码来创建新的区块。这就是合约在以太坊网络中的创建过程。

  4. 触发合约: 一旦合约被创建,任何人都可以通过向合约地址发送交易来调用合约。这个交易中包含了调用合约的数据,也就是要执行的合约函数及其参数。

  5. 合约执行: 当这个交易被矿工打包并写入区块链后,以太坊网络中的每个节点都会执行合约的字节码,模拟合约的执行过程。这确保了所有节点都达成相同的结果。

通过这种方式,合约的执行是通过向合约地址发送交易并将要执行的数据包含在交易中来触发的。以太坊网络的节点根据交易中的数据,按照合约的逻辑执行相应的操作。

智能合约的原理

ethjnxvmpll!yfys,区块链,智能合约,区块链,solidity,以太坊
在上面的图中展示了智能合约的结构,它一般具有“值”和“状态”两个属性,代码中用If-Then和What-If语句预置了合约条款的相应触发场景和响应规则。智能合约经多方共同协定、各自签署后随用户发起的交易(transaction,Txn)提交,经P2P网络传播、矿工验证后存储在区块链特定区块中。用户得到返回的合约地址及合约接口等信息后即可通过发起交易来调用合约。“矿工”受系统预设的激励机制激励,将贡献自身算力来验证交易。

“矿工”收到合约创建或调用交易后在本地沙箱执行环境(如以太坊虚拟机)中创建合约或执行合约代码,合约代码根据可信外部数据源[也称为预言机(Oracle Machines)]和世界状态的检查信息自动判断当前所处场景是否满足合约触发条件以严格执行响应规则并更新世界状态。交易验证有效后被打包进新的数据区块。新区块经共识算法认证后链接到区块链主链,所有更新生效。

以太坊虚拟机EVM

EVM是一个计算引擎,有助于智能合约的部署和操作。没有EVM,就不可能在以太坊协议上执行软件程序。因此,EVM是以太坊核心架构的关键部分。

虚拟机

虚拟机是模拟物理计算机行为的程序。虚拟机有它的存储和处理单元,在你的电脑上作为进程运行。这有点像一台电脑在另一台电脑上运行。

虚拟机类似于普通的Windows或MacOS软件。这里的区别在于虚拟机被设计为执行更高级的功能。此外,与常规操作系统不同,虚拟机无法访问计算机的其他部分,如存储或带宽。

如果你使用模拟器在PC上玩过Android游戏,那么虚拟机可能很熟悉。虽然模拟器和虚拟机有很大不同,但它们都接近硬件的能力,可以在“Sandbox(沙盒)”环境中执行代码。

图灵完备性

英国数学家艾伦·图灵(Alan Turing)发明了第一台图灵机器,它是当今计算机的先驱。只要有足够的时间和资源,图灵整机可以处理任何计算,无论多么复杂。

现在,让我们将这些想法结合起来,定义以太坊虚拟机:

以太坊虚拟机(EVM)是一个巨大的虚拟机,允许部署和执行代码。您只需安装必要的客户端软件即可访问EVM,并使用它在以太坊上执行程序。本质上,EVM充当“世界计算机”,在分散的环境中执行软件操作。

由于没有集中控制,EVM由几个个人/公司维持,这些个人/公司向系统提供计算能力,以换取奖励。因此,它有助于创建任何一方都无法单方面关闭的抗审查应用程序。

EVM是图灵完备的,因为它可以用于执行各种复杂度的计算。这就是以太坊与比特币的区别,因为比特币是图灵不完整的,限制了其功能。

比特币的主要功能是“分布式账本”,它规定了价值转移的规则。除了处理价值转移,以太坊(通过EVM)还支持智能合约的部署。因此,以太坊被描述为“分布式状态机”。

“State”(状态)是指在任何时间点有关系统的信息。在以太坊中,状态指的是特定时刻存在的地址、账户余额和智能合约代码。每个事务都会导致以太坊的状态发生变化(状态转换),这种变化会反映在整个网络中。

智能合约存在哪儿

在以太坊中,合约的代码并不一直存储在以太坊虚拟机(EVM)中。相反,合约的代码在合约被创建时被写入区块链,并存储在区块链的合约账户中。

当你部署一个合约时,一笔特殊的交易会被创建,其中包含合约的字节码(即合约的二进制表示)。这笔交易会触发区块链上的一个区块,其中包含了合约的创建,并在合约账户中存储了合约的字节码。

合约地址是通过合约创建者的地址和创建者账户的 nonce 计算得到的。这确保了合约地址在以太坊网络中的唯一性。

当你向一个合约地址发送交易时,以太坊节点会检查这个地址是否与合约地址匹配。如果匹配,以太坊节点将执行合约账户中存储的合约代码,并提供交易数据供合约执行。

合约账户

在以太坊中,合约账户的存储方式与普通账户有所不同。合约账户并不像普通账户那样关联着私钥和地址,而是关联着合约代码和存储空间。

合约账户的存储位置是以太坊的世界状态数据库中。以太坊使用类似数据库的结构来存储全网状态,其中包括账户余额、合约代码、合约存储数据等。这个数据库的每个状态都对应一个区块,因此以太坊的全网状态会随着每个区块的产生而更新。

具体而言,合约账户的数据存储在该账户的地址下。合约地址是由创建合约的交易的发送者地址和发送者账户的 nonce 值计算得到的。这个地址唯一地标识了一个合约账户,并在以太坊的世界状态数据库中存储了该合约的代码和数据。

需要注意的是,虽然合约账户的地址是由创建者和 nonce 计算得到的,但账户的私钥并不直接存在。私钥用于签署交易和控制账户,而合约账户没有私钥,其执行是由交易触发的,依赖于合约代码的逻辑。

世界状态数据库

在以太坊中,世界状态数据库是一个持久性的、全局的状态存储系统,用于跟踪和管理整个以太坊区块链网络上的账户和合约的状态信息。它的作用主要包括:

  1. 存储账户信息: 世界状态数据库存储了每个账户的当前余额、合约代码、合约存储数据等信息。

  2. 提供全局状态: 通过记录每个账户的状态,世界状态数据库提供了全局的区块链状态,反映了每个账户的当前情况。

  3. 支持智能合约: 智能合约是以太坊上的自动执行代码,合约的状态和数据存储在世界状态数据库中。这使得合约可以随着交易和区块的执行而改变状态。

  4. 存储区块链历史: 世界状态数据库还存储了区块链的历史状态,每个区块都对应一个状态。这使得可以回溯查看历史状态,验证交易的有效性。

原理:
世界状态数据库的原理涉及默克尔树和数据结构的设计。每个区块包含一个状态根,这个状态根是默克尔树的根节点,包含了所有账户状态的哈希值。当一个新的区块生成时,世界状态数据库会更新,新的状态被计算并存储,形成新的状态树。这确保了数据的不可篡改性和完整性。

通过采用默克尔树结构,以太坊实现了高效的状态变化和验证机制。当需要验证一个账户的状态时,只需检查相应的默克尔证明即可,而不需要遍历整个数据库。这样的设计在保持全局一致性的同时,提高了性能和可扩展性。

在以太坊中,每个节点都有自己的本地世界状态数据库。这是因为以太坊是一个分布式的区块链网络,每个节点都需要独立地维护和更新自己的状态数据库。每个节点都通过区块链网络接收和验证交易,执行智能合约,然后更新本地的世界状态。

尽管每个节点都有自己的本地状态数据库,但由于区块链的共识机制,最终每个节点都应该达到相同的共识状态。这就是分布式共识的核心概念:尽管每个节点可能从不同的出发点开始,但通过共识算法,最终它们将达到相同的状态,即相同的世界状态。这确保了整个网络的一致性。

如何区分我调用的是智能合约?

以太坊中,交易中包含一个称为 to 的字段,该字段指定了交易的接收者地址。如果 to 字段为 null 或未设置,那么这笔交易将被认为是一个合约创建交易。

当你发送一个交易给一个合约地址时,以太坊网络通过这个地址找到相应的合约,并执行合约中与交易数据相对应的函数。这是通过交易中的输入数据(称为 input data)来实现的。

合约的地址是由合约的创建者和创建者账户的 nonce 生成的,所以在区块链上是唯一的。当你向一个合约地址发送交易时,以太坊网络知道这个地址是一个合约地址,因此会执行与交易数据相对应的合约代码。

简而言之,以太坊知道你调用的是一个合约而不是一个简单的交易,主要是通过交易中的 to 字段和交易的输入数据。如果 to 字段指定了一个合约地址,以太坊网络就会执行该合约中与输入数据相对应的函数。

世界状态数据库、EVM、智能合约的关系

在以太坊中,世界状态数据库(World State)、EVM(Ethereum Virtual Machine)和智能合约之间有密切的关系。以下是它们之间的关系:

  1. EVM与智能合约:

    • 执行环境: EVM是以太坊的运行时环境,负责执行智能合约的字节码。
    • 智能合约代码: 智能合约是由开发者用 Solidity、Vyper 等语言编写的程序代码。这些代码被编译成EVM可执行的字节码。
  2. EVM与世界状态数据库:

    • 状态维护: EVM通过读取和更新世界状态数据库来维护智能合约的状态。
    • 状态读写: 在执行智能合约时,EVM可以读取状态世界数据库中的当前状态,并根据智能合约的执行结果更新这些状态。
  3. 世界状态数据库与智能合约:

    • 状态存储: 世界状态数据库是以太坊的全局数据库,存储了所有账户(包括用户账户和智能合约账户)的当前状态。
    • 智能合约状态: 智能合约的状态,包括变量值等信息,被存储在世界状态数据库中。每个智能合约都有一个唯一的地址,对应世界状态数据库中的一个条目。

综合而言,智能合约通过EVM执行,并在执行过程中读写世界状态数据库。EVM作为虚拟机执行智能合约的字节码,而世界状态数据库则负责存储智能合约和账户的当前状态。这三者的协同工作构成了以太坊上智能合约的执行和状态管理机制。文章来源地址https://www.toymoban.com/news/detail-761987.html

到了这里,关于以太坊虚拟机EVM介绍,智能合约详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 了解以太坊虚拟机(EVM)

    以太坊虚拟机(Ethereum Virtual Machine,简称EVM) 是以太坊网络的核心组件之一,它承担着 智能合约执行 的重要任务 智能合约执行环境 :EVM提供了一个安全的环境,用于 执行智能合约 。这些合约以 Solidity 等高级编程语言编写,并在以太坊区块链上部署和执行 不可篡改性 :

    2024年04月26日
    浏览(30)
  • 以太坊虚拟机 EVM 的原理

    作者:禅与计算机程序设计艺术 以太坊虚拟机(Ethereum Virtual Machine,简称EVM)是一个运行在以太坊区块链网络上执行智能合约、存储数据的软件。它负责部署、验证、执行智能合约的代码,并维护所有账户信息。用户可以通过发送交易数据到网络中请求执行智能合约。EVM是一

    2024年02月08日
    浏览(46)
  • Mythril 以太坊智能合约安全分析与检测工具详解(一)

    Mythril是以太坊EVM字节码的安全分析工具。它检测以太坊、Hedera、Quorum、Vechain、Roostock、Tron和其他兼容evm的区块链构建的智能合约中的安全漏洞。它使用符号执行、SMT方案来分析检测智能合约代码中的各种安全漏洞。 通过 Docker 获取: 从 Pypi 安装: 目前,Mythril 支持 MacOS 和

    2024年02月08日
    浏览(44)
  • Web3中文|什么是以太坊虚拟机(EVM),它是如何工作的?

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

    2024年01月18日
    浏览(44)
  • 【智能合约】以太坊合约执行分析

    目录 1. 基本概念 1.2 合约字节码 1.3 合约构造函数 1.4 与合约交互 1.5 Call Data 1.6 程序计数器(Program Counter) 1.7 执行环境(Context) 1.8 OpCode(操作码/EVM指令/助记符) 1.9 Gas消耗 1.10 合约执行过程 2. 过程详解 2.1 关于部署代码 2.2 runtime代码 2.3 最终字节码 2.4 为EVM设计的指令集

    2024年02月02日
    浏览(52)
  • 【ETH】以太坊合约智能合约逆向方案

    技术角度了解区块链 在反编译之前,你需要先知道如果获取编译后的字节码。 这里以 USDT 举例

    2024年02月09日
    浏览(35)
  • 以太坊智能合约开发(五):Solidity成绩录入智能合约实验

    每个学生分别部署合约Student.sol ,保证只有自己可以修改姓名。老师部署合约StudentScore.sol,用于录入学生成绩,查询学生信息。查询学生信息时,需要调用学生部署的合约Student.sol。 student.sol合约,用于学生对自己信息进行管理。 学生的基本信息作为状态变量: 声明构造函

    2024年02月07日
    浏览(49)
  • 1-完全理解以太坊智能合约

    区块链技术的核心概念是分布式账本,它是许多参与者共享的特定类型的数据库。 这个特殊的数据库只是一个交易列表,记录着网络中发生的每笔交易。每个人都可以拥有自己的交易列表备份,再加上强有力的货币激励措施消除各方之间信任成本。 使用区块链,可以把信任

    2024年02月04日
    浏览(44)
  • 以太坊 – 部署智能合约到Ganache

    目录 1. Ganache本地区块链 1.1 主界面 1.2 设置 2. 开发智能合约 2.1 初始化项目 2.2 添加package.json文件 2.3 添加智能合约源文件 2.4 编译项目 3. 部署智能合约到Ganache 3.1 更新配置文件 3.2 创建迁移脚本  3.3 执行迁移命令 首先启动Ganache,创建本地的以太坊区块链网络。 本地

    2024年02月16日
    浏览(53)
  • go语言操作以太坊智能合约

    操作中要注意版本问题 geth版本、golang版本等 在remix环境中写好合约后,进行编译得到abi文件 简单举例 Hello.sol合约 编译后abi文件(Hello.abi)内容 然后需要一个 abigen工具 可以将abi、bin等编译后的智能合约文件内容生成go代码 abigen可以在geth官网下载geth的时候下载GethTools版本

    2024年02月09日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包