在区块链和去中心化应用(DApps)的世界里,以太坊无疑是一个举足轻重的平台,它不仅仅是一种加密货币,更是一个全球性的、可编程的计算机,允许开发者在上面构建和部署各种复杂的应用,而驱动这台“世界计算机”运行的程序,就是智能合约,一个自然而然的问题就产生了:以太坊智能合约是用什么语言做的?
简单直接的答案是:以太坊智能合约主要使用的是一种名为 Solidity 的编程语言。
下面,我们将深入探讨 Solidity,以及其他一些在以太坊生态中扮演重要角色的语言,帮助您全面理解以太坊智能合约的开发基石。
如果说以太坊是一个操作系统,Solidity 就是这个操作系统上最流行、最核心的“应用程序开发语言”。

什么是 Solidity?
Solidity 是一种专为以太坊虚拟机(EVM)设计的、静态类型的、高级的编程语言,它的语法风格深受 C 、JavaScript 和 Python 的影响,对于那些有传统编程背景的开发者来说,学习曲线相对平缓,Solidity 的设计目标是实现智能合约的复杂逻辑,包括状态变量、函数、修饰符、事件等,使其能够安全、可靠地管理数字资产和业务流程。
Solidity 的核心特性:
uint256, address, bool),这有助于在部署前捕获大量潜在的错误,提高了合约的安全性。address)、定点数(fixed/ufixed)等,并提供了全局变量(如 msg.sender, msg.value, block.timestamp)来方便地与区块链进行交互。为什么 Solidity 如流行?

一个典型的 Solidity 合约示例如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// 定义一个名为 SimpleStorage 的智能合约
contract SimpleStorage {
// 声明一个状态变量来存储一个整数
uint256 private myNumber;
// 一个公共函数,用于设置 myNumber 的值
function set(uint256 _newNumber) public {
myNumber = _newNumber;
}
// 一个公共函数,用于获取 myNumber 的值
function get() public view returns (uint256) {
return myNumber;
}
}
尽管 Solidity 占据了绝对主导地位,但以太坊作为一个开放的平台,也支持其他多种编程语言来编写智能合约,这为开发者提供了更多的选择和灵活性。
Vyper
Rust

Solang 等编译器,开发者可以使用 Rust 编写智能合约,并将其部署到以太坊及其他兼容 EVM 的链上(如 Polkadot)。LLL (Low-Level Lisp-like Language)
FunC (用于 TON 区块链)
Ever-Compiler 已经支持将 FunC 代码编译成以太坊兼容的字节码,为开发者提供了一种新的、高效的合约编写方式。对于初学者而言,Solidity 是不二之选,它的学习资源最丰富,社区支持最广泛,是进入以太坊开发领域的“敲门砖”。
对于经验丰富的开发者,选择则取决于具体需求:
回到最初的问题:以太坊智能合约是用什么语言做的?
最核心、最普遍的答案是 Solidity,它凭借其强大的功能、成熟的生态和易用性,成为了构建以太坊世界应用的事实标准,以太坊的开放性也催生了 Vyper、Rust 等多元化的语言选择,它们各自在不同的维度上补充和挑战着 Solidity 的地位。