一节课的知识当然不止我写的这一点点啦,我这里写的理论知识只是我觉得需要单拎出来强调一下的内容,是按我的理解总结出来的,如果有说的不对的地方欢迎师傅们指正~
一、理论知识
1.什么叫“挖矿”?
消耗你的计算机资源去找到一串随机数,满足其哈希值的前4位为0,这个过程就叫挖矿。
该台计算机就称为矿工。
而比特币是对挖矿的奖励机制。
2.数字签名
关于对数字签名的理解,可以看看下面这篇博客,非常形象、好懂:
https://www.cnblogs.com/lovelinux199075/p/9022589.html
看完以后可能存在疑虑,那原文不就是明文传输了吗,那还安全吗?
所以要弄明白的是:数字签名的根本作用只是为了证明消息是鲍勃发出的、且原文没有被篡改。
如果原文是需要保密传输的话,就需要配合其他的安全机制。
二、实验操作
接下来就进入正题,接着上一篇《区块链学习之1在Ubuntu中搭建以太坊私有链》继续完成后续的节点操作。
1.创建账户
首先要创建账户以后才能挖矿。
1.创建新账户
personal.newAccount("密码")
创建成功以后将会返回账户的地址:“0x47e724836f7bd160c9bc6587452de96c442f4e0c”。
2.查询账户余额
eth.getBalance("账户地址")
由于这是一个新建的账户,所以现在查询的值为0:
2.挖矿
挖到一个区块会奖励以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。
1.查看矿工账户
eth.coinbase
这里查看到的矿工的账户,其实就是我们上一步创建的新账户:
2.设置挖矿的账号
miner.setEtherbase("账户地址")
3.开始挖矿
miner.start(1)
这个命令的意思是启动账号在节点上开始挖矿动作,括号里的1代表的是只启动一个进程,如果不填的话,它会不断的启动进程、消耗计算机资源。
出现这样的界面就表示挖到矿了:
- 我执行miner.start(1)命令的时候,每次执行到percentage=99以后就卡住了然后过很久很久以后出现“程序错误”的弹窗,不知道到到底是什么原因:
折腾了几天、快照不知道恢复了多少次,每次都是这种情况!我也记不清我最后是怎么弄把它弄好的……我估摸着分析吧,可能是我文件的路径没弄对……
当我终于看到挖矿成功的页面时:
4.停止挖矿
miner.stop()
3.查看区块高度
1.查看区块数量
eth.blockNumber
2.查看具体某个区块的内容
eth.getBlock(数字)
4.转账
1.创建第二个账户
方法和上面一样:
第二个账户的地址为:“0x1ceb8f15c5ec750260bc1a1992f0b85a05e77917”。
2.查询账户余额
查询第一个账户余额
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[0]),"ether")
查询第二个账户余额
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[1]),"ether")
- 至于单位的转换关系,我看别人是这样介绍的:
3.解锁钱包
首先要解锁钱包,否则无法进行转账。
因为我们要从第一个账户转出ether,所以我们需要解锁第一个账户:
personal.unlockAccount(web3.eth.accounts[0])
- 可以看到我们在解锁的时候遇到了报错:
查了一下,原来是因为新版本geth出于安全考虑,默认禁止了HTTP通道解锁账户。
解决方法:先exit关闭节点,然后添加–allow-insecure-unlock参数重新启动节点:
【geth --identity “TestNode” --rpc --rpcport “8545” --datadir mydata --port “30303” --networkid 6666 --nodiscover console --allow-insecure-unlock】
重新执行解锁命令,成功:
4.开始转账
web3.eth.sendTransaction({from:web3.eth.accounts[0] , to: web3.eth.accounts[1],value: web3.toWei(1, "ether")})
上图只是转账提交成功,而不是交易成功,需要矿工挖到新的区块才能算交易成功。
所以再次执行miner.start(1)
- 其实miner.stop()命令的返回值应该是true而不是null,但再不影响结果的前提下我也不想再去纠错了,如果有师傅们知道原因,欢迎留言哦~
再查看两个账户的余额:
转账成功!