一、进入Geth命令行模式
建立一个新的私有链
geth --datadir "./" --nodiscover console 2>>geth.log
进入命令行模式,其中参数
-datadir 代表文件夹地址,
-nodiscover 代表该链条不希望被其他节点发现,
console >> geth.log 代表将控制台输出带文件geth.log中去,
退出,只要输入exit就可以退出了。
Geth命令行中的Eth.accounts
我们在命令行输入eth.accounts 可以看到当前区块链中共有几个账户,以及每个账户的公钥地址。
p15.png
以太坊账户体系:
在以太坊系统中,状态是由被称为“账户”(每个账户由20个字节的地址)的对象和在两个账户之间转移价值和信息的状态转换构成的。以太坊的账户包含四个部分:
随机数,用于确定每笔交易只能被处理一次的计数器
账户目前的以太币余额
账户的合约代码,如果有的话
账户的存储(默认为空)
简单的说,每个以太坊账户都有一对公钥和私钥组成。
公钥我们可以理解为就是账户的地址,任何其他账户都可以访问该地址
私钥可以理解为一段加密过的密码,这一对公钥和私钥共同组成一个唯一标识的以太坊账户。
上边建立的以太坊账户eth.accounts[0]中,地址0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f就是公钥,而对密码加密而成的,就是私钥。
如何新增账户
我们在命令行输入personal.newAccount("Geek") 来新建一个账户,(Geek是密码)
p24.png
这个时候我们可以看到除了第一个账户0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f之外,还新增了另一个账户 0xb8b12a801b610176935a15321f77b48dd5c0c448, 此时输入eth.accounts, 就可以很轻松的看到有两个账户的公钥地址。
如何获取账户的以太币余额
当以太坊的私有连在挖矿的时候,所挖到的以太币都会存入第一个以太坊账户中,即eth.accounts[0]中,而eth.accounts[1]默认是不会有以太币的。这个时候我们可以用下边的命令来查看以太币余额,eth.accounts[0].
eth.getBalance("0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f")
eth.getBalance("0xb8b12a801b610176935a15321f77b48dd5c0c448")
p112.png
说明:其中0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f是第一个账户的地址,
0xb8b12a801b610176935a15321f77b48dd5c0c448 是第二个账户的地址。
可以看出,挖矿得来的以太币全部都进了第一个账户,同时每个账户的公钥是该账户的核心。通过公钥我们可以对该账户的以太币进行增删改查各种操作。
如何在两个账户之间进行以太币转换
前面说过的每个账户的公钥(地址)是一切以太坊账户的核心,但地址字符串太长,我们用acc0/acc1分别代表accounts[0]和[1],另外设置要转移0.01个以太币。
这个时候我们可以使用eth.sendTransation来将0.01个以太币从acc0转移到acc1中。
[>] eth.sendTransaction({from: acc0, to: acc1, value: amount})
结果如下:
import_geth_command04.png
显示转移被拒绝了,主要原因是这是以太坊的保护机制,每隔一段时间账户就会自动锁定,这个时候任何以太币在账户之间的转换都会被拒绝,除非把该账户解锁。
这个时候我们就需要执行 personal.unlockAccount(acc0) 并输入密码来解锁acc0才可。
> personal.unlockAccount(acc0)
Unlock account 0xbcf5b841303bc08026ce2d3b8f83498ffe42c12f
Passphrase:
true
>
此时输入合约部署的实例 a_demotypes,可以看到a_demotypes的详情。
> a_demotypes { abi: [{ constant: false, inputs: [{...}], name: "f", outputs: [{...}], payable: false, type: "function" }], address: "0x54ed7a5f5a63ddada3bfe83b3e632adabaa5fc2f", transactionHash: "0x69cde62bcd6458e14f40497f4840f422911d63f5dea2b3a9833e6810db64a1c9", allEvents: function(), f: function() } >
也可以调用a_demotypes的方法f,输入任何数字,会返回8*n,输入100,返回800,输入125,返回1000
> a_demotypes.f.call(100) 800 > a_demotypes.f.call(125) 1000
二、以太坊单位换算
Ether币的最小单位是Wei,也是命令行默认的单位,然后每1000个进一个单位,依次是:
kwei (1000 Wei)
mwei (1000 KWei)
gwei (1000 mwei)
szabo (1000 gwei)
finney (1000 szabo)
ether (1000 finney)
简单说1eth = 1000000000000000000 Wei.
三、如何进行ether 和Wei 之间的转换
Ether -> Wei:web3.toWei
> web3.toWei(1)
"1000000000000000000"
> web3.toWei(1.3423423)
"1342342300000000000"
> web3.toWei(0.00034)
"340000000000000"
>
Wei –> Ether: web3.fromWei
> web3.fromWei(10000000000000000)
"0.01"
> web3.fromWei(1000000000000000000)
"1"
>
小工具:一个以太币单位之间的转换工具
网友评论