Ether and Wei

发布于:2025-07-13 ⋅ 阅读:(17) ⋅ 点赞:(0)

本节是《Solidity by Example》的中文翻译与深入讲解,专为零基础或刚接触区块链开发的小白朋友打造。我们将通过“示例 + 解说 + 提示”的方式,带你逐步理解每一段 Solidity 代码的实际用途与背后的逻辑。

Solidity 是以太坊等智能合约平台使用的主要编程语言,就像写网页要用 HTML 和 JavaScript,写智能合约就需要会 Solidity。

如果你从没写过区块链代码也没关系,只要你了解一点点编程概念,比如“变量”“函数”“条件判断”,我们就能从最简单的例子开始,一步步建立你的 Solidity 编程思维。

Ether and Wei

交易使用以太(Ether)支付。

类似于一美元等于 100 美分,一以太(Ether)等于 10^18 Wei

  • 以太(Ether):

    • 以太坊的原生货币,用于支付交易费用(Gas)、转账或其他操作。
    • 类似于现实中的“美元”,是主要货币单位。
  • Wei:

    • 以太坊的最小货币单位,1 Ether = 10^18 Wei(即 1,000,000,000,000,000,000 Wei)。
    • 类似于“美分”,是更小的单位,用于精确计算。
  • 交易费用:

    • 在以太坊上,任何修改区块链状态的操作(例如转账、调用合约函数)都需要支付 Gas 费用,以 Ether 为单位。
    • Gas 费用最终以 Wei 计算,因为 Wei 提供了更高的精度。
  • 类比:

    • 就像 1 美元 = 100 美分,1 Ether = 10^18 Wei。
    • 以太坊还有其他单位(如 Gwei,1 Gwei = 10^9 Wei),用于不同场景。
// SPDX-License-Identifier: MIT
// 声明代码采用 MIT 开源许可证,这是一种常见的开源许可协议,允许自由使用、修改和分发代码。

pragma solidity ^0.8.26;
// 指定 Solidity 编译器版本必须大于或等于 0.8.26 并且小于 0.9.0。
// `pragma` 指令确保合约使用兼容的编译器版本,`^0.8.26` 表示支持 0.8.26 或更高版本(但不超过 0.9.0)。

contract EtherUnits {
    // 定义一个名为 `EtherUnits` 的智能合约。
    // 合约是一个运行在以太坊区块链上的程序,包含数据(状态变量)和逻辑(函数)。
    // 这个合约的目的是展示以太坊的货币单位:Wei、Gwei 和 Ether。

    uint256 public oneWei = 1 wei;
    // 声明一个名为 `oneWei` 的状态变量,类型为 `uint256`(256 位无符号整数)。
    // 初始化值为 `1 wei`,其中 `wei` 是 Solidity 中的单位,表示以太坊的最小货币单位(1 Wei)。
    // `public` 关键字表示该变量可以被外部访问,Solidity 会自动为其生成一个 getter 函数。
    // 存储在区块链上,默认值表示 1 Wei。

    // 1 wei is equal to 1
    // 1 Wei 等于 1
    bool public isOneWei = (oneWei == 1);
    // 声明一个名为 `isOneWei` 的状态变量,类型为 `bool`(布尔值)。
    // 初始化值为表达式 `(oneWei == 1)` 的结果。
    // 在 Solidity 中,`1 wei` 等价于数值 `1`,因此 `oneWei == 1` 结果为 `true`。
    // `public` 允许外部访问,存储在区块链上。

    uint256 public oneGwei = 1 gwei;
    // 声明一个名为 `oneGwei` 的状态变量,类型为 `uint256`。
    // 初始化值为 `1 gwei`,其中 `gwei` 是以太坊的货币单位,1 Gwei = 10^9 Wei(1,000,000,000 Wei)。
    // `public` 允许外部访问,存储在区块链上。

    // 1 gwei is equal to 10^9 wei
    // 1 Gwei 等于 10^9 Wei
    bool public isOneGwei = (oneGwei == 1e9);
    // 声明一个名为 `isOneGwei` 的状态变量,类型为 `bool`。
    // 初始化值为表达式 `(oneGwei == 1e9)` 的结果。
    // `1e9` 表示 10^9(1,000,000,000),因此 `1 gwei` 等价于 `10^9 Wei`,结果为 `true`。
    // `public` 允许外部访问,存储在区块链上。

    uint256 public oneEther = 1 ether;
    // 声明一个名为 `oneEther` 的状态变量,类型为 `uint256`。
    // 初始化值为 `1 ether`,其中 `ether` 是以太坊的主要货币单位,1 Ether = 10^18 Wei。
    // `public` 允许外部访问,存储在区块链上。

    // 1 ether is equal to 10^18 wei
    // 1 Ether 等于 10^18 Wei
    bool public isOneEther = (oneEther == 1e18);
    // 声明一个名为 `isOneEther` 的状态变量,类型为 `bool`。
    // 初始化值为表达式 `(oneEther == 1e18)` 的结果。
    // `1e18` 表示 10^18(1,000,000,000,000,000,000),因此 `1 ether` 等价于 `10^18 Wei`,结果为 `true`。
    // `public` 允许外部访问,存储在区块链上。
}

EtherUnits 是一个简单的智能合约,展示了以太坊的货币单位:WeiGweiEther。它通过状态变量存储这些单位的值,并用布尔变量验证它们的数值关系。

代码做什么?

  • 定义货币单位:
    • oneWei 存储 1 Wei 的值(等于 1)。
    • oneGwei 存储 1 Gwei 的值(等于 10^9 Wei)。
    • oneEther 存储 1 Ether 的值(等于 10^18 Wei)。
  • 验证单位换算:
    • isOneWei 验证 1 wei 是否等于 1(结果为 true)。
    • isOneGwei 验证 1 gwei 是否等于 10^9(结果为 true)。
    • isOneEther 验证 1 ether 是否等于 10^18(结果为 true)。
  • 公开访问:
    • 所有变量都是 public,可以通过自动生成的 getter 函数读取(例如 oneWei()isOneEther())。
    • 读取这些变量是 view 操作,链下调用免费。
  • Gas 成本:
    • 部署合约时,初始化这些状态变量需要 Gas(因为存储在区块链上)。
    • 读取变量(通过 getter 函数)是 view 操作,链下调用不消耗 Gas。

关键点:

  • 以太坊货币单位:
    • Wei:以太坊的最小单位,1 Wei = 1。
    • Gwei:1 Gwei = 10^9 Wei,常用于表示 Gas 价格(例如,20 Gwei 是常见的 Gas 价格)。
    • Ether:1 Ether = 10^18 Wei,是以太坊的主要货币单位。
  • Solidity 中的单位:
    • Solidity 提供关键字 weigweiether,可以直接在代码中使用。
    • 这些单位会被编译器转换为对应的 Wei 值(例如,1 ether 自动转换为 1000000000000000000)。
  • 状态变量:
    • oneWeioneGweioneEther 是状态变量,存储在区块链的 storage 中。
    • 初始化这些变量需要 Gas,因为它们会永久保存在区块链上。
  • 布尔验证:
    • isOneWeiisOneGweiisOneEther 使用比较运算(==)验证单位之间的关系。
  • 用途:
    • 理解货币单位对于编写智能合约至关重要,例如:
      • 处理转账(以 Wei 为单位)。
      • 设置 Gas 价格(通常以 Gwei 为单位)。
      • 显示用户余额(通常以 Ether 为单位)。

网站公告

今日签到

点亮在社区的每一天
去签到