探索 EVM 能做什么?李吾皇

探索 EVM 能做什么?

2 years ago
在本期播客中,我们将深入探讨以太坊虚拟机(EVM)的功能,包括其读写数据的能力,以及开发者如何利用这些特性。

Scripts

h

Leo

大家好,欢迎收听本期播客,我是 Leo。今天我们将一起探索什么是以太坊虚拟机,也就是 EVM,它到底能做些什么。EVM 其实是以太坊网络的核心,它允许我们在区块链上运行智能合约。听说过 EVM 的朋友们,一定对它的操作码有一些了解,对吧?

g

Alice

没错,Leo。EVM 实际上是一个虚拟机器,每当我们在以太坊上执行某个操作时,多个节点会启动这台虚拟机并运行机器级代码。它使用的操作码其实是对人类可读代码的编译结果,比如 Solidity 代码编译后的字节码。

h

Leo

很有意思!那你能具体说一下,这些操作码是如何工作的,以及它们在 EVM 中的作用吗?

g

Alice

当然。每个操作码代表一个具体的操作,比如 PUSH1、MSTORE 等。它们控制着 EVM 的行为,决定了我们如何与智能合约互动。例如,当我们调用一个函数时,它会将某些参数推入栈中,然后执行一系列操作。

h

Leo

听起来很复杂,不过这也让我想到很多开发者可能会遇到的错误。比如在 Solidity 中,常常会看到关于 '数据位置必须是 memory 或 calldata' 的错误。你能给我们讲讲这个问题吗?

g

Alice

好的,这是因为 Solidity 对参数的数据位置有要求。比如,字符串和数组这种类型的数据不能直接放在栈上,它们需要被存储在内存或者 calldata 中。如果没有指定位置,编译器就会报错。

h

Leo

这样说来,理解数据存储的位置就显得尤为重要了。那在 EVM 中,数据存储的位置有哪些呢?

g

Alice

EVM 可以访问的数据存储位置包括栈、内存、存储、瞬态存储和 calldata。栈和内存是临时存储,数据在交易结束后会被删除。而存储则是永久的,适用于需要长久保存的数据。

h

Leo

还真是丰富多样呢!那 EVM 对于每种存储位置的操作有何不同呢?比如说,存储和内存之间的主要区别是什么?

g

Alice

存储主要用于状态变量,它的数据是永久的,任何节点都需要在交易结束后保留这些数据。而内存则是临时的,适合处理函数中的局部变量。虽然内存的操作相对便宜,但使用存储则更为昂贵,因为它涉及到网络中所有节点的数据同步。

h

Leo

这让我想起了 gas 成本的问题,许多开发者在编写合约时都需要考虑这一点。能不能谈谈在编写智能合约时如何优化这些成本呢?

g

Alice

当然。例如,使用内存而不是存储、尽量减少函数调用、避免使用过多的状态变量,都是减少 gas 成本的有效方法。每个小细节都可能影响整体的费用,开发者需要在设计合约时多加思考。

h

Leo

非常实用的建议!今天我们聊到的内容真是丰富,EVM 的机制和最佳实践对开发者来说都是至关重要的。

Participants

L

Leo

播客主持人

A

Alice

区块链开发者

Topics

  • EVM 的工作原理
  • Solidity 常见错误
  • 数据存储位置