区块链开发学习第二章:以太坊私有链创建账户与挖矿、转账
上文讲到怎么搭建以太坊私有链以及初始化、启动,本文记录下创建账户与多节点挖矿的过程
一、创建账户
##查看目前所有账户,返回为空“[]”,表示目前没有任何账户 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()
如果想挖到一个区块后自动停止挖矿可以这样:miner.start(1);admin.sleepBlocks(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
如果有学习计划的童鞋,可以加我QQ一起交流: