当前位置: 首页 > 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.dtcms.com/a/275519.html

相关文章:

  • Spring 框架中的设计模式:从实现到思想的深度解析
  • 贪心算法题解——跳跃游戏【LeetCode】
  • AI大模型(七)Langchain核心模块与实战(二)
  • Android音视频探索之旅 | C++层使用OpenGL ES实现视频渲染
  • CTFHub————Web{信息泄露[Git泄露(log)]}
  • 《Java Web程序设计》实验报告五 Java Script学习汇报
  • Redis Geospatial 功能详解及多边形包含判断实现
  • win10安装Rust Webassembly工具链(wasm-pack)报错。
  • Rust Web 全栈开发(五):使用 sqlx 连接 MySQL 数据库
  • Rust Web 全栈开发(六):在 Web 项目中使用 MySQL 数据库
  • 前端note
  • 【推荐】前端低端机和弱网环境下性能优化
  • 前端面试专栏-算法篇:24. 算法时间与空间复杂度分析
  • 在前端开发中关于reflow(回流)和repaint(重绘)的几点思考
  • MySQL 中图标字符存储问题探究:使用外挂法,毕业论文——仙盟创梦IDE
  • AI驱动的大前端内容创作与个性化推送:资讯类应用实战指南
  • 容器化改造避坑指南:传统应用迁移K8s的10个关键节点(2025实战复盘)
  • CSS flex
  • Capsule Networks:深度学习中的空间关系建模革命
  • GGE Lua 详细教程
  • 《Java Web程序设计》实验报告四 Java Script前端应用和表单验证
  • 基于Java的Markdown到Word文档转换工具的实现
  • 基于大模型的鼻咽癌全周期预测及诊疗优化研究报告
  • EPLAN 电气制图(七):电缆设计全攻略
  • 系统学习Python——并发模型和异步编程:基础实例-[使用进程实现旋转指针]
  • 代码训练LeetCode(45)旋转图像
  • 【算法笔记】7.LeetCode-Hot100-图论专项
  • 【node/vue】css制作可3D旋转倾斜的图片,朝向鼠标
  • 每日算法刷题Day46 7.12:leetcode前缀和3道题和差分2道题,用时1h30min
  • 代码训练LeetCode(46)旋转图像