以太坊中的计量单位及相互转换

以太币单位转换 首先我们来看一下以太币单位之间的转换,以太币的最小单位为wei,1个eth相当于10的18次方wei。通常,大家也使用Gwei作为展示单位。比较常用的就是eth,Gwei和wei。

单位 wei值 Wei
wei 1 1 wei
Kwei (babbage) 1e3 wei 1,000
Mwei (lovelace) 1e6 wei 1,000,000
Gwei (shannon) 1e9 wei 1,000,000,000
microether (szabo) 1e12 wei 1,000,000,000,000
milliether (finney) 1e15 wei 1,000,000,000,000,000
ether 1e18 wei 1,000,000,000,000,000,000
进制转换 为了使用和验证web3的操作命令,我们先进入geth的console控制台,在这里对具体的单位或进制转换进行详细的实例演示。
十六进制转十进制 此转换方法为web3.toDecimal(hexString)。直接在控制台输入一下命令进行使用此函数进行转换。
> web3.toDecimal('0x16'); 22

通过此函数将十六进制的0x16转换为十进制的22。
十进制转十六进制 转换函数:web3.fromDecimal(number)。
控制台命令及结果如下:
> web3.fromDecimal('22'); "0x16"

转换为BigNumber类型 【以太坊中的计量单位及相互转换】把给定数字或十六进制字符串转为 BigNumber 类型的实例。
> web3.toBigNumber('200000000000000000000001'); 2.00000000000000000000001e+23

此处转换需要注意的是BigNumber只会保留小数点后20位,超过20位的部分将会被截取掉。
以太币单位转换 上面表格中列出了以太币之间的单位进制,同样可以使用web3进行相应的转换,基本函数为web3.fromWei和web3.toWei(number, unit)。
具体实例如下:
// wei转换为ether > web3.fromWei('22000000000000', 'ether'); "0.000022"// wei转换为kwei > web3.fromWei('1000','kwei') "1"// wei转换为gwei > web3.fromWei('1000000000','gwei') "1"// ether转换为wei > web3.toWei('1','ether') "1000000000000000000"

其他的相关转换大家可自行尝试,下面列出相应的转换种类:
  • kwei/ada
  • mwei/babbage
  • gwei/shannon
  • szabo
  • finney
  • ether
  • kether/grand/einstein
  • mether
  • gether
  • tether
通过上面的函数,在交易的过程中我们就可以随意的单位进行发送交易,而不必使用最小单位wei。
> eth.sendTransaction({from:eth.coinbase,to:"0x2bda4364bb076187f0ef0067a61ccb95d636e383",value:web3.toWei(1,"ether")})

通过查询余额的方法,我们也可以看出区块链中存储这些数据的单位为wei。
> web3.eth.getBalance(eth.coinbase) 267999999999999999999

代币中的单位
在编写ERC-20的代币合约时我们可以指定代币的单位,比如:
uint8 public decimals;

这里就指定了代币单位精确到小数点后几位。比如精确到小数点后3位,那么1个代币存储时就是1000个最小单位的值。

    推荐阅读