zoukankan      html  css  js  c++  java
  • 区块链开发学习第二章:以太坊私有链创建账户与挖矿、转账

    上文讲到怎么搭建以太坊私有链以及初始化、启动,本文记录下创建账户与多节点挖矿的过程

    一、创建账户

    ##查看目前所有账户,返回为空“[]”,表示目前没有任何账户
    eth.accounts
    
    ##创建账户,会要求输入以及确认密码
    personal.newAccount()
    
    ##或者直接通过此命令创建账户,123456即密码
    personal.newAccount('123456')

    可能有人会疑问,以太坊的账户不都是公私钥么,创建账户时输入的密码是做什么的。确实每个账户都由一公私钥组成的,上面生成的账户地址是由公钥衍生而来,取公钥的最后20个字节,公私钥都在keystore的json文件里面,而里面最关键的私钥就是用我们创建账户时输入的密码加密生成的。

    上面的操作可以看到生成了两个账户,在上文中说过的data目录中会出现keystore目录,里面即为我们刚才创建的两个账户,文件名即为账户地址

    二、挖矿

    创建完账户,每个账户里面都没有eth,所以需要开启挖矿

    ##查看账户余额,结果理所当然为0
    eth.getBalance(eth.accounts[0])
    0
    
    ##查看挖矿账户,默认挖到的eth是存在eth.coinbase账户中的,也就是第一个账户
    eth.coinbase
    "0x229ea411d368c97b008c7bc19b01fdd813163701"
    
    ##如果想要把挖到的矿存入其他账户,可以使用以下命令,我自己还是默认的第一个账户
    miner.setEtherbase(eth.accounts[1])
    true
    
    ##使用miner.start()命令开启挖矿
    miner.start()

    我这边执行完miner.start()后是直接返回的null,这里我查了下,有的说是没有执行miner.setEtherbase(eth.accounts[0])设置账户,正常默认就是第一个账户,而且我执行了这个也还是null。也还有人说是节点误报,miner.start()命令已经执行成功,只不过节点返回null。我试了下eth.blockNumber查看区块高度,确实是增加了,说明我的符合这种情况,开启挖矿时,通过tail -f geth.log命令查看上文中的日志文件,能看到正在挖矿的

     随后查看第一个账户余额

    eth.getBalance('0x229ea411d368c97b008c7bc19b01fdd813163701')
    828000000000000000000

    发现了好多零,此时不能被这个数字吓到,这里默认显示的以 wei 为单位的,而 1 ether = 10^18 wei,所以我们转换一下单位

    web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
    828

    其实就是828个ether

    至于上面的返回null的问题,很多人说是geth版本更新后 --dev模式下新增了参数问题,需要在启动时在后面添加–dev.period 1  具体的我就没试了,反正是为了自己测试用账户有币就行了

    结束挖矿使用miner.stop()

    三、转账

    转账前要先解锁账户

    personal.unlockAccount(eth.accounts[0])
    Unlock account 0x229ea411d368c97b008c7bc19b01fdd813163701

    转8个ether给账户2

    eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(8,'ether')})
    "0xaa93ea1ed3ba359090af15ea678b93493f0c5c4310d7ef6b9c3ca80a27b82088"

    但是此时账户2里面还是没有ether的

    eth.getBalance(eth.accounts[1])
    0

    因为转账还没被确认,需要开启挖矿等待确认

    ##通过查看txpool来验证
    txpool.status { pending:
    1, queued: 0 }

    其中有一条pending的交易,pending表示已提交但还未被处理的交易

    ##开启挖矿
    miner.start()
    ##几秒后停止挖矿
    miner.stop()
    ##查看账户2余额
    eth.getBalance(eth.accounts[1])
    8000000000000000000
  • 相关阅读:
    初认识AngularJS
    (imcomplete) UVa 10127 Ones
    UVa 10061 How many zero's and how many digits?
    UVa 11728 Alternate Task
    UVa 11490 Just Another Problem
    UVa 10673 Play with Floor and Ceil
    JSON对象和字符串的收发(JS客户端用typeof()进行判断非常重要)
    HTML.ActionLink 和 Url.Action 的区别
    EASYUI TREE得到当前节点数据的GETDATA方法
    jqueery easyui tree把已选中的节点数据拼成json或者数组(非常重要)
  • 原文地址:https://www.cnblogs.com/I-will-be-different/p/15506215.html
Copyright © 2011-2022 走看看