# 以太坊和 EVM

By [un.Block](https://paragraph.com/@un-block) · 2021-10-09

---

> 我们主要来学习一下 ETH 和 EVM，ETH 的诞生让区块链世界充满无限可能；开发部分我们承接上期的安全话题，聊聊如何写出安全可靠的代码

### **区块链理论：可编程的区块链**

### ❓ **Ethereum 是什么**

> Q: What is Ethereum?  
> A: The foundation for our digital future.

![](https://storage.googleapis.com/papyrus_images/d0ba228e6d4b0496f5044d88b2f3aa9422cc2e79343d283bfbbef5280c9f78a9.jpg)

BTC 标志着一种全新形式的货币的出现，它不受任何中心化机构的控制。随着时间的推移，人们开始意识到，BTC 带来的区块链技术除了用来记账，还可以应用到更广阔的领域，随之而来的就是以太坊 (Ethereum)。

关于 BTC 和 Ethereum 的区别，推荐阅读 ⬇️

[**_Bitcoin vs. Ethereum: What's the Difference?_**](https://link.zhihu.com/?target=https%3A//www.investopedia.com/articles/investing/031416/bitcoin-vs-ethereum-driven-different-purposes.asp%23citation-1)

Vitalik Buterin 创造的 Ethereum 实现了一个内置编程语言的区块链协议。由于 Ethereum 支持了编程语言，那么理论上任何区块链应用都可以使用这门语言进行定义，并且运行在以太坊虚拟机 (Ethereum Virtual Machine, EVM) 上。

Ethereum 通过区块链技术，在维护去中心化的支付网络的同时，还存储着防篡改的去中心化应用程序 (DApp) 与智能合约 (Smart Contract)。

Ethereum 协议就像互联网时代的 TCP/IP 协议一样，基于这个协议，区块链应用开发者可以在顶层高效便捷地开发顶层应用。

通过阅读以下文档，你可以深入的了解以太坊 ⬇️

[_Vitalik Buterin：以太坊是什么_](https://link.zhihu.com/?target=https%3A//ethfans.org/posts/what-is-ethereum)

[_官方文档：WHAT IS ETHEREUM_](https://link.zhihu.com/?target=https%3A//ethereum.org/en/what-is-ethereum/)

### ❓ **EVM 是什么**

![](https://storage.googleapis.com/papyrus_images/8bd1e23fdbf09783ec57c0a7ce8c2d06bc43d3cdfee493c097e8c4f8605cf566.jpg)

EVM 的行为就像一个数学函数一样。给定一个输入，它就会产生一个确定性的输出。因此，我们可以将 Ethereum 理解为一个状态转换函数（或状态机）。

关于 (EVM) Ethereum Virtual Machine 的描述略有玄学的味道，它不能被认为是云服务器或集群服务器，但它确实是作为一个单一实体存在于世界上，由运行着 Ethereum 客户端的成千上万台电脑链接维护。

Ethereum 协议存在的价值是为了保持 EVM 的连续、不间断、不被篡改的稳定运行，EVM 是所有 Ethereum 账户和智能合约的生存环境。在链上的任何一个区块，Ethereum 都只有一个 “规范” 的状态，而 EVM 就是定义了区块之间计算出新的有效 “规范状态” 的机器。

[_ETHEREUM VIRTUAL MACHINE (EVM)_](https://link.zhihu.com/?target=https%3A//ethereum.org/en/developers/docs/evm/)

就像部署在中心化网络的应用程序消耗服务器资源一样，在 EVM 上运行程序（或转账）也是需要消耗资源的，我们称消耗的资源为 Gas，你可以把它理解驱使汽车前进的为汽油，Gas Fee 就是最终消耗的资金。

关于 Gas Fee、Gas Limit、Gas Price，我们下次再聊。

除了 EVM，还有另外一条较为著名的可编程链叫 BSC (Binance Smart Chain), BSC 也能运行智能合约，他和 EVM 兼容并行工作 [_An Introduction to Binance Smart Chain (BSC)_](https://link.zhihu.com/?target=https%3A//academy.binance.com/en/articles/an-introduction-to-binance-smart-chain-bsc)。

### **区块链开发：安全开发**

> 上期我们提到 Force DAO 因为一个低级漏洞而发生了安全事故，那么本期我们就来了解一下，如何写出安全的代码

![](https://storage.googleapis.com/papyrus_images/bd57b10099df2807e0c30fed78c20f4146ab887b79f595a13a90415902ee25e6.jpg)

知己知彼，百战不殆，认识常见的攻击可以提高我们的代码安全意识，Consensys 的 [_Known Attacks_](https://link.zhihu.com/?target=https%3A//consensys.github.io/smart-contract-best-practices/known_attacks/) 列出了常见的各种攻击如 Reentrancy、Front-Running 等，并给出了相关的解决方案。

在 DApp 开发过程中，我们经常会遇到转账、外部调用等有风险的操作，要使代码安全可靠，除了在编码时注意代码逻辑与各种判断条件，我们还可以使用被认为是较可靠的第三方库来处理有风险的操作，如 [_Openzeppelin_](https://link.zhihu.com/?target=https%3A//docs.openzeppelin.com/contracts/4.x/)，它是一个建立在社区审核代码基础上的安全智能合约开发库，它

*   实现了 ERC20 和 ERC721 等标准
    
*   灵活的基于角色的访问控制方案
    
*   提供可充用的 Solidity 智能合约组件
    

在开发的过程中，我们可以使用静态分析器来检测低级漏洞，开发完成后，可以通过编写各种测试来提高代码的可靠性，也可以将项目代码移交第三方安全机构（如 [_Certik_](https://link.zhihu.com/?target=https%3A//www.certik.io/)）进行代码审计，由专业的的区块链安全专家对代码进行分析，并给出相关改进建议。

找第三方审计某程度上可以理解为：由可信赖的机构为项目的安全性背书，增强用户信心。

### **区块链工具分享**

![](https://storage.googleapis.com/papyrus_images/863117433b99a607f8b0e8baa742d837654b38098c5e5e90630b8e0156fc2b06.jpg)

在 DApp 开发过程中，我们可以通过这些工具来提高代码可靠性：

*   [_Slither_](https://link.zhihu.com/?target=https%3A//github.com/crytic/slither)：基于 Python 的开源 Solidity 静态分析框架，能够对代码进行静态分析，并提供 API 来编写自定义分析
    
*   [_MythX_](https://link.zhihu.com/?target=https%3A//mythx.io/)：收费的专业级安全分析服务工具，通过标识分析与模糊化输入来验证智能合约的正确性
    
*   [_Solidity Visual Auditor_](https://link.zhihu.com/?target=https%3A//marketplace.visualstudio.com/items%3FitemName%3Dtintinweb.solidity-visual-auditor)：一个 VSCode 上的插件，提供以安全为中心的语法和语义代码高亮
    
*   [_Solar_](https://link.zhihu.com/?target=https%3A//github.com/crytic/slither/tree/dev-middle/slither/tools/middle)：一个正在开发中的静态分析框架，提供GUI操作界面与自由地交互式分析，[_介绍文章_](https://link.zhihu.com/?target=https%3A//blog.trailofbits.com/2021/04/02/solar-context-free-interactive-analysis-for-solidity/)

---

*Originally published on [un.Block](https://paragraph.com/@un-block/evm)*
