以太坊中以太币及代币计量单位

无论是构建交易进行以太币的转账或是调用智能合约进行代币的发放,单位都是不可或缺的。今天就带大家详细了解一下以太坊中以太币和代币的单位,以及如何通过web3的方式进行操作。

以太币单位转换

首先我们来看一下以太币单位之间的转换,以太币的最小单位为wei,1个eth相当于10的8次方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控制台,在这里对具体的单位或进制转换进行详细的实例演示。

启动geth,进入控制台命令:

/Users/zzs/develop/eth/geth/geth attach rpc:/Users/zzs/Library/Ethereum/geth.ipc

可根据自己的具体情况调整geth路径和ipc路径。

十六进制转十进制

此转换方法为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个最小单位的值。

更多资讯

**获取更多资讯,请关注微信公众号:程序新视界。或加入QQ技术交流群:659809063。

本人诚接以太坊相关研发及技术支持,如有需要请联系QQ:541075754。非诚勿扰。**

这里写图片描述

更多交流技术资讯请扫码加入知识星球(小密圈)

这里写图片描述

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一块探索区块链

基于Java语言构建区块链(六)—— 交易(Merkle Tree)

在这一系列文章的最开始部分,我们提到过区块链是一个分布式的数据库。那时候,我们决定跳过"分布式"这一环节,并且聚焦于"数据存储"这一环节。到目前为止,我们几乎实...

64480
来自专栏V站

php时间函数 time()和Date()详解

使用函式 date() 实现  <?php echo $showtime=date("Y-m-d H:i:s");?>  显示的格式: 年-月-日 小时:分...

1K60
来自专栏芋道源码1024

我的编码习惯 —— API 接口定义

工作中,少不了要定义各种接口,系统集成要定义接口,前后台掉调用也要定义接口。接口定义一定程度上能反应程序员的编程功底。列举一下工作中我发现大家容易出现的问题:

15940
来自专栏云时之间

如何创建一个最小的区块链

这是我在一个外文网站上看到的一篇博文,作者通过50行代码写出了区块链的简化版本.麻雀虽小,但是五脏俱全.我觉得通过实践,这是了解区块链的一个好的方式.于是我将代...

81960
来自专栏数据库

httpclient如何快速往数据库里添加测试用例

本人在使用httpclient做接口测试的过程中,使用数据库管理用例,其中存的key-value的形式,由于接口的参数可能比较多,所以一个个用例写起来会比较麻烦...

21290
来自专栏NetCore

[原创]Fluent NHibernate之旅(三)-- 继承

经过了“开篇”和“简单映射”两篇文章,相信大家对Fluent NHibernate 有了一定的了解了,FluentNHibernate实际就是对 NHibern...

20580
来自专栏程序猿DD

程序员你为什么这么累[续]:编码习惯之接口定义

前传传送门:程序员你为什么这么累? 工作中,少不了要定义各种接口,系统集成要定义接口,前后台掉调用也要定义接口。接口定义一定程度上能反应程序员的编程功底。列举一...

381100
来自专栏从流域到海域

《笨办法学Python》 第37课手记

《笨办法学Python》 第37课手记 本节课是复习课。关键字是指系统预先定义好的含有特定含义的字符串或者函数,注意你在自定义函数时不能与关键字重名。可是该课中...

199100
来自专栏个人随笔

C#编写影院售票系统(A project with a higher amount of gold )(1:项目需求 ,思路分析与窗体效果)

此篇文章为项目需求 ,思路分析与窗体效果,,,需要相关代码请访问:http://www.cnblogs.com/lsy131479/p/8367314.html...

32160
来自专栏Android开发实战

设计模式-访问者模式

访问者模式的基本想法是,软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象的类都拥有一个 accept 方法用来接受访问者对象的访问。访问者是一个...

13030

扫码关注云+社区

领取腾讯云代金券