美文网首页智能合约开发
【区块链基础04】-以太坊Geth基本命令

【区块链基础04】-以太坊Geth基本命令

作者: Geeks_Chen | 来源:发表于2018-02-01 17:26 被阅读262次

    一、进入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" 
    >
    

    小工具:一个以太币单位之间的转换工具

    http://ether.fund/tool/converter

    参照资料:http://www.8btc.com/eth-geth

    相关文章

      网友评论

        本文标题:【区块链基础04】-以太坊Geth基本命令

        本文链接:https://www.haomeiwen.com/subject/ugrfzxtx.html