以太坊,作为全球第二大加密货币和领先的智能合约平台,其核心魅力在于允许开发者构建和部署去中心化应用(DApps)和智能合约,究竟以太坊是用什么编写的呢?这个问题可以从几个层面来理解,包括其底层协议、智能合约的编写语言以及DApp的开发技术栈。
以太坊协议本身:Solidity与Vyper之外的基础
我们需要明确的是,以太坊区块链的底层协议和客户端软件(如Geth、Parity等)主要是用C++和Rust编写的,这些客户端软件负责实现以太坊的共识机制(如曾经的Ethash、现在的PoS及未来的分片等)、网络通信、虚拟机(EVM)执行、状态存储等核心功能,它们是以太坊网络能够运行的基础,但通常不直接由普通开发者用来编写DApps或智能合约。
智能合约的编写语言:Solidity为主流,Vyper等并存
对于大多数开发者而言,当他们问“以太坊用什么编写”时,更关心的是智能合约的编写语言,智能合约是运行在以太坊虚拟机(EVM)上的自动执行程序,它们是以太坊上DApp逻辑的核心。
-
Solidity - 绝对的主流
- 地位:Solidity是以太坊上最流行、使用最广泛的智能合约编程语言,它受到了C++、JavaScript和Python等语言的启发,语法相对容易上手,尤其对于有后端或Web开发经验的开发者。
- 特点:
- 静态类型语言:有助于在编译时捕获错误,提高合约安全性。
- 面向对象:支持继承、多态等面向对象特性,便于代码组织和复用。
- 丰富的工具链:拥有如Truffle、Hardhat、Remix IDE等成熟的开发、测试、部署工具,以及OpenZeppelin等经过审计的标准合约库。
- 广泛的社区支持:大量的教程、文档、开源项目和开发者社区,遇到问题容易找到解决方案。
- 应用:绝大多数的代币标准(如ERC-20、ERC-721)、DeFi协议、NFT项目以及复杂的DApp逻辑都是用Solidity编写的。
-
Vyper - 安全优先的替代选择
- 定位:Vyper是一种专门为以太坊智能合约设计的、更注重安全性和简洁性的编程语言,它的设计目标是减少Solidity中可能出现的漏洞,并提供更清晰的代码结构。
- 特点:
- 强调安全性:移除了一些Solidity中容易导致错误的特性(如递归调用、复杂的修饰符),引入了更严格的类型检查和限制。
- 更简洁的语法:语法相对简单,更接近Python,易于阅读和理解。
- 有限的特性:专注于核心功能,避免过度复杂化。
- 应用:Vyper适用于对安全性要求极高的场景,如金融合约、核心基础设施等,虽然不如Solidity流行,但在特定领域有其价值。
-
其他语言
- LLL (Low-Level Lisp):以太坊早期的一种低级语言,但现在已很少使用。
- Serpent:受Python启发的语言,也曾是早期选择,但逐渐被Solidity取代。
- Solidity的替代/扩展:如Yul(EVM的中间语言,Solidity编译后可生成Yul代码,也可直接编写Yul合约)。
- 其他语言的编译器:也有一些项目尝试将其他语言(如Rust、Go、JavaScript)编译成EVM可执行的代码,
- Rust:通过框架如Ethersmith、Solang或集成到Parity客户端中,可以编写高性能且安全的智能合约,但学习和部署曲线相对陡峭。
- Fe:一种类Solidity的Rust语言,旨在提供Rust的安全性和性能,同时保持Solidity的熟悉度。
去中心化应用(DApp)的开发技术栈








