文中使用的环境是:Windows 7 x64
本文是为下一篇文章《BCH算力战尘埃落定,如何本地模拟算力攻击?》进行铺垫的基础知识,对这一部分基础知识比较了解的童鞋可以直接往跳过。
0x1 安装geth
0x2 准备配置文件
进入geth目录或你想要存放的目录,创建 genesis.json文件(可自定义),文件内容如下:
0x3 写入创世块
geth --datadir test init genesis.json
命令中的 –datadir 选线后面跟着一个自定义目录,这里的意思是数据存储在test文件夹中, init 表示初始化区块链,genesis.json 是init 命令的参数,是指定的配置文件。
创建成功回显是这样的
geth --datadir test --networkid 1111 --nodiscover console
console 表示进入交互控制台
–datadir 选项指定使用test数据目录
–networkid 后面跟着数字,这里的 1111 表示这个私有链的网络ID为1111 ,以太网公网的网络ID是1
–nodiscover 禁止节点发现 手动添加节点
使用eth.accounts 查看现有的用户,我们没有添加用户,所以为空
接下来我们创建两个密码为123456账户。
创建账户的命令为:
personal.newAccount("密码")或者personal.newAccount()
注意:此命令区分大小写。
添加过后再查看就能看到我们刚刚创建的账户了
使用eth.getBalance 获取账户余额。 刚刚创建的两个账户没有钱,所以为0
0x4 开始挖矿
使用miner.start()命令 来启动挖矿。
start() 里面可设置线程,如:miner.start(5) 表示五线程。
运行以后会被挖矿信息刷屏。
第一次挖矿会先生成挖矿所需要的DAG文件,需要等这个进度100%以后才会开始挖。这个过程会很慢。
如果想停止,直接在界面输入 miner.stop() 就可以了
如果字符被挖矿刷屏信息冲掉,没有关系的,只要输入完整的miner.stop()之后回车,即可停止挖矿。
挖到一个区块以后会有五个以太币作为奖励,挖矿的奖励会进入矿工的账户,这个账户默认是 coinbase,默认情况下这个账户是本地账户中的第一个账户。
使用 eth.coinbase 查看账户地址
没挖矿前,coinbase账户的余额是0,挖到一个区块后会自动转到这个账户,如果想转 到别的账户可以通过 miner.setEtherbase(eth.accounts[下标]) 命令更换接收奖励的账户。
别看这里那么多个0 其实只有五个以太币。getBalance() 返回值的单位是wei,wei是以太币中最小的单位,一个以太币等于10的18次方个wei。想要查看有多少个以太币,要用web3.fromWei()函数将返回值算成以太币。
web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
先查看一下我们两个账户的余额。 账户0 有五个以太币 账户 1 为零个。

amount = web3.toWei(2,'ether')
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
这里 amount = web3.toWei(2,’ether’) 是把两个以太币转换为wei 赋值给amount。
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})函数的第一个参数 是发送者地址,第二个接收者的地址,第三个是转账的金额,以wei为单位。
执行报错 是因为账户每过一段时间就会被锁住,要发起交易,需要先输入密码解锁账户,从那个账户发起的交易就要解锁那个账户。
personal.unlockAccount(eth.accounts[0])
然后执行转账操作。
回显这个说明交易已经提交到区块链里了,返回的hash值是交易hash,但是交易并未 被处理。 可以通过txpool.status来查看状态。
可以看到pending里有一条交易信息,pending的意思是已提交但还未被处理的交易。等待中…
要让交易生效,我们就必须要挖矿,去处理这个块。
启动挖矿。
miner.start(1);admin.sleepBlocks(1);miner.stop();
这条命令的意思是 启用一个线程来挖矿,挖到第一块区块就停止挖矿。
当他返回为true 的时候就说明挖完了。 可以使用txpool.startus查看
pending为0 说明交易已经被处理了,可以通过以下命令查看账户余额。
账户1的余额已经有了我们刚刚用账户0转出的2个以太币了,账户0余额有8个以太 币是因为刚刚我们挖矿的奖励 3+5 = 8
eth.blockNumber
使用以下命令可以通过区块高度查看交易信息
eth.getBlock(需要查看的高度)
也可以通过交易hash 查看交易记录
eth.getTransaction("交易hash")
为什么要连接别的节点?
admin.nodeInfo.enode
然后在节点A 的console中执行 admin.addPeer() 方法这样就可以连接到节点B了
命令:
admin.addPeer("节点B的enode地址")
需要注意的是@后面的0.0.0.0需要换成节点B的IP地址 如:
admin.addPeer("enode://1dbfc88113b0b95ec96ba9666a37aef07aee8aa64fceaed077d7c0e7a17f7e8a7756832af6b2b7d286cc6f03bcf2a8d80ef815a175e468c13da808513cf66500@127.0.0.1:30303")
想查看是否连接上可以通过admin.peers查看连接到的其他节点的信息,通过 net.peerCount可以查看到节点连接的数量
转载自:DVP去中心化漏洞平台公众号