当前位置: 首页 > news >正文

Ether and Wei

本节是《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 等于 1bool 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 Weibool 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 Weibool 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 为单位)。
http://www.lryc.cn/news/586292.html

相关文章:

  • 实用技巧 Excel 与 XML互转
  • Python ExcelWriter详解:从基础到高级的完整指南
  • Flink创建执行环境的三种方式,也是Flink搭建程序的第一步
  • Python数据容器-集合set
  • 学习笔记 Datewhale MCP Server Task2
  • 【Redis实战】Widnows本地模拟Redis集群的2种方法
  • 【嵌入式】51单片机学习笔记-Keil5软件安装教程
  • 启动Haproxy失败,如何排查问题
  • 深度聚焦:潜在学员转化与流失管理——提升销售流程闭环
  • C语言<数据结构-单链表>(收尾)
  • 缓存三剑客解决方案
  • BaseDao 通用查询方法设计与实现
  • Raft 代码分析
  • 区块链平台之以太坊深入解读:技术、经济与生态的全面解析
  • el-tree 懒加载 loadNode
  • 可穿戴智能硬件在国家安全领域的应用
  • 【设计模式】装饰(器)模式 透明装饰模式与半透明装饰模式
  • Lua ADB 接口文档
  • GGE Lua 详细教程
  • C# 接口(派生成员作为实现)
  • nginx反向代理实现跨域请求
  • 分层架构的C++高并发内存池性能优化
  • STP生成树协议
  • Eureka实战
  • Linux - 安全排查 3
  • 带货视频评论洞察 Baseline 学习笔记 (Datawhale Al夏令营)
  • 【读书笔记】《C++ Software Design》第一章《The Art of Software Design》
  • 【大模型面试】50道大型语言模型(LLM)面试问题汇总,看完少走99%弯路!
  • 不止于监控:深入剖析OpenTelemetry的可观察性生态体系
  • LeetCode 3169.无需开会的工作日:排序+一次遍历——不需要正难则反,因为正着根本不难