Skip to content

什么是 Wei

在以太坊世界中,Wei 是一个关键概念,它是这个区块链网络中最小的以太单位。随着加密货币的普及,理解各种面值变得至关重要,以实现在以太坊生态系统内的无缝交易和互动。让我们深入探讨 Wei 和它在加密货币领域的重要性。

Wei 的名字是以密码学家 Wei Dai 命名的,它代表了以太坊网络的基本构建块。换句话说,10 亿个 Wei 相当于一个以太币。随着以太币的价值波动,Wei 充当了基本单位,促进微小交易,并使用户能够交易这种受欢迎的加密货币的最小分数。其中包括 Kwei、Mwei、Gwei 等等。然而,Gwei 因其实用性和易用性而受到了广泛的欢迎和采用。

什么是 Gwei

Gwei,即 Gigawei 的缩写,表示 10 亿个 Wei 单位。换句话说,一个 Gwei 等于十亿个 Wei。以太坊网络主要在处理燃气费时使用 Gwei 作为单位选择。对于那些不熟悉的人来说,燃气费是在以太坊区块链上执行智能合约或任何其他交易时产生的费用。

Wei 转换为以太币

除了将 Wei 转换为 Gwei,还了解如何将 Wei 转换为更常见的以太币也是很重要的。要做到这一点,将 Wei 的数量除以 10¹⁸,这是一个重要的数字,因为一个以太币由 100,000,000,000,000,000 个 Wei 组成。举个例子,如果你拥有 100 万亿个 Wei,将其除以 10¹⁸ 将得到 0.0001 以太币。对于开发人员,通过 Chainbase SDK 的 formatEther 方法轻松地将 Wei 转换为以太币。通过使用这种方法,你可以轻松地从特定地址获取余额,然后将其格式化为以太币。这种方便高效的方法简化了各种基于以太坊的应用和服务,提升了整个网络中的用户体验。参考下面这张图

ETH单位转换

在 ethers 中的单位的使用

以下内容是从 WTF Academy 中摘录的,以供参考。 由于在 JavaScript 中,最大的安全数是9007199254740991,超过这个数就要用 BigInt。 可以用 ethers.getBigInt()函数将 string,number 等类型转换为 BigInt,代码如下:

js
const oneGwei = ethers.getBigInt('1000000000') // 从十进制字符串生成
console.log(oneGwei)
console.log(ethers.getBigInt('0x3b9aca00')) // 从hex字符串生成
console.log(ethers.getBigInt(1000000000)) // 从数字生成
// 不能从js最大的安全整数之外的数字生成BigNumber,下面代码会报错
// ethers.getBigInt(Number.MAX_SAFE_INTEGER);
console.log('js中最大安全整数:', Number.MAX_SAFE_INTEGER)

注意:数值带后缀 n 会自动转换成 BigInt

基本运算

js
// 运算
console.log('加法:', oneGwei + 1n)
console.log('减法:', oneGwei - 1n)
console.log('乘法:', oneGwei * 2n)
console.log('除法:', oneGwei / 2n)

在 ethers 中单位转换 API

  • formatUnits(变量, 单位): 小单位转大单位 wei->ether
js
//代码参考:https://docs.ethers.org/v6/api/utils/#about-units
console.group('\n2. 格式化:小单位转大单位,formatUnits')
console.log(ethers.formatUnits(oneGwei, 0))
// '1000000000'
console.log(ethers.formatUnits(oneGwei, 'gwei'))
// '1.0'
console.log(ethers.formatUnits(oneGwei, 9))
// '1.0'
console.log(ethers.formatUnits(oneGwei, 'ether'))
// `0.000000001`
console.log(ethers.formatUnits(1000000000, 'gwei'))
// '1.0'
console.log(ethers.formatEther(oneGwei))
// `0.000000001` 等同于formatUnits(value, "ether")
console.groupEnd()
  • parseUnits(变量, 单位): 大单位转小单位 ether->wei
js
// 3. 解析:大单位转小单位
// 例如将ether转换为wei:parseUnits(变量, 单位),parseUnits默认单位是 ether
// 代码参考:https://docs.ethers.org/v6/api/utils/#about-units
console.group('\n3. 解析:大单位转小单位,parseUnits')
console.log(ethers.parseUnits('1.0').toString())
// { BigNumber: "1000000000000000000" }
console.log(ethers.parseUnits('1.0', 'ether').toString())
// { BigNumber: "1000000000000000000" }
console.log(ethers.parseUnits('1.0', 18).toString())
// { BigNumber: "1000000000000000000" }
console.log(ethers.parseUnits('1.0', 'gwei').toString())
// { BigNumber: "1000000000" }
console.log(ethers.parseUnits('1.0', 9).toString())
// { BigNumber: "1000000000" }
console.log(ethers.parseEther('1.0').toString())
// { BigNumber: "1000000000000000000" } 等同于parseUnits(value, "ether")
console.groupEnd()