进入Geth 命令行模式
在上一篇文章中,我们说到,我们可以用下面命令,建立一个新的私有链
geth --datadir "./" --nodiscover console 2>>geth.log
进入命令行模式,其中参数
- –datadir 代表文件夹地址,
- –nodiscover 代表该链条不希望被其他节点发现,
- console >> geth.log 代表将控制台输出到文件geth.log中去
- 输入 exit, 即可退出命令行模式
Geth命令行中的 Eth.accounts
我们在命令行输入 eth.accounts 可以看到当前该区块链中共有几个账号,以及每个账号的公钥地址。
这里就要说到以太坊的账户体系了,
在以太坊系统中,状态是由被称为“账户”(每个账户由一个20字节的地址)的对象和在两个账户之间转移价值和信息的状态转换构成的。以太坊的账户包含四个部分:
- 随机数,用于确定每笔交易只能被处理一次的计数器
- 账户目前的以太币余额
- 账户的合约代码,如果有的话
- 账户的存储(默认为空)
- 简单地说,每一个以太坊账户都有一对公钥和私钥组成。
公钥我们可以理解为就是账户地址,任何其他账户都可以访问该地址
私钥可以理解为一段加密过的密码,这一对公钥和私钥共同组成一个唯一标示的以太坊账户。
例如在上节我们建立的第一个以太坊账户 eth.accounts[0]
中,地址 0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f
就是公钥,而对密码加密而成的,就是私钥。
如何新增账户
我们可以输入命令 personal.newAccount("123")
来新建一个账户,(注意123可以修改为任何别的密码)
这个时候我们可以看到除了第一个账户0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f
之外,还新增了另一个账户 0xb8b12a801b610176935a15321f77b48dd5c0c448
, 此时输入eth.accounts
, 就可以很轻松的看到有两个账户的公钥地址。
如何获取账户的以太币余额
在上一章中我们说过,当以太坊的私链在挖矿时候,所挖到的以太币都会存入第一个以太坊账户中,即eth.accounts[0] 中,而eth.accounts[1]默认是不会有以太币的。这个时候我们可以用下面的命令来查看eth.accounts[0] 中的以太币余额。
eth.getBalance("0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f")
eth.getBalance("0xb8b12a801b610176935a15321f77b48dd5c0c448")
- 其中
0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f
是第一个账户的地址, -
0xb8b12a801b610176935a15321f77b48dd5c0c448
是第二个账户的地址 结果如下:
从上我们可以看得很清楚,挖矿得来的以太币都进了第一个账户,同时每个账户的公钥是该账户的核心。通过公钥我么可以对该账户的以太币进行增删改查各种操作
如何在两个账户之间进行以太币转换
前面说过每个账户的公钥(地址)是一切以太坊账户操作的核心,但地址字符串太长,我们用 acc0/acc1 分别代表 accounts[0] 和 accounts[1],另外设置要转移 0.01 个以太币
> acc0 = eth.accounts[0]
"0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f"
> acc1 = eth.accounts[1]
"0xb8b12a801b610176935a15321f77b48dd5c0c448"
> amount = web3.toWei(0.01)
"10000000000000000"
这个时候我们可以使用 eth.sendTransaction 来将 0.01 个以太币从 acc0 转移到 acc1 中。
> eth.sendTransaction({from: acc0, to: acc1, value: amount})
结果如下:
这个是以太坊的一个保护机制,每隔一段时间账户就会自动锁定,这个时候任何以太币在账户之间的转换都会被拒绝,除非把该账户解锁.
这个时候我们就需要执行 personal.unlockAccount(acc0)
并输入密码来解锁 acc0 才可。
> personal.unlockAccount(acc0)
Unlock account 0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f
Passphrase:
true
>
这个时候我们重新执行命令 eth.sendTransaction({from: acc0, to: acc1, value: amount})
, 结果如下:
> eth.sendTransaction({from: acc0, to: acc1, value: amount})
"0xeea74dd5ff3f1287614d52ebb674edb93e8c5e51e4296835044d3d858d3d9f10"
> eth.getBalance(acc1)
10000000000000000
>
我们可以看到这个时候 acc1 有了数值 10000000000000000, 而不再是之前的 0 了。但我们明明要给 0.01 ether 币的,为何数值会如此大呢? 其实是对的,我们只要输入命令 web3.fromWei(10000000000000000, "ether")
就可以知道了。
> web3.fromWei(10000000000000000,"ether")
"0.01"
为什么呢,这个就涉及到以太坊的基本单位了,我们下章讲解.