尚硅谷以太坊区块链学习(3)

难、起名 2022-04-05 05:55:39 阅读数:548

学习 区块 硅谷 以太


前言

提示:服务外包区块链学习
只记录操作
尚硅谷以太坊区块链直达链接

一、搭建私链

1、创建创世区块

创建目录

$ mkdir myChain
$ cd myChain

创建名为genesis.json的文件,并输入内容

$ touch genesis.json
$ vi genesis.json

尚硅谷创世区块内容:

{

"config":{

"chainId": 15
},
"difficulty": "2000",
"gasLimit": "2100000",
"alloc": {

"0x634c4CF26680fa8C2Ef3d8B9FA4E6AE748667BB8": {
"balance": "300000000000000000000"}
}
}

根据尚硅谷的创世区块配置的私有链后面发起交易的时候会报交易未初始化的错误,于是在网上找到不报错的创世区块配置如下,具体项是干嘛的我也不太懂,想了解请自行百度

{

"config": {

"chainId": 666,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"ethash": {
}
},
"nonce": "0x0",
"timestamp": "0x5ddf8f3e",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x47b760",
"difficulty": "0x00002",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"0x634c4CF26680fa8C2Ef3d8B9FA4E6AE748667BB8":{
"balance":"300000000000000000000"} },
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

2、区块链初始化

初始化命令:

$ geth --datadir . init genesis.json

结果
在这里插入图片描述

在这里插入图片描述

3、正式启动私有链

$ geth --datadir . --networkid 666 console

networkid 区块链id 必须跟创世区块里的id一致
console 打印日志

错误

这样启动就会一直在找寻节点一直报错

在这里插入图片描述不报错命令

geth --datadir . --networkid 15 --nodiscover --http --http.addr 0.0.0.0 --http.port 8545 --http.corsdomain "*" --port 30305 --allow-insecure-unlock console 2>>geth.log

nodiscover 可以不让它一直找寻节点
http,http.addr,http.vhosts,http.port,http.corsdomain 都是跟本地服务有关,后面会讲是用来干嘛的
console 2>>geth.log将输出日志打印到geth.log,方便查看

在这里插入图片描述打开另一个终端,输入以下命令即可看打印的日志

tail -f geth.log

在这里插入图片描述

二、Geth控制台操作

1、常见对象与常用命令

常见对象

eth:主要包括对区块链进行访问和交互相关的方法;
net:主要包括查看P2P网络状态的方法;
admin:主要包括与管理节点相关的方法;
miner:主要包括挖矿相关的方法;
personal:包括账户管理的方法;
txpool:包括查看交易内存池的方法;
web3:包括以上所有对象,还包括一些通用方法。

常见命令

personal.newAccount():创建账户;
personal.unlockAccount():解锁账户;
eth.accounts:列出系统中的账户;
eth.getBalance():查看账户余额,返回值的单位是Wei;
eth.blockNumber():列出当前区块高度,也就是区块数量;
eth.getTransaction():获取交易信息;
eth.getBlock():获取区块信息;
miner.start():开始挖矿;
miner.stop():停止挖矿;
web3.fromWei():Wei换算成以太币;
web3.toWei():以太币换算成Wei;
txpool.status:交易池中的状态。

2、实际操作

1、查看预设帐号

创世区块中alloc就是预设的帐号,balance就是预设帐号的以太币余额

eth.getBalance("0x634c4CF26680fa8C2Ef3d8B9FA4E6AE748667BB8")

Wei到Ether的转化

web3.fromWei(eth.getBalance("0x634c4CF26680fa8C2Ef3d8B9FA4E6AE748667BB8"))

在这里插入图片描述

2、建立新帐号

两种方法

方法后输入密码

personal.newAccount()

方法参数填密码

personal.newAccount("1234")

在这里插入图片描述

这个时候再查看一下帐号

eth.accounts

就会有当前链上所有的帐号
在这里插入图片描述

注册过的帐号都会在这里,但是预设帐号不会在

3、开始挖矿

默认第一个注册的帐号为挖矿帐号,所以涨币也是会给第一个帐号

miner.start(1)

注意观察日志
在这里插入图片描述这就说明在准备挖矿了,安心等待
在这里插入图片描述

出现小锤子就表示挖矿成功了

结束挖矿

miner.stop()

在这里插入图片描述

查看链的区块高度,即区块总数

eth.blockNumber

在这里插入图片描述

再查看第一个注册帐号的余额

eth.getBalance(eth.accounts[0])

在这里插入图片描述

3、发起交易

交易前要把帐号解锁

personal.unlockAccount(eth.accounts[0])
personal.unlockAccount(eth.accounts[1])

在这里插入图片描述
发起交易

eth.sendTransaction({
from:eth.accounts[0],to:eth.accounts[1],value:100000000000000000})

结果会返回交易的Hash值
使用以下命令可以查看交易池

txpool

交易需要打包才会生效
所以又需要挖矿
挖矿成功之后就可以查看余额是否发生了变化

三、链接MataMask

1、链接MataMask

在这里插入图片描述
选择Localhost 8545
这个时候明白启动私链时有关的网络配置的原因了
链接成功后原始帐号就会是创世区块中的预设帐号以及它的余额
在这里插入图片描述
这个时候可以选择导入帐号
选择Json文件
到链文件目录下keystore下选择要导入的帐号文件
再输入注册帐号时输入的密码就可以了
等待导入时间可能会很长
在这里插入图片描述
设置->网络->Localhost 8545
修改链ID为创世区块中的chainId
保存
这样可以保证后面用MataMask发交易尽可能不出错

到这的时候就已经可以用MataMask在你的帐号之间转币了
不过发起交易之后也需要在Geth客户端对交易进行打包
打包成功之后MataMask会给提示

Over

版权声明:本文为[难、起名]所创,转载请带上原文链接,感谢。 https://blog.csdn.net/wobuxiangxin1314/article/details/123714128