以太坊中代币数量的计量单位说明

原文首发于个人主页:https://huangwenwei.com/blogs/ethereum-unit

Unit Wei Value 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

geth js 方法

  • web3.toDecimal
    十六进制字符串转为十进制数字
web3.toDecimal(hexString)
var number = web3.toDecimal('0x15');
console.log(number); // 21
  • web3.fromDecimal
    十进制数字或者十进制字符串转为十六进制
var value = web3.fromDecimal('21');
console.log(value); // "0x15"
  • web3.fromWei
    把 wei 转为如下种类的以太坊单位(还有其他代币token单位)

    • kwei/ada
    • mwei/babbage
    • gwei/shannon
    • szabo
    • finney
    • ether
    • kether/grand/einstein
    • mether
    • gether
    • tether
    var value = web3.fromWei('21000000000000', 'ether');
    console.log(value); //0.000021
    
  • web3.toWei
    把以太坊单位(包含代币单位)转为 wei

    var value = web3.toWei('1', 'ether');
    console.log(value); // "1000000000000000000"
    
  • web3.toBigNumber(numberOrHexString)
    把给定数字或十六进制字符串转为 BigNumber 类型的实例。

var value = web3.toBigNumber('200000000000000000000001');
console.log(value); // instanceOf BigNumber
console.log(value.toNumber()); // 2.0000000000000002e+23
console.log(value.toString(10)); // '200000000000000000000001'

关于 BigNumber 需要注意点请看 note on BigNumber

例子

举个交易的例子

>eth.sendTransaction({from:eth.coinbase,to:"0x2bda4364bb076187f0ef0067a61ccb95d636e383",value:web3.toWei(1,"ether")})

转账的数量是1个 ether(以太币)
web3.toWei(1,"ether")把以太币转为 wei
再来通过获取以太坊账户的余额看看在区块链中这些代币数量的存储方式。

> web3.eth.getBalance(eth.coinbase)
267999999999999999999
> web3.fromWei(web3.eth.getBalance(eth.coinbase),"ether")
267.999999999999999999

可以看出,在交易过程中,无论交易的代币是什么,都需要把这些代币转为 wei 存储在以太坊区块链中。
上面获取账户余额例子中,就是获取钱包中 coinbase 账户的余额,得到的结果单位是 wei ,我们通过 fromWei 把wei转为了ether(以太币)

你可能感兴趣的:(以太坊中代币数量的计量单位说明)