以太坊智能合约开发基础

  • DeCert.me
  • 发布于 2025-11-21 17:53
  • 阅读 144

以太坊基础

在开始智能合约开发之前,让我们先了解一些以太坊的核心概念。这些概念会帮助大家理解智能合约在区块链上是如何运行的。

什么是以太坊?

以太坊(Ethereum)是一个去中心化应用平台,它允许任何人创建和运行通过区块链技术支持的应用程序,通常大家会称之为 Web3 应用或 DApp。

Web3 应用与传统Web应用的架构上有所不同:

image.png

传统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() 函数让计数器加 1
  • get() 函数获取当前计数器的值

每次调用 count() 函数,区块链的状态就会改变,这个改变是永久的、不可篡改的。

账户和地址

当我们将上面的 Counter 合约部署到链上后,它会有一个地址来表示,这就是合约账户

以太坊中有两种账户:

1. 外部账户(EOA - Externally Owned Account)

  • 由用户的私钥控制
  • 可以发起交易
  • 需要支付 Gas 费用
  • 例如:你的 MetaMask 钱包地址

2. 合约账户(Contract Account)

  • 由智能合约代码控制
  • 只能被动响应调用
  • 不能主动发起交易
  • 例如:部署的 Counter 合约地址

两种账户都使用相同的地址格式:

0xea674fdde714fd979de3edf0f56aa9716b898ec8

这是一个 20 字节的十六进制数。

关键区别

  • ✅ 只有外部账户可以发起交易
  • ✅ 所有的 Gas 费用必须由外部账户支付
  • ✅ 合约账户只能响应外部账户的调用

账户交互

绿色箭头表示发起交易,灰色箭头表示合约间调用

以太币和 Gas

以太币(Ether)

以太币是以太坊的原生代币,用于支付交易费用。最常用的单位换算:

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)
  • ETH/Ether:日常使用的单位,如"我有 0.5 ETH"
  • Gwei:Gas 价格常用单位,如"Gas 价格是 20 Gwei"
  • wei:最小单位,开发中常用

Gas -> 燃料

Gas 是在其他编程语言中没有的概念,我们先用生活中的例子理解 Gas 的机制:

想象一下打车的场景:

  • 🚗 出租车的里程表 = Gas 使用量(跑了多远)
  • 💰 每公里的单价 = Gas 价格(愿意付多少钱/公里)
  • 💳 最终车费 = 里程 × 单价

在以太坊中,Gas 的作用类似:

  • 合约执行的每个操作都会消耗一定的 Gas (工作量的表示)
  • 你愿意支付的 Gas 价格决定了交易被矿工处理的优先级
  • 最终费用 = Gas 使用量 × Gas 价格

为什么需要 Gas?

以太坊的智能合约是"图灵完备"的,可以编写执行任何任务的程序。但这也意味着恶意代码可能会无限循环,消耗所有计算资源。Gas 机制就像出租车的计价器,防止有人让车一直跑而不付钱

Web2 vs Web3 费用对比

对比项 Web2(传统互联网) Web3(区块链)
谁支付费用? 通常由公司承担服务器成本 用户为每笔交易支付 Gas
费用透明度 不透明,隐藏在服务背后 完全透明,每笔交易都可查
费用计算 包月/包年等固定模式 按实际计算量动态计费
谁获得收益? 公司收取服务费 矿工获得 Gas 费用
读取数据 可能产生流量费 完全免费 ✅
修改数据 通常免费 需要支付 Gas 💰

Gas 如何运作?

每次执行交易或调用合约时,需要消耗 Gas:

交易费用 = Gas 使用量 × Gas 价格
  • Gas 使用量:操作的复杂度决定(由 EVM 计算)

    • 简单转账:约 21,000 Gas
    • 部署合约:几十万到上百万 Gas
    • 调用合约函数:根据复杂度而定, 例如写一个数据到链上比普通的计算贵
    • 纯读取操作(如调用 get())不消耗 Gas
  • Gas 价格:你愿意为每单位 Gas 支付多少(由用户设置)

    • 网络拥堵时,Gas 价格会上涨
    • 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:

  • 消耗:45,000 × 20 Gwei = 0.0009 ETH
  • 退还:55,000 × 20 Gwei = 0.0011 ETH

以太坊交易

在以太坊上,所有操作都通过交易来完成。交易有三种类型:

1. 普通转账

向另一个地址转移以太币:

{
  "to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
  "value": "0.5 ETH",
  "data": "0x"
}

普通转账的data 数据为空,这个与合约调用的重要区别。

2. 部署合约

创建一个新的智能合约:

{
  "to": "",
  "value": "0",
  "data": "0x6060604052341561000c..." // 合约字节码
}

注意 to 字段为空,表示这是创建合约的交易。

3. 调用合约函数

与已部署的合约交互:

{
  "to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85", // 合约地址
  "value": "0",
  "data": "0x06661abd" // 函数调用数据
}

data 字段包含了要调用的函数信息和参数。

小结

恭喜!你现在已经了解了以太坊智能合约开发的核心概念:

以太坊是一个去中心化应用平台 ✅ 智能合约是运行在区块链上的程序 ✅ 账户分为外部账户(由人控制)和合约账户(由代码控制) ✅ 以太币用于支付交易费用,最小单位是 wei ✅ Gas防止恶意代码,确保网络安全 ✅ 交易是与区块链交互的唯一方式

下一步:开始实践

理论已经足够了!现在让我们动手实践:

  • 设置开发工具(Remix IDE 和 MetaMask 钱包)
  • 编写你的第一个智能合约
  • 部署到测试网络
  • 与合约进行交互

👉 前往 Remix IDE 与开发环境,开始你的智能合约开发之旅!


相关资源

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论