架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1099|回复: 0

以太坊的账户和基本单位

[复制链接]
发表于 2018-2-24 11:18:33 | 显示全部楼层 |阅读模式
在以太坊系统中,状态是由被称为“账户”(每个账户由一个20字节的地址)的对象和在两个账户之间转移价值和信息的状态转换构成的。
以太坊的账户包含四个部分:
随机数,用于确定每笔交易只能被处理一次的计数器
账户目前的以太币余额
账户的合约代码,如果有的话
账户的存储(默认为空)
简单地说,每一个以太坊账户都有一对公钥和私钥组成。
公钥我们可以理解为就是账户地址,任何其他账户都可以访问该地址
私钥可以理解为一段加密过的密码,这一对公钥和私钥共同组成一个唯一标示的以太坊账户。
例如在上节我们建立的第一个以太坊账户 eth.accounts[0] 中,地址 0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f 就是公钥,而对密码加密而成的,就是私钥。
增加账户
我们可以输入命令 personal.newAccount(“123”) 来新建一个账户,(注意123可以修改为任何别的密码)

当以太坊的私链在挖矿时候,所挖到的以太币都会存入第一个以太坊账户中,即eth.accounts[0] 中,而eth.accounts[1]默认是不会有以太币的。这个时候我们可以用下面的命令来查看eth.accounts[0] 中的以太币余额。

  1. eth.getBalance("0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f")
复制代码

如何在两个账户之间进行以太币转换
前面说过每个账户的公钥(地址)是一切以太坊账户操作的核心,但地址字符串太长,我们用acc0/acc1 分别代表accounts[0]和[1],另外设置要转移0.01个以太币

  1. > acc0 = eth.accounts[0]
  2. "0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f"
  3. > acc1 = eth.accounts[1]
  4. "0xb8b12a801b610176935a15321f77b48dd5c0c448"
  5. > amount = web3.toWei(0.01)
  6. "10000000000000000"
复制代码

这个时候我们可以使用eth.sendTransaction来将0.01个以太币从acc0转移到acc1中。

  1. > eth.sendTransaction({from: acc0, to: acc1, value: amount})
复制代码


以太坊的一个保护机制,每隔一段时间账户就会自动锁定,这个时候任何以太币在账户之间的转换都会被拒绝,除非把该账户解锁.
这个时候我们就需要执行 personal.unlockAccount(acc0) 并输入密码来解锁acc0才可。

  1. > personal.unlockAccount(acc0)
  2. Unlock account 0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f
  3. Passphrase:
  4. true
  5. >
复制代码

这个时候我们重新执行命令eth.sendTransaction({from: acc0, to: acc1, value: amount}), 结果如下:

  1. > eth.sendTransaction({from: acc0, to: acc1, value: amount})
  2. "0xeea74dd5ff3f1287614d52ebb674edb93e8c5e51e4296835044d3d858d3d9f10"
  3. > eth.getBalance(acc1)
  4. 10000000000000000
  5. >
复制代码

我们可以看到这个时候acc1有了数值10000000000000000, 而不再是之前的0了。但我们明明要给0.01ether币的,为何数值会如此大呢? 其实是对的,我们只要输入命令web3.fromWei(10000000000000000,”ether”) 就可以知道了。

  1. > web3.fromWei(10000000000000000,"ether")
  2. "0.01"
复制代码

Ether币的基本单位
Ether币最小的单位是Wei,也是命令行默认的单位, 然后每1000个进一个单位,依次是

kwei (1000 Wei)
mwei (1000 KWei)
gwei (1000 mwei)
szabo (1000 gwei)
finney (1000 szabo)
ether (1000 finney)

简单地说就是就是1 以太币 = 1000000000000000000 Wei (这就是上一站章中为何我们转移0.01个以太币,结果却显示很长的原因)
如何进行ether 和 Wei之间的转换

  1. Ether–> Wei:web3.toWei
  2. > web3.toWei(1)
  3. "1000000000000000000"
  4. > web3.toWei(1.3423423)
  5. "1342342300000000000"
  6. > web3.toWei(0.00034)
  7. "340000000000000"
复制代码
  1. Wei –> Ether: web3.fromWei
  2. > web3.fromWei(10000000000000000)
  3. "0.01"
  4. > web3.fromWei(1000000000000000000)
  5. "1"
  6. >
复制代码

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2018-9-25 22:46

Powered by Discuz! X3.4

© 2001-2014 Comsenz Inc.

快速回复 返回顶部 返回列表