在开始智能合约开发之前,让我们先了解一些以太坊的核心概念。这些概念会帮助大家理解智能合约在区块链上是如何运行的。
以太坊(Ethereum)是一个去中心化应用平台,它允许任何人创建和运行通过区块链技术支持的应用程序,通常大家会称之为 Web3 应用或 DApp。
Web3 应用与传统Web应用的架构上有所不同:

传统Web应用(图左): 用户通过客户端连接到公司的服务器,所有数据和逻辑都由公司控制。例如,支付宝、京东等应用程序中的所有数据都由公司拥有和管理。
而在 DApp 中(图右):
智能合约是以太坊上运行的程序。就像其他计算机程序一样,它由代码和数据组成。
关于"智能":不要被"智能合约"这个名字误导,它与人工智能无关。智能合约的本质是将规则编写成代码,在区块链上自动执行,无法被篡改。
以太坊使用 Solidity 语言编写智能合约,合约文件的扩展名是 .sol。以下是一个简单的计数器合约示例:
pragma solidity ^0.8.0;
contract Counter {
uint counter;
constructor() {
counter = 0;
}
function count() public {
counter = counter + 1;
}
function get() public view returns (uint) {
return counter;
}
}
这个合约做了什么?
counter 是一个存储在区块链上的变量count() 函数让计数器加 1get() 函数获取当前计数器的值每次调用 count() 函数,区块链的状态就会改变,这个改变是永久的、不可篡改的。
当我们将上面的 Counter 合约部署到链上后,它会有一个地址来表示,这就是合约账户。
以太坊中有两种账户:
两种账户都使用相同的地址格式:
0xea674fdde714fd979de3edf0f56aa9716b898ec8
这是一个 20 字节的十六进制数。
关键区别:

绿色箭头表示发起交易,灰色箭头表示合约间调用
以太币是以太坊的原生代币,用于支付交易费用。最常用的单位换算:
1 ETH(以太)= 1,000,000,000 Gwei
1 Gwei = 1,000,000,000 wei
1 ETH = 1,000,000,000,000,000,000 wei(10^18 wei)
Gas 是在其他编程语言中没有的概念,我们先用生活中的例子理解 Gas 的机制:
想象一下打车的场景:
在以太坊中,Gas 的作用类似:
为什么需要 Gas?
以太坊的智能合约是"图灵完备"的,可以编写执行任何任务的程序。但这也意味着恶意代码可能会无限循环,消耗所有计算资源。Gas 机制就像出租车的计价器,防止有人让车一直跑而不付钱。
Web2 vs Web3 费用对比
| 对比项 | Web2(传统互联网) | Web3(区块链) |
|---|---|---|
| 谁支付费用? | 通常由公司承担服务器成本 | 用户为每笔交易支付 Gas |
| 费用透明度 | 不透明,隐藏在服务背后 | 完全透明,每笔交易都可查 |
| 费用计算 | 包月/包年等固定模式 | 按实际计算量动态计费 |
| 谁获得收益? | 公司收取服务费 | 矿工获得 Gas 费用 |
| 读取数据 | 可能产生流量费 | 完全免费 ✅ |
| 修改数据 | 通常免费 | 需要支付 Gas 💰 |
Gas 如何运作?
每次执行交易或调用合约时,需要消耗 Gas:
交易费用 = Gas 使用量 × Gas 价格
Gas 使用量:操作的复杂度决定(由 EVM 计算)
get())不消耗 GasGas 价格:你愿意为每单位 Gas 支付多少(由用户设置)
Gas 限制:你愿意为这笔交易最多支付多少 Gas(防止意外消耗)
实际例子
假设你要调用 Counter 合约的 count() 函数:
Gas 使用量:45,000 Gas
Gas 价格:20 Gwei (0.00000002 ETH)
───────────────────────────────────
交易费用 = 45,000 × 20 Gwei
= 900,000 Gwei
= 0.0009 ETH
≈ $2(假设 ETH = $2000)
如果你设置 Gas 限制为 100,000,但实际只用了 45,000:
在以太坊上,所有操作都通过交易来完成。交易有三种类型:
向另一个地址转移以太币:
{
"to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
"value": "0.5 ETH",
"data": "0x"
}
普通转账的data 数据为空,这个与合约调用的重要区别。
创建一个新的智能合约:
{
"to": "",
"value": "0",
"data": "0x6060604052341561000c..." // 合约字节码
}
注意 to 字段为空,表示这是创建合约的交易。
与已部署的合约交互:
{
"to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85", // 合约地址
"value": "0",
"data": "0x06661abd" // 函数调用数据
}
data 字段包含了要调用的函数信息和参数。
恭喜!你现在已经了解了以太坊智能合约开发的核心概念:
✅ 以太坊是一个去中心化应用平台 ✅ 智能合约是运行在区块链上的程序 ✅ 账户分为外部账户(由人控制)和合约账户(由代码控制) ✅ 以太币用于支付交易费用,最小单位是 wei ✅ Gas防止恶意代码,确保网络安全 ✅ 交易是与区块链交互的唯一方式
理论已经足够了!现在让我们动手实践:
👉 前往 Remix IDE 与开发环境,开始你的智能合约开发之旅!
相关资源: